Hdu 1070 Milk

结构体二级排序,注意保质期只有5天就行。

CODE:

结构体二级排序(快速)

#include <stdio.h>
#include <stdlib.h>
#include < string.h>
#include <math.h>
#include <algorithm>
using  namespace std;

const  int SIZE =  101 +  10;

struct node
{
     char str[ 110];
     int p, v;
     double r;
}a[SIZE];

int cmp( const  void *a,  const  void *b)
{   
    node *p1 = (node*)a;
    node *p2 = (node*)b;
     if(p1->r != p2->r)  return p1->r - p2->r >  0 ?  1:- 1;     //注意这里要用p1->r - p2->r > 0 ? 1:-1,因为这是double类型的数据,否则会报错。
     else  return p2->v - p1->v;
}

int main()
{
     int i, j;
     int T;
    scanf( " %d ", &T);
     while(T--)
    {
         int N;
        scanf( " %d ", &N);
        memset(a,  0sizeof(a));
         for(i =  0 ; i < N; i++)
        {
            scanf( " %s%d%d ", a[i].str, &a[i].p, &a[i].v);
        }
         for(i =  0 ; i < N; i++)
        {
             int d = a[i].v/ 200;
             if(d >  5)
            {
                a[i].r =  1.0*a[i].p/ 5;
            }
             else
            {
                a[i].r =  1.0*a[i].p/d;
            }
        }
        qsort(a, N,  sizeof(a[ 0]), cmp);
        printf( " %s\n ", a[ 0].str);
    }
     return  0;

} 

 

CODE:

结构体二级排序(sort)

#include <stdio.h>
#include <stdlib.h>
#include < string.h>
#include <math.h>
#include <algorithm>
using  namespace std;

const  int SIZE =  101 +  10;

struct node
{
     char str[ 110];
     int p, v;
     double r;
}a[SIZE];

int cmp( const node &a,  const node &b)
{   
     return  (a.r < b.r || (a.r == b.r && a.v > b.v));     //qsort用‘-’,而sort用‘>’。
}

int main()
{
     int i, j;
     int T;
    scanf( " %d ", &T);
     while(T--)
    {
         int N;
        scanf( " %d ", &N);
        memset(a,  0sizeof(a));
         for(i =  0 ; i < N; i++)
        {
            scanf( " %s%d%d ", a[i].str, &a[i].p, &a[i].v);
        }
         for(i =  0 ; i < N; i++)
        {
             int d = a[i].v/ 200;
             if(d >  5)
            {
                a[i].r =  1.0*a[i].p/ 5;
            }
             else
            {
                a[i].r =  1.0*a[i].p/d;
            }
        }
        sort(a, a+N, cmp);
        printf( " %s\n ", a[ 0].str);
    }
     return  0;
}

你可能感兴趣的:(HDU)