记录编号 34982 评测结果 AAAAAAAAAA
题目名称 [HNOI 2004] 宠物收养所 最终得分 100
用户昵称 GravatarMakazeu 是否通过 通过
代码语言 C++ 运行时间 0.287 s
提交时间 2012-02-13 19:31:30 内存使用 0.26 MiB
显示代码纯文本
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <set>
  4. using namespace std;
  5. typedef set<int> Set;
  6.  
  7. const int MOD=1000000;
  8. int N;
  9. Set Pet,Owner;
  10.  
  11. int abs(int x)
  12. {return x>0?x:-x;}
  13.  
  14. int Maintenance(Set& A,Set& B,int m)
  15. {
  16. int res=0;
  17. if(A.size()==0)
  18. {
  19. B.insert(m);
  20. return 0;
  21. }
  22. Set::iterator iter;
  23. iter=A.lower_bound(m);
  24. if(iter==A.end())
  25. {
  26. iter--;
  27. res=abs(*iter-m);
  28. A.erase(iter);
  29. return res;
  30. }
  31. if(*iter==m)
  32. {
  33. A.erase(iter);
  34. return 0;
  35. }
  36. if(iter==A.begin())
  37. {
  38. res=abs(*iter-m);
  39. A.erase(iter);
  40. return res;
  41. }
  42. Set::iterator tmp;
  43. res=abs(*iter-m);
  44. tmp=iter;
  45. iter--;
  46. if(abs(*iter-m)<=res)
  47. {
  48. res=abs(*iter-m);
  49. tmp=iter;
  50. }
  51. A.erase(tmp);
  52. return res;
  53. }
  54.  
  55. void init()
  56. {
  57. int Ans=0;
  58. scanf("%d\n",&N);
  59. int x,m;
  60. for(int i=1;i<=N;i++)
  61. {
  62. scanf("%d %d\n",&x,&m);
  63. if(!x)
  64. Ans+=Maintenance(Owner,Pet,m);
  65. else
  66. Ans+=Maintenance(Pet,Owner,m);
  67. Ans%=MOD;
  68. }
  69. printf("%d\n",Ans);
  70. }
  71. int main()
  72. {
  73. freopen("pet.in","r",stdin);
  74. freopen("pet.out","w",stdout);
  75. init();
  76. return 0;
  77. }
  78.