• 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;
    }
    


  • 相关阅读:
    windows C++ 网络编程
    typedef void (*Fun) (void) 的理解——函数指针——typedef函数指针
    获取屏幕分辨率(C/C++)
    随手记
    【SQLite】可视化工具SQLite studio
    C++宽窄字符串转换
    并发编程1——一个简单的多线程程序
    css中:after和:before的作用及使用方法
    uniapp—App—自定义导航栏
    vue—封装无数据时默认展示组件
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/6831087.html
Copyright © 2020-2023  润新知