Submission #1030437

#TimeUsernameProblemLanguageResultExecution timeMemory
1030437pccSorting (IOI15_sorting)C++17
0 / 100
1054 ms2840 KiB
#include "sorting.h" #include <bits/stdc++.h> using namespace std; #define pii pair<int,int> #define fs first #define sc second const int mxn = 6010; pii arr[mxn]; int N,M; int done = 0; bitset<mxn> vis; vector<pii> ans; void act(vector<int> &perm,vector<int> &pos,int a,int b){ cerr<<"ACT "<<a<<','<<b<<endl; cerr<<"PERM: ";for(auto &i:perm)cerr<<i<<' ';cerr<<endl; cerr<<"POS: ";for(auto &i:pos)cerr<<i<<' ';cerr<<endl; swap(perm[a],perm[b]); swap(pos[perm[a]],pos[perm[b]]); cerr<<"ACTED"<<a<<','<<b<<endl; cerr<<"PERM: ";for(auto &i:perm)cerr<<i<<' ';cerr<<endl; cerr<<"POS: ";for(auto &i:pos)cerr<<i<<' ';cerr<<endl; return; } bool f(int len,vector<int> perm){ cerr<<"----------------------------------------"<<endl; cerr<<"F "<<len<<" start!"<<endl; vis.reset(); ans.clear(); vector<int> pos(N); for(int i = 0;i<N;i++)pos[perm[i]] = i; auto v = perm; for(int i = 0;i<len;i++){ auto [a,b] = arr[i]; swap(v[a],v[b]); } vector<pii> need; for(int i = 0;i<N;i++){ int now = i; vis[now] = true; int head = now; now = v[now]; while(!vis[now]){ vis[now] = true; need.push_back(pii(head,now)); now = v[now]; } } for(auto &i:v)cerr<<i<<' ';cerr<<endl; if(need.size()>len)return false; while(need.size()<len)need.push_back(pii(0,0)); cerr<<"NEED: "<<endl;for(auto &i:need)cerr<<i.fs<<' '<<i.sc<<endl;cerr<<endl; for(int i = 0;i<len;i++){ auto [a,b] = arr[i]; act(perm,pos,a,b); auto [c,d] = need[i]; ans.push_back(pii(pos[c],pos[d])); act(perm,pos,pos[c],pos[d]); } for(int i = 0;i<N;i++)assert(perm[i] == i); cerr<<"----------------------------------------"<<endl; return true; } void construct(int P[],int Q[],int len){ if(ans.size() != len)exit(0); assert(ans.size() == len); for(int i = 0;i<len;i++){ P[i] = ans[i].fs,Q[i] = ans[i].sc; } return; } int findSwapPairs(int NN, int S[], int MM, int X[], int Y[], int P[], int Q[]) { N = NN;M = MM; for(int i = 0;i<M;i++)P[i] = Q[i] = 0; vector<int> v(N); for(int i = 0;i<N;i++){ v[i] = S[i]; } for(int i = 0;i<M;i++)arr[i] = pii(X[i],Y[i]); cerr<<"INIT!"<<endl; for(int i = 0;i<M;i++){ if(f(i,v)){ construct(P,Q,i); return i; } } return -1; assert(false); }

Compilation message (stderr)

sorting.cpp: In function 'bool f(int, std::vector<int>)':
sorting.cpp:53:2: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
   53 |  for(auto &i:v)cerr<<i<<' ';cerr<<endl;
      |  ^~~
sorting.cpp:53:29: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
   53 |  for(auto &i:v)cerr<<i<<' ';cerr<<endl;
      |                             ^~~~
sorting.cpp:54:16: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   54 |  if(need.size()>len)return false;
      |     ~~~~~~~~~~~^~~~
sorting.cpp:55:19: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   55 |  while(need.size()<len)need.push_back(pii(0,0));
      |        ~~~~~~~~~~~^~~~
sorting.cpp: In function 'void construct(int*, int*, int)':
sorting.cpp:70:16: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   70 |  if(ans.size() != len)exit(0);
      |     ~~~~~~~~~~~^~~~~~
In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from sorting.cpp:2:
sorting.cpp:71:20: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   71 |  assert(ans.size() == len);
      |         ~~~~~~~~~~~^~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...