bzoj 5074: [Lydsy十月月赛]小B的数字

来源:互联网 发布:软考网络规划设计师 编辑:程序博客网 时间:2024/05/21 10:53

一个不行的证明

b1+b2+b3+...+bn=C
也就是说
2b12b22b3....2bn=2C
那么,加上a的话,也就是
(2b1)a1>=2C
得到b1>=C/a1
那么就是说
C/a1+C/a2+C/a3+...+C/an<=C
只要这条式子成立,C就是一个合法的解了
明显的两边除以C
所以只要1/a1+1/a2+1/a3+...+1/an<=1,就存在解了
然而这样并不可行,因为你不能是小数啊,他一定要向上取整,于是就GG了
我只是说这个证明不行,但题解似乎是那个结论。。
虽然我觉得结论是错的

另一个做法

于是我就去学了另外一个做法
%%%
感觉这个正常多了

CODE:

#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#include<cmath>using namespace std;int a[15];int n;bool check (int x){    int sum=0;    for (int u=1;u<=n;u++)        sum=sum+ceil((double)x/a[u]);    return sum<=x;}int main(){    int T;    scanf("%d",&T);    while (T--)    {        scanf("%d",&n);        if (n>10)        {            while (n--)            {                int x;                scanf("%d",&x);            }            printf("NO\n");            continue;        }        else        {            for (int u=1;u<=n;u++) scanf("%d",&a[u]);            bool tf=false;            for (int u=1;u<=500000;u++)                if (check(u))                {                    tf=true;break;                }            if (tf) printf("YES\n");            else printf("NO\n");        }    }    return 0;}
阅读全文
0 1