题解 P6022 【快乐水】

· · 题解

第十个点真的恶心

本题思维难度是橙题没错,但这第十个点和这通过率不让它止步于橙题啊

正题:本题模拟附属物被交换的过程并求解,如果不能白嫖其每一轮换的快乐水数一定小于n,否则Inf。

注意:

1.开long\;long

2.最后一个点又卡时间又卡正确性,如果是像我一样的方法就乖乖循环28000000次吧,如果是隔壁题解类型的就去参考他的。

亲测28000000能过

说到底还是自己菜嘛

具体康注释

Code:
#include<cstdio>
int a[6],b[6];//b数组是当前第i个附属品数
int n,m,sum=0,summ=0;//summ是本轮换的快乐水数
long long ans=0;//记得long long
int main()
{
    scanf("%d %d",&n,&m);
    ans+=n;//开局买几瓶就喝几瓶
    sum=n;//sum是上一轮换的快乐水数
    for(int i=1;i<=m;i++)
        scanf("%d",&a[i]);
    for(int j=1;j<=28000001;j++)//我试了好久才试出来的TAT
    {
        for(int i=1;i<=m;i++)
        {
            b[i]+=sum;//加上上轮瓶子数
            summ=summ+b[i]/a[i];
            b[i]%=a[i];
        }
        if(summ>=n)//核心,如果不能白嫖其一轮换的快乐水数一定小于n
        {
            printf("Inf");
            return 0;
        }
        sum=summ;
        ans+=summ;
        summ=0;
    }
    printf("%lld",ans);//lld坑了我好几次
    return 0;
}

//这么大的常数Copy容易被发现哦(van♂笑