记录编号 33389 评测结果 AAAAAAAAAA
题目名称 韩国明星 最终得分 100
用户昵称 Gravatarlizhe 是否通过 通过
代码语言 Pascal 运行时间 1.053 s
提交时间 2011-11-10 15:11:03 内存使用 24.91 MiB
显示代码纯文本
  1. program star;
  2. var
  3. i,j,n,k,l,r,mid,x:longint;
  4. p:string;
  5. s:array[1..100000]of string;
  6. w:array[1..100000]of longint;
  7. procedure swap(var a,b:string);
  8. var
  9. c:string;
  10. begin
  11. c:=a;
  12. a:=b;
  13. b:=c
  14. end;
  15.  
  16. procedure swap2(var a,b:longint);
  17. var
  18. c:longint;
  19. begin
  20. c:=a;
  21. a:=b;
  22. b:=c
  23. end;
  24.  
  25. procedure sort(l,r:longint);
  26. var
  27. i,j:longint;
  28. x:string;
  29. begin
  30. i:=l;
  31. j:=r;
  32. x:=s[(l+r) div 2];
  33. repeat
  34. while s[i]<x do inc(i);
  35. while x<s[j] do dec(j);
  36. if i<=j then
  37. begin
  38. swap(s[i],s[j]);
  39. inc(i);
  40. dec(j);
  41. end;
  42. until i>j;
  43. if l<j then sort(l,j);
  44. if i<r then sort(i,r);
  45. end;
  46.  
  47. procedure sort2(l,r:longint);
  48. var
  49. i,j,x:longint;
  50. begin
  51. i:=l;
  52. j:=r;
  53. x:=w[(l+r) div 2];
  54. repeat
  55. while w[i]>x do inc(i);
  56. while x>w[j] do dec(j);
  57. if i<=j then
  58. begin
  59. swap2(w[i],w[j]);
  60. swap(s[i],s[j]);
  61. inc(i);
  62. dec(j);
  63. end;
  64. until i>j;
  65. if l<j then sort2(l,j);
  66. if i<r then sort2(i,r);
  67. end;
  68.  
  69. procedure erfen;
  70. begin
  71. l:=1; r:=n;
  72. while l<r do
  73. begin
  74. mid:=(l+r) shr 1;
  75. if s[mid]>=p then r:=mid
  76. else l:=mid+1
  77. end;
  78. w[l]:=w[l]+x
  79. end;
  80.  
  81. begin
  82. assign(input,'star.in');
  83. reset(input);
  84. assign(output,'star.out');
  85. rewrite(output);
  86. readln(n);
  87. for i:=1 to n do
  88. readln(s[i]);
  89. sort(1,n);
  90. readln(k);
  91. for i:=1 to k do
  92. begin
  93. readln(p);
  94. readln(x);
  95. erfen
  96. end;
  97. sort2(1,n);
  98. i:=1; j:=1;
  99. while j<=n do
  100. begin
  101. if w[i]=w[j] then
  102. begin
  103. if j=n then
  104. sort(i,j);
  105. inc(j)
  106. end
  107. else
  108. begin
  109. if i<>j-1 then
  110. sort(i,j-1);
  111. i:=j
  112. end
  113. end;
  114. for i:=1 to n do
  115. begin
  116. writeln(s[i]);
  117. writeln(w[i])
  118. end;
  119. close(input);
  120. close(output)
  121. end.
  122.