奶牛的排列经过 \(x\) 次后会回到原来的位置,理解以下:\([a_1,a_2]\) 的牛翻转两次就会回到原来的位置,\([b_1,b_2]\) 的牛翻转两次也会回到原来的位置,所以原来奶牛的排列经过一定次数的旋转后一定会回到原来位置。
我们只要先模拟得出多少次后第 \(i\) 位的奶牛会回到原来的位置,然后用总次数取模后再进行模拟即可。
代码:
#include<bits/stdc++.h>
using namespace std;
int N,K,A1,A2,B1,B2,res[101];
int nex(int x){
if(A1<=x&&x<=A2) x=A1+A2-x;
if(B1<=x&&x<=B2) x=B1+B2-x;
return x;
}
int main(){
cin>>N>>K>>A1>>A2>>B1>>B2;
for(int i=1;i<=N;++i){
int p=1,cur=nex(i);
while(cur!=i){
p++;
cur=nex(cur);
}
int k=K%p;
for(int j=0;j<k;++j)cur=nex(cur);
res[cur]=i;
}
for(int i=1;i<=N;++i) cout<<res[i]<<'\n';
}
标签:A1,int,题解,位置,P9951,Swapity,回到,原来,奶牛
From: https://www.cnblogs.com/cly312/p/18416170