结构体二级排序,注意保质期只有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, 0, sizeof(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;
#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, 0, sizeof(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, 0, sizeof(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;
}
#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, 0, sizeof(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;
}