zoukankan      html  css  js  c++  java
  • Codeforces 830C Bamboo Partition (看题解)

    Bamboo Partition

    列公式, 整除分块, 想不到, 好菜啊。

    #include<bits/stdc++.h>
    #define LL long long
    #define fi first
    #define se second
    #define mk make_pair
    #define PLL pair<LL, LL>
    #define PLI pair<LL, int>
    #define PII pair<int, int>
    #define SZ(x) ((int)x.size())
    #define ull unsigned long long
    
    using namespace std;
    
    const int N = 100 + 7;
    const int inf = 0x3f3f3f3f;
    const LL INF = 0x3f3f3f3f3f3f3f3f;
    const int mod = 1e9 + 7;
    const double eps = 1e-8;
    const double PI = acos(-1);
    
    LL n, k, a[N], b[10000007], tar, tot;
    
    int main() {
        scanf("%lld%lld", &n, &k);
        for(int i = 1; i <= n; i++) {
            scanf("%lld", &a[i]);
            tar += a[i];
            a[i]--;
        }
        tar += k;
        for(int i = 1; i <= n; i++) {
            for(int j = 1, k; j < a[i]; j = k + 1) {
                k = a[i] / (a[i] / j);
                b[tot++] = j;
            }
            b[tot++] = a[i] + 1;
        }
        sort(b, b + tot);
        tot = unique(b, b + tot) - b;
        for(int i = tot - 1; i >= 0; i--) {
            LL d = b[i], val = 0;
            for(int i = 1; i <= n; i++)
                val += d * (a[i] / d);
            if(n * d + val <= tar) {
                val = 0;
                for(int i = 1; i <= n; i++) val += a[i] / d;
                printf("%lld
    ", tar / (val + n));
                return 0;
            }
        }
        return 0;
    }
    
    /*
    */
  • 相关阅读:
    JUC 1
    给定一个随机数生成器randm(),获得randn()
    堆与优先队列
    集合与映射
    二分搜索树
    链表
    栈与队列
    PostgreSQL ALTER TABLE 命令
    postgresql修改自增序列
    SQL 删除重复行,只保留一条记录
  • 原文地址:https://www.cnblogs.com/CJLHY/p/10474130.html
Copyright © 2011-2022 走看看