题解 P6022 【快乐水】
第十个点真的恶心
本题思维难度是橙题没错,但这第十个点和这通过率不让它止步于橙题啊
正题:本题模拟附属物被交换的过程并求解,如果不能白嫖其每一轮换的快乐水数一定小于n,否则Inf。
注意:
1.开
2.最后一个点又卡时间又卡正确性,如果是像我一样的方法就乖乖循环
亲测
说到底还是自己菜嘛
具体康注释
#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;
}
//这么大的常数