60分求助!!! 被T了4个点 各位大佬帮忙看一下~

P1309 [NOIP2011 普及组] 瑞士轮

开o2
by longlong2012 @ 2023-08-24 11:32:17


快读,O2优化
by jimmy9 @ 2023-08-24 11:44:32


### 都开了呀~ 怎么还是T了一个点??? ![](https://cdn.luogu.com.cn/upload/image_hosting/yeluz48c.png) ```cpp #include<bits/stdc++.h> using namespace std; const int maxn = 200005; int N, R, Q, a[maxn][4], b[maxn][4]; //a[i][1]记录编号,a[i][2]记录实力值,a[i][3]记录分数 //快读 int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9') f=ch=='-'?-1:1,ch=getchar(); while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^48),ch=getchar(); return x*f; } //快输 void print(int x){ char P[105];int w=0; if(x<0) putchar('-'),x=-x; while(x) P[++w]=x%10+'0',x/=10; for(int i=w; i>=1; i--) putchar(P[i]); } void merge(int p, int q, int r) { //p开始位置,q中间位置,r结束位置,二路归并 int i, x, y; x = p; y = q + 1; i = p; while (x <= q && y <= r) { if (a[x][3] > a[y][3]) { b[i][1] = a[x][1]; b[i][2] = a[x][2]; b[i][3] = a[x][3]; x++; i++; } else if (a[x][3] == a[y][3]) { if (a[x][1] < a[y][1]) { b[i][1] = a[x][1]; b[i][2] = a[x][2]; b[i][3] = a[x][3]; x++; i++; } else { b[i][1] = a[y][1]; b[i][2] = a[y][2]; b[i][3] = a[y][3]; y++; i++; } } else { b[i][1] = a[y][1]; b[i][2] = a[y][2]; b[i][3] = a[y][3]; y++; i++; } } while (x <= q) { b[i][1] = a[x][1]; b[i][2] = a[x][2]; b[i][3] = a[x][3]; i++; x++; } while (y <= r) { b[i][1] = a[y][1]; b[i][2] = a[y][2]; b[i][3] = a[y][3]; i++; y++; } for (int k = p; k <= r; k++) { a[k][1] = b[k][1]; a[k][2] = b[k][2]; a[k][3] = b[k][3]; } } void merge_sort(int l, int r) { if (l == r) return; int mid = (l + r) / 2; merge_sort(l, mid); merge_sort(mid + 1, r); merge(l, mid, r); } int main() { N = read(), R = read(), Q = read(); for (int i = 1; i <= 2 * N; i++) { //输入编号和初始分数 a[i][1] = i; a[i][3] = read(); } for (int i = 1; i <= 2 * N; i++) { //输入实力值 a[i][2] = read(); } while (R) { memset(b, 0, sizeof(b)); merge_sort(1, 2 * N); // printf("第%d轮比赛前\n",R); // for(int i=1;i<=2*N;i++) cout<<i<<" 编号:"<<a[i][1]<<" 得分:"<<a[i][3]<<endl; for (int i = 1; i <= 2 * N - 1; i += 2) { if (a[i][2] > a[i + 1][2]) a[i][3]++; else a[i + 1][3]++; } R--; } memset(b, 0, sizeof(b)); merge_sort(1, 2 * N); print(a[Q][1]); return 0; } ```
by shengmin @ 2023-08-24 12:22:11


|