记录编号 |
34982 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[HNOI 2004] 宠物收养所 |
最终得分 |
100 |
用户昵称 |
Makazeu |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.287 s |
提交时间 |
2012-02-13 19:31:30 |
内存使用 |
0.26 MiB |
显示代码纯文本
- #include <cstdio>
- #include <cstdlib>
- #include <set>
- using namespace std;
- typedef set<int> Set;
-
- const int MOD=1000000;
- int N;
- Set Pet,Owner;
-
- int abs(int x)
- {return x>0?x:-x;}
-
- int Maintenance(Set& A,Set& B,int m)
- {
- int res=0;
- if(A.size()==0)
- {
- B.insert(m);
- return 0;
- }
- Set::iterator iter;
- iter=A.lower_bound(m);
- if(iter==A.end())
- {
- iter--;
- res=abs(*iter-m);
- A.erase(iter);
- return res;
- }
- if(*iter==m)
- {
- A.erase(iter);
- return 0;
- }
- if(iter==A.begin())
- {
- res=abs(*iter-m);
- A.erase(iter);
- return res;
- }
- Set::iterator tmp;
- res=abs(*iter-m);
- tmp=iter;
-
- iter--;
- if(abs(*iter-m)<=res)
- {
- res=abs(*iter-m);
- tmp=iter;
- }
- A.erase(tmp);
- return res;
- }
-
- void init()
- {
- int Ans=0;
- scanf("%d\n",&N);
- int x,m;
- for(int i=1;i<=N;i++)
- {
- scanf("%d %d\n",&x,&m);
- if(!x)
- Ans+=Maintenance(Owner,Pet,m);
- else
- Ans+=Maintenance(Pet,Owner,m);
- Ans%=MOD;
- }
- printf("%d\n",Ans);
- }
-
- int main()
- {
- freopen("pet.in","r",stdin);
- freopen("pet.out","w",stdout);
- init();
- return 0;
- }
-