【题目来源】
http://codevs.cn/problem/1132/
[SAMPLE INPUT]
2 4 2
7 6 6 7
10 5 20 15
[SAMPLE OUTPUT]
1
#include<cstdio>
#include<algorithm>
using namespace std;
int n,r,q;
struct node{int no,f,p; }a[200010],w[100010],l[100010];
bool cmp(node a,node b){return a.f==b.f?a.no<b.no:a.f>b.f;}
int main(){
scanf("%d%d%d",&n,&r,&q); n*=2;
for(int i=1;i<=n;++i) scanf("%d",&a[i].f),a[i].no=i;
for(int i=1;i<=n;++i) scanf("%d",&a[i].p);
sort(a+1,a+1+n,cmp);
while(r--){
int wi=0,li=0;
for(int i=1;i<=n;i+=2)
if(a[i].p<a[i+1].p) w[++wi]=a[i+1],l[++li]=a[i];
else l[++li]=a[i+1],w[++wi]=a[i];
for(int i=1;i<=n/2;i++)w[i].f++;
wi=li=1; int ai=0;
while(wi<=n/2 && li<=n/2) a[++ai]=cmp(w[wi],l[li])?w[wi++]:l[li++];
if(wi>n/2) while (li<=n/2) a[++ai]=l[li++];
else while(wi<=n/2) a[++ai]=w[wi++];
}
printf("%d\n",a[q].no);
return 0;
}
#include<cstdio>
#include<algorithm>
using namespace std;
int n,r,q;
struct node{ int s,p,ii; }a[200010],w[100010],l[100010];
bool cmp(node a,node b){
if (a.s==b.s) return a.ii<b.ii;
return a.s>b.s;
}
int main(){
scanf("%d%d%d",&n,&r,&q); n*=2;
for(int i=1;i<=n;++i) scanf("%d",&a[i].s),a[i].ii=i;
for(int i=1;i<=n;++i) scanf("%d",&a[i].p);
sort(a+1,a+1+n,cmp);
while(r--){
int wi=0,li=0;
for(int i=1;i<=n;i+=2)
if(a[i].p<a[i+1].p) w[++wi]=a[i+1],l[++li]=a[i];
else l[++li]=a[i+1],w[++wi]=a[i];
for(int i=1;i<=n/2;i++)w[i].s++;
wi=li=1; int ai=0;
while(wi<=n/2 && li<=n/2) a[++ai]=cmp(w[wi],l[li])?w[wi++]:l[li++];
if(wi>n/2) while (li<=n/2) a[++ai]=l[li++];
else while(wi<=n/2) a[++ai]=w[wi++];
}
printf("%d\n",a[q].ii);
return 0;
}
//100分代码
#include<cstdio>
#include<algorithm>
using namespace std;
int n,r,q,i,j,ji;
struct node{ int s,p,ii; }a[200010],w[100010],l[100010];
bool cmp(node a,node b){
if (a.s==b.s) return a.ii<b.ii;
return a.s>b.s;
}
int main(){
freopen("swiss.in","r",stdin);
freopen("swiss.out","w",stdout);
scanf("%d%d%d",&n,&r,&q); n*=2;
for(i=1;i<=n;++i) scanf("%d",&a[i].s),a[i].ii=i;
for(j=1;j<=n;++j) scanf("%d",&a[j].p);
sort(a+1,a+1+n,cmp);
for(ji=1;ji<=r;ji++){
int wi=1,lo=1;
for(i=1;i<=n;i+=2)
if(a[i].p<a[i+1].p) w[wi++]=a[i+1],l[lo++]=a[i];
else if (a[i].p>a[i+1].p)l[lo++]=a[i+1],w[wi++]=a[i];
wi--;lo--;
for(i=1;i<=n/2;i++)w[i].s++;
int x=1,y=1;
i=0;
while(x<=n/2 && y<=n/2){
if(w[x].s>l[y].s) a[++i]=w[x++];
if(w[x].s<l[y].s) a[++i]=l[y++];
if(w[x].s==l[y].s&&w[x].ii>l[y].ii) a[++i]=l[y++];
if(w[x].s==l[y].s&&w[x].ii<l[y].ii) a[++i]=w[x++];
}
if(x>n/2) while (y<=n/2) a[++i]=l[y++];
else while(x<=n/2) a[++i]=w[x++];
}
printf("%d\n",a[q].ii);
fclose(stdin); fclose(stdout);
return 0;
}
//90分代码,一组数据超时
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=200000+10;
int n,q,r,w[N];
struct D{
int s,num;
bool operator < (D x) const {return x.s==s?x.num>num:x.s<s;};
}data[N];
int main(){
scanf("%d%d%d",&n,&r,&q);
n*=2;
for(int i=0;i<n;i++){scanf("%d",&data[i].s); data[i].num=i;}
for(int i=0;i<n;i++)scanf("%d",&w[i]);
for(int i=0;i<r;i++){
sort(data,data+n);
for(int j=0;j<n;j+=2){
if(w[data[j].num]>w[data[j+1].num])data[j].s+=1;
else data[j+1].s+=1;
}
}sort(data,data+n);
printf("%d\n",data[q-1].num+1);
return 0;
}
const MAX=100050; type NODE=record no,sl,fs:longint; end; var a:array[0..2*MAX] of NODE; b,c:array[0..MAX] of NODE; i,j,N,N2,R,Q:longint; procedure Qsort(l,r:longint); var i,j,k1,k2:longint; begin i:=l; j:=r; k1:=a[(i+j) shr 1].fs; k2:=a[(i+j) shr 1].no; repeat while (a[i].fs>k1) or (a[i].fs=k1) and (a[i].no<k2) do inc(i); while (a[j].fs<k1) or (a[j].fs=k1) and (a[j].no>k2) do dec(j); if i<=j then begin a[MAX]:=a[i]; a[i]:=a[j]; a[j]:=a[MAX]; inc(i); dec(j); end; until i>j; if i<r then Qsort(i,r); if l<j then Qsort(l,j); end; procedure Fight; var i,j,k:longint; begin for i:=0 to N-1 do begin if(a[2*i].sl>a[2*i+1].sl) then begin inc(a[2*i].fs); b[i]:=a[2*i]; c[i]:=a[2*i+1]; end else begin inc(a[2*i+1].fs); b[i]:=a[2*i+1]; c[i]:=a[2*i]; end; end; i:=0;j:=0;k:=0; while(j<N)and(k<N) do if((b[j].fs>c[k].fs)or(b[j].fs=c[k].fs)and(b[j].no<c[k].no)) then begin a[i]:=b[j]; inc(j); inc(i); end else begin a[i]:=c[k]; inc(k); inc(i); end; while(j<N) do begin a[i]:=b[j]; inc(j); inc(i); end; while(k<N) do begin a[i]:=c[k]; inc(k); inc(i); end; end; begin readln(N,R,Q); N2:=N*2; for i:=0 to N2-1 do begin a[i].no:=i+1; read(a[i].fs); end; for i:=0 to N2-1 do read(a[i].sl); Qsort(0,N2-1); for i:=1 to R do Fight; writeln(a[Q-1].no); end.