奶牛的排列經過 \(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';
}