HU-896 Stors

10803 ワード

http://acm.hdu.edu.cn/showproblem.php?pid=1896
一人で0から歩き始めて、偶数の石に出会ったら蹴ります.同じ位置に複数の石があるなら、一番重い石(つまり一番近い石を投げる)を先に投げて、投げる石を初期位置からの最大距離を求めます.
 Stors
Time Limit:5000/3000 MS(Java/Others)    メモリLimit:65535/32768 K(Java/Others)Total Submission(s):1231    Acceepted Submission(s):759
Problem Description
Because of the wrong status of the bicycle、Sempr begin to walk eat to west everry moning and walk back evereverening.Walking may cause a little tired、so Sempr alys Play some games this time.
The e e e are many stones on the road,when he meet a stone,he will throw it ah ead as far as possible if it is the odd stone he meet,or leave it where it wars it is the even stone.Now You.You are to tell me the distance from the start point to the farthest st one after Sempr walk by.Please party atent that if t to to to to to to to to the stayt the same position,you will meet the large one
 
 
Input
In the first line,there is an Integer T(1<=T<=10),which means the test cases in the input file.The n followed by T test cases.
For each test case、I will give you an Integer N(0<N(=100,000)in the first line、which means the number of stones the road.Thn followwed byN lins and there there there there the the the the the the the the the the the the the the ininininininininininininininininststststststststststststinininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininn throw it.
 
 
Output
Just output one line for one test case,as described in the Description.
 
 
Sample Input
2
2
1 5
2 4
2
1 5
6.
 
 
 
Sample Output
11
12
 
 
 
Author
Sempr|CrazyBird|hust 07 p 43
 
 
ソurce
HDU 2008-4 Prograamming Conttest
 
 
Recommund
lcy   |   We have carefully selected several simiar probles for you:  
1892 
1899 
1895 
1894 
1897 
 
 
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<queue>
 6 using namespace std;
 7 struct node
 8 {
 9      friend bool operator<(node n1,node n2)
10     {
11        
12           if(n1.p>n2.p)//
13                  return 1;
14            else
15             {
16                 if(n1.p==n2.p&&n1.d>n2.d)
17                 {
18                     return 1;
19                 }
20                 else
21                    return 0;
22             }
23 
24     }
25     int p;
26     int d;
27 };
28 int main()
29 {
30     int t,f;
31     scanf("%d",&t);
32     while(t--)
33     {
34         int n,i;
35        scanf("%d",&n);
36         struct  node a;
37         priority_queue<node>q;
38        for(i=0;i<n;i++)
39          {
40              scanf("%d%d",&a.p,&a.d);
41              q.push(a);
42          }
43          int s=0;
44          int ans=0;
45          while(!q.empty())
46          {
47              s++;
48              a=q.top();
49            //  printf("p1=%d,d1=%d
",a.p,a.d);
50 q.pop(); 51 if(s%2==1) 52 { 53 // printf("p=%d,d=%d
",a.p,a.d);
54 // ans+=a.p+a.d; 55 a.p=a.p+a.d; 56 // f=a.d; 57 q.push(a); 58 } 59 60 } 61 62 printf("%d
",a.p); 63 } 64 return 0; 65 }