1208: [HNOI2004]宠物收养所

Time Limit: 10 Sec Memory Limit: 162 MB Submit: 12030 Solved: 4916

Description

最近,阿Q开了一间宠物收养所。收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物。每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领养的宠物的特点值a(a是一个正整数,a<2^31),而他也给每个处在收养所的宠物一个特点值。这样他就能够很方便的处理整个领养宠物的过程了,宠物收养所总是会有两种情况发生:被遗弃的宠物过多或者是想要收养宠物的人太多,而宠物太少。 1. 被遗弃的宠物过多时,假若到来一个领养者,这个领养者希望领养的宠物的特点值为a,那么它将会领养一只目前未被领养的宠物中特点值最接近a的一只宠物。(任何两只宠物的特点值都不可能是相同的,任何两个领养者的希望领养宠物的特点值也不可能是一样的)如果有两只满足要求的宠物,即存在两只宠物他们的特点值分别为a-b和a+b,那么领养者将会领养特点值为a-b的那只宠物。 2. 收养宠物的人过多,假若到来一只被收养的宠物,那么哪个领养者能够领养它呢?能够领养它的领养者,是那个希望被领养宠物的特点值最接近该宠物特点值的领养者,如果该宠物的特点值为a,存在两个领养者他们希望领养宠物的特点值分别为a-b和a+b,那么特点值为a-b的那个领养者将成功领养该宠物。 一个领养者领养了一个特点值为a的宠物,而它本身希望领养的宠物的特点值为b,那么这个领养者的不满意程度为abs(a-b)。【任务描述】你得到了一年当中,领养者和被收养宠物到来收养所的情况,希望你计算所有收养了宠物的领养者的不满意程度的总和。这一年初始时,收养所里面既没有宠物,也没有领养者。

Input

第一行为一个正整数n,n<=80000,表示一年当中来到收养所的宠物和领养者的总数。接下来的n行,按到来时间的先后顺序描述了一年当中来到收养所的宠物和领养者的情况。每行有两个正整数a, b,其中a=0表示宠物,a=1表示领养者,b表示宠物的特点值或是领养者希望领养宠物的特点值。(同一时间呆在收养所中的,要么全是宠物,要么全是领养者,这些宠物和领养者的个数不会超过10000个)

Output

仅有一个正整数,表示一年当中所有收养了宠物的领养者的不满意程度的总和mod 1000000以后的结果。

Sample Input

5 0 2 0 4 1 3 1 2 1 5

Sample Output

3 (abs(3-2) + abs(2-4)=3,最后一个领养者没有宠物可以领养)

HINT

Source

题目大意:中文题面应该都能看懂吧//小声bb

解题思路:有一种解法是用Splay树等高级数据结构来写。但是我 jio 得直接用set+模拟就可以,试了试还真A了。

AC代码:

set+模拟:

  1. #include <iostream>
  2. #include<cstdio>
  3. #include<set>
  4. #include<queue>
  5. #include<vector>
  6. #include<map>
  7. #include<cmath>
  8. #include<cstdlib>
  9. #include<algorithm>
  10. #include<string>
  11. #include<cstring>
  12. #include<stack>
  13.  
  14. using namespace std;
  15.  
  16. const int mod=1e6;
  17. int n;
  18. long long ans;
  19. set<int>s,s1;
  20. set<int>::iterator pre,nxt;
  21.  
  22. int main()
  23. {
  24. int u,v;
  25. while(~scanf("%d",&n)){
  26. s.clear();s1.clear();
  27. ans=;
  28. for(int i=;i<n;i++){
  29. scanf("%d %d",&u,&v);
  30. if(u==){
  31. if(s1.empty()){
  32. s.insert(v);
  33. continue;
  34. }
  35. nxt=s1.lower_bound(v);
  36. pre=nxt;
  37. if(nxt!=s1.begin()) pre--;
  38. if(nxt==s1.begin()){
  39. ans+=abs(v-(*nxt));
  40. s1.erase(nxt);
  41. }
  42. else if(nxt==s1.end()){
  43. ans+=abs(v-(*pre));
  44. s1.erase(pre);
  45. }
  46. else{
  47. if(abs(v-(*pre))>abs(v-(*nxt))){
  48. ans+=abs(v-(*nxt));
  49. s1.erase(nxt);
  50. }
  51. else if(abs(v-(*pre))==abs(v-(*nxt))){
  52. if((*pre)>(*nxt)){
  53. ans+=abs(v-(*nxt));
  54. s1.erase(nxt);
  55. }
  56. else{
  57. ans+=abs(v-(*pre));
  58. s1.erase(pre);
  59. }
  60. }
  61. else{
  62. ans+=abs(v-(*pre));
  63. s1.erase(pre);
  64. }
  65. }
  66. }
  67. else if(u==){
  68. if(s.empty()){
  69. s1.insert(v);
  70. continue;
  71. }
  72. nxt=s.lower_bound(v);
  73. pre=nxt;
  74. if(nxt!=s.begin()) pre--;
  75. if(nxt==s.begin()){
  76. ans+=abs(v-(*nxt));
  77. s.erase(nxt);
  78. }
  79. else if(nxt==s.end()){
  80. ans+=abs(v-(*pre));
  81. s.erase(pre);
  82. }
  83. else{
  84. if(abs(v-(*pre))>abs(v-(*nxt))){
  85. ans+=abs(v-(*nxt));
  86. s.erase(nxt);
  87. }
  88. else if(abs(v-(*pre))==abs(v-(*nxt))){
  89. if((*pre)>(*nxt)){
  90. ans+=abs(v-(*nxt));
  91. s.erase(nxt);
  92. }
  93. else{
  94. ans+=abs(v-(*pre));
  95. s.erase(pre);
  96. }
  97. }
  98. else{
  99. ans+=abs(v-(*pre));
  100. s.erase(pre);
  101. }
  102. }
  103. }
  104. ans%=mod;
  105. }
  106. printf("%lld\n",ans);
  107. }
  108. return ;
  109. }

1208: [HNOI2004]宠物收养所的更多相关文章

  1. BZOJ 1208: [HNOI2004]宠物收养所

    1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 7514  Solved: 2982[Submit][Sta ...

  2. bzoj 1208: [HNOI2004]宠物收养所 set

    1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 7328  Solved: 2892[Submit][Sta ...

  3. BZOJ 1208: [HNOI2004]宠物收养所(BST)

    本来想先用set写一遍,再自己写个splay或treap,不过用set过了之后就懒得去写了....以后有空再来写吧..(不会有空的吧= = ------------------------------ ...

  4. bzoj 1208: [HNOI2004]宠物收养所 (Treap)

    链接:  https://www.lydsy.com/JudgeOnline/problem.php?id=1208 题面: 1208: [HNOI2004]宠物收养所 Time Limit: 10 ...

  5. BZOJ 1208: [HNOI2004]宠物收养所 SET的妙用

    1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4902  Solved: 1879 题目连接 http:/ ...

  6. Bzoj 1208: [HNOI2004]宠物收养所(splay)

    1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MB Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收 ...

  7. BZOJ 1208 [HNOI2004]宠物收养所:Splay(伸展树)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1208 题意: 有一个宠物收养所,在接下来一段时间内会陆续有一些宠物进到店里,或是一些人来领 ...

  8. 1208. [HNOI2004]宠物收养场【平衡树-splay】

    Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特 ...

  9. BZOJ 1208 [HNOI2004]宠物收养所 | SPlay模板题

    题目: 洛谷也能评 题解: 记录一下当前树维护是宠物还是人,用Splay维护插入和删除. 对于任何一次询问操作都求一下value的前驱和后继(这里前驱和后继是可以和value相等的),比较哪个差值绝对 ...

随机推荐

  1. synchronized 控制并发(活动秒杀)

    1.首先我们新建一个Controller用于秒杀: package com.imooc.Controller; import com.imooc.service.impl.SeckillService ...

  2. sqlplus常用的几种登录方式

    1. sqlplus / as sysdba 操作系统认证,sys管理员登录,/后面要有空格. 2. sqlplus "/ as sysdba" 操作系统认证,sys管理员登录,/ ...

  3. iOS之利用runtime,避免可变数组和可变字典为nil或者数组越界导致的崩溃

    NSArray.NSMutableArray.NSDictionary.NSMutableDictionary.是我们的在iOS开发中非常常用的类.当然,在享受这些类的便利的同时,它们也给我们带来一些 ...

  4. 微信小程序之数据传递

    本文主要介绍,页面跳转间的数据传递.传递的数据类型主要有1,基本数据类型:2,对象:3,数组集合: 先告诉你,本质上都是string类型传递.但是对于对象和数组集合的传递需要小小的处理一下传递时的数据 ...

  5. linux配置mysq与navicat关联

    第一步:在linux中安装mysql(执行如下语句) 安装 mysql: yum install mysql yum install mysql-server yum install mysql-de ...

  6. vue-router笔记

    1.vue-router 安装 在安装webpack模块时就安装了 eg: vue  init  webpack  demo    (安装webpack模块并取名为demo) 在安装模块时没有安装的话 ...

  7. vue2.0 接收url参数

    1) 路由配置传参方式在配置路由时 例如 "/firewall/authorize/:uid/:uname/:token"页面url为 http://XXX.com/firewal ...

  8. 帝国CMS如何禁止内容关键字替换ALT和title中的关键词为链接

    很多帝国cms用户喜欢使用关键字替换来实现文章自动内链的方法. 为什么要用关键词替换功能呢?这关系到站内优化,下面直接进入正题. 解决办法:打开e/class/functions.php 查找 '/' ...

  9. 树莓派驱动DHT22

    树莓派-DHT22测量湿度 一般的温湿度传感器有dht11和dht22,dht11比较便宜,dht22比dht11贵好几倍,自然测量的准确度肯定是dht22高一些.追求更高精准度的可以使用SHT1x. ...

  10. Docker开篇之基础概念篇

    What--什么是容器? 容器技术,是一种操作系统层的虚拟化(Operating system-level virtualization),它将应用软件系统打包成一个软件容器(Container),内 ...