题解:CF1729F Kirei and the Linear Function
这是蓝??????
首先把
考虑到
注意需要在 map 中插入
int query(int l,int r){
return (sum[r]-sum[l-1]+9)%9;// 前缀和查询
}
void sol(){
string s;
cin>>s;
int n=s.size();
s=" "+s;
for (int i=1;i<=n;i++){
sum[i]=sum[i-1]+s[i]-'0';
sum[i]%=9;
}
int len,q;
cin>>len>>q;
map<int,pii> mp;
for (int i=1;i+len-1<=n;i++){
int x=query(i,i+len-1);
if (!mp.count(x)) mp[x]={i,0};
else if (mp[x].se==0) mp[x].se=i;
}
// for (pair<int,pii> kk:mp) cout<<kk.fi<<' '<<kk.se.fi<<' '<<kk.se.se<<endl;
while (q--){
int l,r,x;
cin>>l>>r>>x;
int num=query(l,r);
int ans1=1e9,ans2=1e9;
for (int _=0;_<9;_++){
for (int __=0;__<9;__++){
if (!mp.count(_)) continue;
if (!mp.count(__)) continue;
if ((_*num%9+__)%9==x){
if (_==__&&mp[_].se==0) continue;//相等却只有一个数不能取
int xx=mp[_].fi;
int yy=(_==__?mp[_].se:mp[__].fi);//相等时要取次小值
// cout<<"!!! "<<_<<' '<<__<<' '<<xx<<' '<<yy<<endl;
if (xx<ans1) ans1=xx,ans2=yy;
else if (xx==ans1) ans2=min(ans2,yy);
}
}
}
if (ans1==1e9&&ans2==1e9) cout<<-1<<' '<<-1;
else cout<<ans1<<" "<<ans2;
cout<<endl;
}
}