제출 #216209

#제출 시각아이디문제언어결과실행 시간메모리
216209PajarajaCat (info1cup19_cat)C++17
50 / 100
1088 ms27624 KiB
#include <bits/stdc++.h> #define MAXN 200007 using namespace std; int p[MAXN],pi[MAXN],n; bool vi[MAXN]; bool inv(int k) {return p[k]>p[n+1-k];} int pv(int k) {return min(p[k],p[n+1-k]);} int main() { int t; scanf("%d",&t); while(t--) { int c=0,br=0; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&p[i]); fill(vi,vi+MAXN,false); bool pr=false; for(int i=1;i<=n/2;i++) if(p[i]+p[n+1-i]!=n+1) pr=true; for(int i=1;i<=n/2;i++) if(p[i]>p[n+1-i]) c++; if(pr || c%2==1) {printf("-1\n"); continue;} for(int i=1;i<=n/2;i++) pi[pv(i)]=i; vector<int> sw1,sw2; for(int i=1;i<=n/2;i++) if(!vi[i]) { int k=pi[i]; vi[i]=true; while(k!=i) { vi[k]=true; if(inv(k)) { int r=pv(k); sw1.push_back(k); sw2.push_back(n+1-r); swap(p[k],p[n+1-r]); swap(p[n+1-k],p[r]); } else { int r=pv(k); sw1.push_back(k); sw2.push_back(r); swap(p[k],p[r]); swap(p[n+1-k],p[n+1-r]); } k=pi[k]; } } vector<int> zs; for(int i=1;i<=n/2;i++) if(p[i]>p[n+1-i]) zs.push_back(i); for(int i=0;i<zs.size();i+=2) {sw1.push_back(zs[i]); sw2.push_back(n+1-zs[i+1]); sw1.push_back(zs[i]); sw2.push_back(zs[i+1]);} printf("%d %d\n",sw1.size(),sw2.size()); for(int i=0;i<sw1.size();i++) printf("%d %d\n",sw1[i],sw2[i]); } }

컴파일 시 표준 에러 (stderr) 메시지

cat.cpp: In function 'int main()':
cat.cpp:51:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=0;i<zs.size();i+=2) {sw1.push_back(zs[i]); sw2.push_back(n+1-zs[i+1]); sw1.push_back(zs[i]); sw2.push_back(zs[i+1]);}
               ~^~~~~~~~~~
cat.cpp:52:41: warning: format '%d' expects argument of type 'int', but argument 2 has type 'std::vector<int>::size_type {aka long unsigned int}' [-Wformat=]
   printf("%d %d\n",sw1.size(),sw2.size());
                    ~~~~~~~~~~           ^
cat.cpp:52:41: warning: format '%d' expects argument of type 'int', but argument 3 has type 'std::vector<int>::size_type {aka long unsigned int}' [-Wformat=]
cat.cpp:53:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=0;i<sw1.size();i++) printf("%d %d\n",sw1[i],sw2[i]);
               ~^~~~~~~~~~~
cat.cpp:14:11: warning: unused variable 'br' [-Wunused-variable]
   int c=0,br=0;
           ^~
cat.cpp:11:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&t);
  ~~~~~^~~~~~~~~
cat.cpp:15:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&n);
   ~~~~~^~~~~~~~~
cat.cpp:16:30: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   for(int i=1;i<=n;i++) scanf("%d",&p[i]);
                         ~~~~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...