C++演算法題——洛谷P1309瑞士輪(BUG 待更)
阿新 • • 發佈:2018-12-20
問題:時間複雜度過高。 解決方案:設定A、B兩個陣列分別儲存贏與輸的兩組,組內順序不變,最後用merge合併。 待改,待更,歡迎交流。
#include #include using namespace std; int main(){
int N,R,Q; int numQ,keyQ; int size = 0; cin >> N >> R >> Q; keyQ = Q; int* s = new int[2*N]; for(int i = 0; i < 2*N; i ++){ cin >> s[i]; } int* w = new int[2*N]; for(int i = 0; i < 2*N; i ++){ cin >> w[i]; } for(int i = 0; i < R; i ++){ for(int j = 0; j < N; j+=2){ if(w[j] > w[j + 1]) s[j] += 1; else s[j+1] += 1; } numQ = s[keyQ-1];
// cout <<"keyQ1 "<< keyQ<<endl; for(int t = keyQ -1; t >= 0; t–){ if(numQ == s[t]) { size ++; // cout <<“test”<<endl; // cout << size<<endl; // cout << "keyQ2 "<<keyQ<<endl; } else break; } sort(s,s+2N); for(int k = 0; k < 2
}