题解:P12557 [UOI 2024] Football
简单题。
考虑把下标转移到
容易想到把整段整段的
记最终到达的位置是
因为
容易发现如果我们已知
int n,q;
int p[N];
int a[N];
bool vis[N];
bool keyn[N];
int res[N];
int ans;
int g;
vector <int> ofl[N];
void gocheck(int x){
// cout<<"!"<<x<<endl;
if(vis[x]) return;
vis[x]=1;
ans=min(ans,p[x]);
gocheck((x+g)%n);
gocheck((x+n-g)%n);
}
int main(){
#ifdef Shun
freopen(".in","r",stdin);
freopen(".out","w",stdout);
#endif
ios::sync_with_stdio(false);
cin>>n>>q;
fr1(i,0,n-1) cin>>p[i];
fr1(i,1,q) cin>>a[i],(a[i]+=a[i-1])%=n;
fr1(i,1,q) ofl[__gcd(n,a[i])].pb(i);
fr1(i,1,n){
if(ofl[i].empty()) continue;
fr1(j,0,n-1) vis[j]=0;
fr1(j,1,q) keyn[j]=0;
for(auto j:ofl[i]) keyn[j]=1;
g=i;
ans=1e9;
fr1(j,1,q){
gocheck(a[j]);
if(keyn[j]){
res[j]=ans;
}
}
}
fr1(i,1,q) cout<<res[i]<<' ';
ET;
}
//ALL FOR Zhang Junhao.