1 solutions
-
0
C++ :
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> using namespace std; struct p{ int s; int w; int h; }a[200001],b[200001],c[200001]; int n,r,q; int cmp(const p & a,const p & b) { if(a.s>b.s) return 1; if(a.s<b.s) return 0; if(a.h<b.h) return 1; return 0; } void quick_read(int &num) { char ch; num=0; ch=getchar(); while(ch<'!') ch=getchar(); while(ch>='0'){ num=num*10+ch-48; ch=getchar(); } return; } int main() { int i,j; quick_read(n); quick_read(r); quick_read(q); int z=2*n; for(i=0;i<z;++i) { quick_read(a[i].s); a[i].h=i+1; } for(i=0;i<z;++i) quick_read(a[i].w); sort(a,a+z,cmp); while(r--) { memset(c,-1,sizeof(c)); memset(b,-1,sizeof(b)); int k=0; int l=0; for(i=0;i<n;i++) { if(a[2*i].w>a[2*i+1].w ) { a[2*i].s++; b[k++] = a[2*i]; c[l++] = a[2*i+1]; } else { a[2*i+1].s++; b[k++]=a[2*i+1]; c[l++]=a[2*i]; } } int tk = 0; int tl = 0; for(i=0;i<z;i++) { if(b[tk].s>c[tl].s) a[i]=b[tk++]; else if( b[tk].s<c[tl].s) a[i]=c[tl++]; else if(b[tk].h<c[tl].h ) a[i]=b[tk++] ; else a[i]=c[tl++]; } } cout<< a[q-1].h<<endl; return 0; }Pascal :
program swiss; var n,m,r,q,i:longint; a,b,c:array[0..200000,1..3]of longint; procedure swap(var x,y:longint); var t:longint; begin t:=x; x:=y; y:=t; end; procedure qsort(l,r:longint); var i,j,m1,m2:longint; begin i:=l; j:=r; m1:=a[(i+j) div 2,2]; m2:=a[(i+j) div 2,1]; repeat while (a[i,2]>m1)or(a[i,2]=m1)and(a[i,1]<m2) do inc(i); while (a[j,2]<m1)or(a[j,2]=m1)and(a[j,1]>m2) do dec(j); if i<=j then begin swap(a[i,1],a[j,1]); swap(a[i,2],a[j,2]); swap(a[i,3],a[j,3]); inc(i); dec(j); end; until i>j; if l<j then qsort(l,j); if i<r then qsort(i,r); end; procedure compare; var i:longint; begin for i:=1 to n do if a[i*2-1,3]>a[i*2,3] then begin inc(a[i*2-1,2]); b[i,1]:=a[i*2-1,1]; b[i,2]:=a[i*2-1,2]; b[i,3]:=a[i*2-1,3]; c[i,1]:=a[i*2,1]; c[i,2]:=a[i*2,2]; c[i,3]:=a[i*2,3]; end else begin inc(a[i*2,2]); c[i,1]:=a[i*2-1,1]; c[i,2]:=a[i*2-1,2]; c[i,3]:=a[i*2-1,3]; b[i,1]:=a[i*2,1]; b[i,2]:=a[i*2,2]; b[i,3]:=a[i*2,3]; end; end; procedure hb; var i,j,k,p:longint; begin i:=1; j:=1; k:=1; while (i<=n)and(j<=n) do begin if (b[i,2]>c[j,2])or(b[i,2]=c[j,2])and(b[i,1]<c[j,1]) then begin a[k,1]:=b[i,1]; a[k,2]:=b[i,2]; a[k,3]:=b[i,3]; inc(i); end else begin a[k,1]:=c[j,1]; a[k,2]:=c[j,2]; a[k,3]:=c[j,3]; inc(j); end; inc(k); end; while j<=n do begin a[k,1]:=c[j,1]; a[k,2]:=c[j,2]; a[k,3]:=c[j,3]; inc(j); inc(k); end; while i<=n do begin a[k,1]:=b[i,1]; a[k,2]:=b[i,2]; a[k,3]:=b[i,3]; inc(i); inc(k); end; end; begin readln(n,r,q); m:=n*2; for i:=1 to m do begin a[i,1]:=i; read(a[i,2]); end; for i:=1 to m do read(a[i,3]); qsort(1,m); {for i:=1 to m do begin writeln(a[i,1],' ',a[i,2],' ',a[i,3]); end; } for i:=1 to r do begin compare; hb; end; {for i:=1 to m do writeln(a[i,1],' ',a[i,2],' ',a[i,3])} writeln(a[q,1]); end.
- 1
Information
- ID
- 16871
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By