• Source
    1. const N:array[0..19] of longint = (10,20,50,100,200,400,700 ,800 ,900 ,2000,15000,20000,40000,50000,60000,70000 ,80000 ,90000 ,95000 ,100000);
    2. M:array[0..19] of longint = (20,30,90,300,400,700,1999,2999,3999,7130,50000,60000,70000,90000,80000,150000,400000,350000,800000,1000000);
    3. var i,j,t,x,y,tg:longint;
    4. s:string;
    5. ch:char;
    6. f:text;
    7. lx,ly:array[1..1000001] of longint;
    8. sl:longint;
    9. procedure qsort(l,r:longint);
    10. var i,j,tg,midx,midy:longint;
    11. begin
    12. i:=l;
    13. j:=r;
    14. midx:=lx[(i+j)div 2];
    15. midy:=ly[(i+j)div 2];
    16. while i<=j do
    17. begin
    18. while (lx[i]<midx)or((lx[i]=midx)and(ly[i]<midy)) do i:=i+1;
    19. while (lx[j]>midx)or((lx[j]=midx)And(ly[j]>midy)) do j:=j-1;
    20. if i<=j then
    21. begin
    22. tg:=lx[i];lx[i]:=lx[j];lx[j]:=tg;
    23. tg:=ly[i];ly[i]:=ly[j];ly[j]:=tg;
    24. i:=i+1;
    25. j:=j-1;
    26. end;
    27. end;
    28. if i<r then qsort(i,r);
    29. if j>l then qsort(l,j);
    30. end;
    31. //==========
    32. procedure xl;
    33. var i,j:longint;
    34. begin
    35. i:=1;
    36. for j:=2 to sl do
    37. if not ((lx[i]=lx[j]) and (ly[i]=ly[j])) then
    38. begin
    39. i:=i+1;
    40. lx[i]:=lx[j];
    41. ly[i]:=ly[j];
    42. end;
    43. sl:=i;
    44. end;
    45. //==========
    46. begin
    47. randomize;
    48. for t:=0 to 19 do
    49. begin
    50. writeln('====Test',t,'====');
    51. str(t,s);
    52. if length(s)=1 then s:='0'+s;
    53. s:='test'+s;
    54. mkdir(s);
    55. s:=s+'/cycle.inp';
    56. assign(f,s);
    57. rewrite(f);
    58. x:=1;
    59. sl:=0;
    60. for i:=1 to m[t] do
    61. begin
    62. while true do
    63. begin
    64. x:=random(n[t])+1;
    65. y:=random(n[t])+1;
    66. if (x<>y) then break;
    67. end;
    68. if x>y then begin tg:=x;x:=y;y:=tg; end;
    69. sl:=sl+1;
    70. lx[sl]:=x;
    71. ly[sl]:=y;
    72. end;
    73. qsort(1,sl);
    74. xl;
    75. writeln(f,n[t],' ',sl);
    76. for i:=1 to sl do writeln(f,lx[i],' ',ly[i]);
    77. close(f);
    78. end;
    79. end.
    80.