답안 #363388

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
363388 2021-02-05T19:01:03 Z mosiashvililuka Cat (info1cup19_cat) C++14
25 / 100
626 ms 14444 KB
#include<bits/stdc++.h>
using namespace std;
int a,b,c,d,e,i,j,ii,jj,zx,xc,t,tes,f[200009],boo,pi,k[200009],qi,qqi,bo[200009],fx[200009];
pair <int, int> p[3000009],q[200009],qq[200009];
void swp(int q, int w){
	swap(f[q],f[w]);
	swap(f[a-q+1],f[a-w+1]);
}
int main(){
	//ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	//cin>>tes;
	scanf("%d\n",&tes);
	for(t=1; t<=tes; t++){
		//cin>>a;
		if(t!=tes) scanf("%d\n",&a); else scanf("%d",&a);
		for(i=1; i<=a; i++){
			//cin>>f[i];
			if(i==a) scanf("%d",&f[i]); else scanf("%d ",&f[i]);
		}
		boo=0;
		for(i=1; i<=a/2; i++){
			if(f[i]>a/2){
				boo=1;
				break;
			}
		}
		if(boo==0){
			/*boo=0;
			for(i=1; i<=a/2; i++){
				if(f[a-i+1]-f[i]!=a/2){
					boo=1;
					break;
				}
			}
			if(boo==1){
				cout<<-1<<endl;
				continue;
			}*/
			pi=0;
			for(i=1; i<=a/2; i++){
				k[f[i]]=i;
			}
			for(i=1; i<=a/2; i++){
				if(k[i]==i) continue;
				pi++;
				p[pi].first=k[i];
				p[pi].second=i;
				c=k[i];d=i;
				swap(k[i],k[f[i]]);
				swap(f[c],f[d]);
			}
			for(i=1; i<=pi; i++){
				swap(f[a-p[i].first+1],f[a-p[i].second+1]);
			}
			boo=0;
			for(i=2; i<=a; i++){
				if(f[i]<f[i-1]){
					boo=1;
					break;
				}
			}
			if(boo==1){
//				cout<<-1<<endl;
				printf("-1\n");
				continue;
			}
			//cout<<pi<<" "<<pi<<endl;
			printf("%d %d\n",pi,pi);
			for(i=1; i<=pi; i++){
				//cout<<p[i].first<<" "<<p[i].second<<endl;
				printf("%d %d\n",p[i].first,p[i].second);
			}
			continue;
		}
		boo=0;
		for(i=1; i<=a/2; i++){
			j=a-i+1;
			if(f[i]+f[j]!=a+1){
				boo=1;
				break;
			}
		}
		if(boo==0){
			//printf("%d 0\n",a);
		}else{
			printf("-1\n");
			continue;
		}
		qi=0;qqi=0;
		for(i=1; i<=a/2; i++){
			if(f[i]>f[a-i+1]){
				qi++;
				q[qi].first=a-i+1;
				q[qi].second=i;
			}else{
				/*qqi++;
				qq[qqi].first=a-i+1;
				qq[qqi].second=i;*/
			}
		}
		if(qi%2==1){
			printf("-1\n");
			continue;
		}else{
			//printf("%d 0\n",a);
		}
		if(1==1){
			//just solution
		for(i=1; i<qi; i+=2){
			//cout<<q[i].first<<" l "<<q[i+1].second<<endl;
			pi++;
			p[pi].first=q[i].first;
			p[pi].second=q[i+1].second;
			swp(q[i].first,q[i+1].second);
		}
		/*for(i=1; i<=a; i++) cout<<f[i]<<" rt ";
		cout<<endl;*/
		for(i=1; i<=a; i++){
			if(f[i]<1||f[i]>a){
				cout<<"tuuuu";
				exit(0);
			}
		}
		for(i=1; i<=a; i++){
			if(fx[f[i]]==t){
				cout<<"polplplp";
				exit(0);
			}
			fx[f[i]]=t;
		}
		boo=0;
		if(boo==0){
			/*boo=0;
			for(i=1; i<=a/2; i++){
				if(f[a-i+1]-f[i]!=a/2){
					boo=1;
					break;
				}
			}
			if(boo==1){
				cout<<-1<<endl;
				continue;
			}*/
			for(i=1; i<=a/2; i++){
				k[f[i]]=i;
			}
			for(i=1; i<=a/2; i++){
				if(k[i]==i) continue;
				pi++;
				p[pi].first=k[i];
				p[pi].second=i;
				c=k[i];d=i;
				swap(k[i],k[f[i]]);
				swap(f[c],f[d]);
			}
			/*for(i=1; i<=pi; i++){
				swap(f[a-p[i].first+1],f[a-p[i].second+1]);
			}
			boo=0;
			for(i=2; i<=a; i++){
				if(f[i]<f[i-1]){
					boo=1;
					break;
				}
			}*/
			if(boo==1){
//				cout<<-1<<endl;
				printf("-1\n");
				continue;
			}
			//cout<<pi<<" "<<pi<<endl;
			printf("%d %d\n",pi,pi);
			for(i=1; i<=pi; i++){
				//cout<<p[i].first<<" "<<p[i].second<<endl;
				printf("%d %d\n",p[i].first,p[i].second);
			}
			continue;
		}
		}
	}
	return 0;
}

Compilation message

cat.cpp: In function 'int main()':
cat.cpp:12:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   12 |  scanf("%d\n",&tes);
      |  ~~~~~^~~~~~~~~~~~~
cat.cpp:15:19: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   15 |   if(t!=tes) scanf("%d\n",&a); else scanf("%d",&a);
      |              ~~~~~^~~~~~~~~~~
cat.cpp:15:42: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   15 |   if(t!=tes) scanf("%d\n",&a); else scanf("%d",&a);
      |                                     ~~~~~^~~~~~~~~
cat.cpp:18:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   18 |    if(i==a) scanf("%d",&f[i]); else scanf("%d ",&f[i]);
      |             ~~~~~^~~~~~~~~~~~
cat.cpp:18:42: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   18 |    if(i==a) scanf("%d",&f[i]); else scanf("%d ",&f[i]);
      |                                     ~~~~~^~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 22 ms 748 KB Integer parameter [name=x] equals to 9, violates the range [1, 8]
# 결과 실행 시간 메모리 Grader output
1 Correct 29 ms 620 KB Output is correct
2 Correct 31 ms 620 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 22 ms 748 KB Integer parameter [name=x] equals to 9, violates the range [1, 8]
# 결과 실행 시간 메모리 Grader output
1 Correct 29 ms 620 KB Output is correct
2 Correct 31 ms 620 KB Output is correct
3 Correct 608 ms 13076 KB Output is correct
4 Correct 595 ms 11900 KB Output is correct
5 Correct 626 ms 14444 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 22 ms 748 KB Integer parameter [name=x] equals to 9, violates the range [1, 8]