zoukankan      html  css  js  c++  java
  • HDU 5045 5047 5050 5053(上海网络赛E,F,I,L)

    HDU 5045 5047 5050 5053

    太菜了,名额差点没保住。吓尿。。赶紧开刷树链抛分

    5045:状压DP。压缩10个人。因为两个人不能差2以上,所以能够用01表示

    5047:推推公式就可以,每次交线多4条

    5050:求GCD。用java大叔就可以

    5053:签到题

    代码:

    5045:

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    const int N = 1025;
    
    int t, n, m, vis[N][N];
    double dp[N][N], g[15][N];
    
    double dfs(int u, int num) {
        if (u == (1<<n) - 1) u = 0;
        if (vis[u][num]) return dp[u][num];
        vis[u][num] = 1;
        if (num == m) return dp[u][num] = 0;
        dp[u][num] = 0;
        for (int i = 0; i < n; i++) {
            if (u&(1<<i)) continue;
            dp[u][num] = max(dp[u][num], dfs(u|(1<<i), num + 1) + g[i][num]);
        }
        return dp[u][num];
    }
    
    int main() {
        int cas = 0;
        scanf("%d", &t);
        while (t--) {
            scanf("%d%d", &n, &m);
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++) {
                    scanf("%lf", &g[i][j]);
                }
            }
            memset(vis, 0, sizeof(vis));
            printf("Case #%d: %.5lf
    ", ++cas, dfs(0, 0));
        }
        return 0;
    }

    5047:

    #include <cstdio>
    #include <cstring>
    
    typedef long long ll;
    
    const ll MOD = 100000000;
    int t;
    ll n;
    
    struct Num {
        ll num[5];
        int len;
        Num() {
            len = 0; 
            memset(num, 0, sizeof(num));
        }
        void init(ll x) {
            len = 0;
            if (x == 0) {
                len = 1;
                num[0] = 0;
                return;
            }
            while (x) {
                num[len++] = x % MOD;
                x /= MOD;
            }
        }
    
        Num operator * (Num c) {
            Num ans;
            for (int i = 0; i < len; i++) {
                for (int j = 0; j < c.len; j++) {
                    ans.num[i + j] += num[i] * c.num[j];
                }
            }
            ans.len = len + c.len;
            for (int i = 0; i < ans.len; i++) {
                ans.num[i + 1] += ans.num[i] / MOD;
                ans.num[i] %= MOD;
            }
            return ans;
        }
    
        void add() {
            while (len && num[len - 1] == 0) len--;
            num[0] += 2;
            for (int i = 0; i < len; i++) {
                num[i + 1] += num[i] / MOD;
                num[i] %= MOD;
            }
            if (num[len]) len++;
            while (len && num[len - 1] == 0) len--;
        }
    
        void print() {
            while (len && num[len - 1] == 0) len--;
            for (int i = len - 1; i >= 0; i--) {
                if (i == len - 1) printf("%I64d", num[i]);
                else printf("%08I64d", num[i]);
            }
            printf("
    ");
        }
    } A, B;
    
    int main() {
        int cas = 0;
        scanf("%d", &t);
        while (t--) {
            scanf("%I64d", &n);
            A.init(n - 1);
            B.init(8 * n + 1);
            Num c = (A * B);
            c.add();
            printf("Case #%d: ", ++cas);
            c.print();
        }
        return 0;
    }

    5050:

    import java.util.*;
    import java.math.*;
    import java.io.*;
    
    public class Main {
        public static BigInteger gcd(BigInteger a, BigInteger b) {
            if (b.equals(BigInteger.valueOf(0)) == true) return a;
            return gcd(b, a.mod(b));
        }
        public static void main(String args[]) {
            Scanner cin = new Scanner(System.in);
            int t;
            t = cin.nextInt();
            String a, b;
            BigInteger aa, bb;
            for (int cas = 1; cas <= t; cas++) {
                a = cin.next();
                b = cin.next();
                aa = BigInteger.valueOf(0);
                bb = BigInteger.valueOf(0);
                for (int i = 0; i < a.length(); i++) {
                    aa = aa.multiply(BigInteger.valueOf(2));
                    if (a.charAt(i) == '1') aa = aa.add(BigInteger.valueOf(1));
                }
                for (int i = 0; i < b.length(); i++) {
                    bb = bb.multiply(BigInteger.valueOf(2));
                    if (b.charAt(i) == '1') bb = bb.add(BigInteger.valueOf(1));
                }
                BigInteger tmp = gcd(aa, bb);
                String ans = "";
                while (tmp.equals(BigInteger.valueOf(0)) == false) {
                    if (tmp.mod(BigInteger.valueOf(2)).equals(BigInteger.valueOf(1))) ans += '1';
                    else ans += '0';
                    tmp = tmp.divide(BigInteger.valueOf(2));
                }
                System.out.print("Case #");
                System.out.print(cas);
                System.out.print(": ");
                for (int i = ans.length() - 1; i >= 0; i--)
                    System.out.print(ans.charAt(i));
                System.out.println();
            }
        }
    }

    5053:

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <vector>
    #include <set>
    using namespace std;
    
    typedef long long ll;
    
    int t;
    ll a, b;
    
    int main() {
        int cas = 0;
        scanf("%d", &t);
        while (t--) {
            scanf("%I64d%I64d", &a, &b);
            ll sum = 0;
            for (ll i = a; i <= b; i++)
                sum += i * i * i;
            printf("Case #%d: %I64d
    ", ++cas, sum);
        }
        return 0;
    }
    


  • 相关阅读:
    jsp转向
    什么是 XDoclet?
    tomcat中的几点配置说明
    mysql5问题
    POJ 3734 Blocks
    POJ 2409 Let it Bead
    HDU 1171 Big Event in HDU
    POJ 3046 Ant Counting
    HDU 2082 找单词
    POJ 1286 Necklace of Beads
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/6831087.html
Copyright © 2011-2022 走看看