题解:B4519 [科大国创杯小学组 2026] 贪吃巧克力
模拟题。
每天从左右两边开始往中间找契合度等于当天幸运值的格子。
没找到就把巧克力吃完,找到了就看是从左边找到的还是从右边找到的。
如果从左边找到,输出
如果从右边找到,输出
这样不断模拟,时间复杂度为
具体过程还是见代码吧。
#include<bits/stdc++.h>
using namespace std;
long long c,n,m,p,x,l,r,a[1000010];
int w(int now)
{
return l+((now-l+p)%(r-l+1));
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin>>c>>n>>m;
l=1;
r=n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=m;i++)
{
cin>>p>>x;
int z=l,y=r,f=-1;
for(;z<=y;z++,y--)
{
if(a[z]*a[w(z)]==x)
{
f=1;
break;
}
if(a[y]*a[w(y)]==x)
{
f=0;
break;
}
}
//每天从左右两边开始往中间找契合度等于当天幸运值的格子。
if(z>y)
{
cout<<"F\n";
l=z;
r=y;
//没找到
}
else if(f==1)
{
cout<<"L "<<z-l+1<<'\n';
l=z+1;
//从左边找到
}
else
{
cout<<"R "<<r-y+1<<'\n';
r=y-1;
//从右边找到
}
}
return 0;
}