Codeforces Gym100971 B.Derangement (IX Samara Regional Intercollegiate Programming Contest Russia, Samara, March 13)
昨天训练打的Gym,今天写题解。
这个题就是输出的时候有点小问题,其他的都很简单。
代码:
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 const int N=1e6+10; 6 int a[N]; 7 int main(){ 8 int n; 9 while(~scanf("%d",&n)){ 10 int num=0; 11 for(int i=1;i<=n;i++){ 12 scanf("%d",&a[i]); 13 if(a[i]==i)num++; 14 } 15 if(num%2==0)cout<<num/2<<endl; 16 else cout<<num/2+1<<endl; 17 int ans=0; 18 int temp; 19 for(int i=1;i<=n;i++){ 20 if(a[i]==i){ 21 ans++; 22 if(ans==2){ 23 printf("%d %d\n",temp,i); 24 swap(a[temp],a[i]); 25 ans=0; 26 } 27 else temp=i; 28 } 29 } 30 if(num%2!=0){ 31 for(int i=1;i<=n;i++){ 32 if(a[i]!=i){ 33 printf("%d %d\n",i,temp); 34 break; 35 } 36 } 37 } 38 } 39 return 0; 40 }