ジャッジはいまだに問題が残ってる…?
https://community.topcoder.com/stat?c=problem_statement&pm=17777
問題
2つの長さNの整数列A,Bがある。
Aの1要素とBの1要素を選んで入れ替える、ということを最大3N回行い、A,Bともに昇順となるようにせよ。
解法
Aの最小値をBの先頭、Bの最小値をAの先頭に持ってくる、という作業を最大3手で行おう。
こうするとA,Bが1要素ずつ位置が確定するので、3N回で条件を満たすことができる。
なお、この問題はNの上限は1000なので、3N回の処理を行おうとすると6000要素の配列を返さなければならない。
ただ、ジャッジがそのような配列をうまく受け取ってくれない様子。よって以下のコードはNが大きい場合にはシステムテストが通らない。
class SortTwoArrays { public: vector<int> R; vector<int> A,B; void go(int x,int y) { R.push_back(x); R.push_back(y); swap(A[x],B[y]); } vector <int> twoSorts(int N, vector <int> a, vector <int> b) { R.clear(); A=a; B=b; int i,j; FOR(i,N) { vector<pair<int,int>> V; int x=min_element(A.begin()+i,A.begin()+N)-A.begin(); int y=min_element(B.begin()+i,B.begin()+N)-B.begin(); if(x==i&&y==i) { go(i,i); } else if(x>i&&y==i) { go(i,y); go(x,i); } else if(x==i&&y>i) { go(x,i); go(i,y); } else { go(x,i); go(i,y); go(x,y); } } return R; } }
まとめ
ジャッジが直ってレート再計算とか、今からあり得るのかな…。