一个风和日丽的晚上
《风和日丽》
我上了一节编程课
《编程课》
学了一道题
《学了》
CSP-J 2021 分糖果
《。。。》
所以我要写一篇题解
《所以》
这道题看别的题解是道巧算
《看别的题解》
但是我这个蒟蒻根本发现不了还能这样算
《人间真实》
怎么办呢
《先枚举再想办法》
####正片开始
《片》
看起来题目介绍很多,实际上是道红题
前面不知道某人说的先枚举再想办法,所以要先照着这样做
某人:怎么正片开始还提我?
好了好了,开始枚举
因为是一道入门题,应该不用过多介绍
首先定义变量
因为要求最多能获得多少,所以还要一个max
int n,l,r,mx;
然后输入
cin>>n>>l>>r;
为了时间复杂度哪哪都要省
虽然格式化快不了多少,但也至少快了
scanf("%d%d%d",&n,&l,&r);
然后循环,遍历拿多少能获得最多
经过简单计算,获得的数量=k mod n
为了省时间,如果max是n-1,那么就直接退出
因为mod n的最大值就是n-1,已知是最大了不退出就有点浪费时间
最后输出,省时间,输出也格式化
好了,贴完整代码
#include<bits/stdc++.h>//头文件他不要忘
using namespace std;//命名空间要写上
int n,l,r,mx;//定义四个小变量
int main(){//主函数写复合语句
scanf("%d%d%d",&n,&l,&r);//输入变量
for(int i=r;i>=l;i--){//再枚举
if(i%n>mx)mx=i%n;//找最大值
if(mx==n-1)break;//退出吗?
}
printf("%d",mx);//输出之后
return 0;//再见程序!
}//不要忘了括号哟!
可是会发现,测试点#9 T掉了,通过下载测试点可知,光看不计算,循环次数需要比4亿还多,肯定会TLE
只差0.06秒!
其实要是不把输入输出格式化,1.20s都可以
一个格式化 差距竟然这么大