这是前两天刚结束的第十三届蓝桥杯的C++ B组的C题目,今年因为疫情的特殊原因采取了线上线下两种比赛方式。本题的核心是模运算,在刚开始拿到题目的时候进行分析后想到用暴力+枚举的方法来计算,还把数据范围扩到了long long类型的,然而还是tle了(笑哭).附上比赛时候提交的代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll a,b,n;
cin>>a>>b>>n;
ll ans=0,day=0;
while(1)
{
ans+=a;
day++;
if(ans>=n)
break;
ans+=a;
day++;
if(ans>=n)
break;
ans+=a;
day++;
if(ans>=n)
break;
ans+=a;
day++;
if(ans>=n)
break;
ans+=a;
day++;
if(ans>=n)
break;
ans+=b;
day++;
if(ans>=n)
break;
ans+=b;
day++;
if(ans>=n)
break;
}
cout<<day<<endl;
return 0;
}
没啥说的,纯纯模拟出来,然而听了y总的讲解和在Acwing平台上提交后发现不能暴力,这样不会AC,只能得部分解。我…我的心态很稳,在上面得方法应该加以优化得,算出一周得总题目数后,再用n对其取模,再枚举哪一天刚好把题目能做完。附上AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll a,b,n;
cin>>a>>b>>n;
ll cnt=5*a+2*b; //一周能做的总题数目
ll ans=0,day=0;
day+=n/cnt*7;
n%=cnt;
while(n)
{
ans+=a;
day++;
if(ans>=n)
break;
ans+=a;
day++;
if(ans>=n)
break;
ans+=a;
day++;
if(ans>=n)
break;
ans+=a;
day++;
if(ans>=n)
break;
ans+=a;
day++;
if(ans>=n)
break;
ans+=b;
day++;
if(ans>=n)
break;
ans+=b;
day++;
if(ans>=n)
break;
}
cout<<day<<endl;
return 0;
}
搞定,不得不说,蓝桥杯得oi赛制是真得难受啊。