去年普及组的第3题瑞士轮
有点乱,不用全看.
输出一直是0是为什么?
type node=record
s:longint;
w:longint;
num:longint;
end;
var n,r,q,i,j:longint;
a,b,c:array[1..200000]of node;
function da(u,v:node):boolean;
begin
da:=false;
if u.s>v.s then da:=true;
if (u.s=v.s)and (u.num<v.num)then da:=true;
end;procedure qsort(var x:array of node;z,y:longint);
var i,j:longint;tmp:node;
begin
i:=z;j:=y;tmp:=x[z];
while i<j do begin
while (da(x[j],tmp)) and (j>i) do dec(j);
if j>i then begin x[i]:=x[j];inc(i);end;
while (not da(x[i],tmp))and(i<j) do inc(i);
if i<j then begin x[j]:=x[i];dec(j);end;
end;
x[i]:=tmp;
if z<i-1 then qsort(x,z,i-1);
if y>i+1 then qsort(x,i+1,y);
end;procedure mergesort;
var i,j,k:longint;
begin
i:=1;j:=1;k:=0;
while (i<=n)and(j<=n)do begin
if da(b[i],c[j])then begin inc(k);a[k]:=c[j];inc(j);end
else begin inc(k);a[k]:=b[i];inc(i);end;end;
while i<=n do begin inc(k);a[k]:=b[i];inc(i);end;
while j<=n do begin inc(k);a[k]:=c[j];inc(j);end;
end;begin
readln(n,r,q);fillchar(a,sizeof(a),0);fillchar(b,sizeof(b),0);fillchar(c,sizeof(c),0);
for i:=1 to 2*n do read(a[i].s);
for i:=1 to 2*n do read(a[i].w);
for i:=1 to 2*n do a[i].num:=i;
qsort(a,1,2*n);
for i:=1 to r do begin
for j:=1 to n do begin
if a[2*j-1].w<a[2*j].w then begin inc(a[2*j].s);b[j]:=a[2*j];c[j]:=a[2*j-1];end
else begin inc(a[2*j-1].s);b[j]:=a[2*j-1];c[j]:=a[2*j];end;
mergesort;
end;
end;
writeln(a[2*n-q+1].num);
end.
有点乱,不用全看.
输出一直是0是为什么?
type node=record
s:longint;
w:longint;
num:longint;
end;
var n,r,q,i,j:longint;
a,b,c:array[1..200000]of node;
function da(u,v:node):boolean;
begin
da:=false;
if u.s>v.s then da:=true;
if (u.s=v.s)and (u.num<v.num)then da:=true;
end;procedure qsort(var x:array of node;z,y:longint);
var i,j:longint;tmp:node;
begin
i:=z;j:=y;tmp:=x[z];
while i<j do begin
while (da(x[j],tmp)) and (j>i) do dec(j);
if j>i then begin x[i]:=x[j];inc(i);end;
while (not da(x[i],tmp))and(i<j) do inc(i);
if i<j then begin x[j]:=x[i];dec(j);end;
end;
x[i]:=tmp;
if z<i-1 then qsort(x,z,i-1);
if y>i+1 then qsort(x,i+1,y);
end;procedure mergesort;
var i,j,k:longint;
begin
i:=1;j:=1;k:=0;
while (i<=n)and(j<=n)do begin
if da(b[i],c[j])then begin inc(k);a[k]:=c[j];inc(j);end
else begin inc(k);a[k]:=b[i];inc(i);end;end;
while i<=n do begin inc(k);a[k]:=b[i];inc(i);end;
while j<=n do begin inc(k);a[k]:=c[j];inc(j);end;
end;begin
readln(n,r,q);fillchar(a,sizeof(a),0);fillchar(b,sizeof(b),0);fillchar(c,sizeof(c),0);
for i:=1 to 2*n do read(a[i].s);
for i:=1 to 2*n do read(a[i].w);
for i:=1 to 2*n do a[i].num:=i;
qsort(a,1,2*n);
for i:=1 to r do begin
for j:=1 to n do begin
if a[2*j-1].w<a[2*j].w then begin inc(a[2*j].s);b[j]:=a[2*j];c[j]:=a[2*j-1];end
else begin inc(a[2*j-1].s);b[j]:=a[2*j-1];c[j]:=a[2*j];end;
mergesort;
end;
end;
writeln(a[2*n-q+1].num);
end.

