HDU1050

View Code
 1 /*

 2 贪心 排序

 3 */

 4 #include<stdio.h>

 5 #include<stdlib.h>

 6 #include<string.h>

 7 #include<iostream>

 8 #include<algorithm>

 9 #include<queue>

10 #include<map>

11 #include<math.h>

12 using namespace std;

13 const int maxn = 1505;

14 const int inf = 0x7fffffff;

15 struct node{

16     int x,y;

17     int vis;

18 }a[ maxn ];

19 bool cmp( node a,node b ){

20     if( a.x!=b.x ) return a.x<b.x;

21     else return a.y<b.y;

22 }

23 int main(){

24     int T;

25     scanf("%d",&T);

26     while( T-- ){

27         int n;

28         scanf("%d",&n);

29         int ai,b;

30         for( int i=1;i<=n;i++ ){

31             scanf("%d%d",&ai,&b);

32             

33             if( ai%2==1 ) ai=(ai+1)/2;

34             else ai/=2;

35             if( b%2==1 ) b=(b+1)/2;

36             else b/=2;

37             

38             if( ai>b ) swap( ai,b );

39             //ai=(ai+1)/2,b=(b+1)/2;

40             a[ i ].x=ai;

41             a[ i ].y=b;

42             a[ i ].vis=0;

43         }

44         sort( a+1,a+1+n,cmp );

45         int ans=0;

46         int x,y;

47         bool flag;

48         while( 1 ){

49             flag=false;

50             for( int i=1;i<=n;i++ ){

51                 if( a[ i ].vis == 0 ){

52                     a[ i ].vis=1;

53                     x=a[ i ].x,y=a[ i ].y;

54                     ans+=10;

55                     flag=true;

56                     break;

57                 }

58             }

59             if( flag==false ) break;

60             for( int i=1;i<=n;i++ ){

61                 if( a[ i ].vis==1 ) continue;

62                 if( a[ i ].x>y ){

63                     a[ i ].vis=1;

64                     y=a[ i ].y;

65                 }

66             }

67         }

68         printf("%d\n",ans);

69     }

70     return 0;

71 }

 

你可能感兴趣的:(HDU)