uva 10670 - Work Reduction

来源:互联网 发布:spring cloud node 编辑:程序博客网 时间:2024/05/17 20:33
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <map>#include <algorithm>#define maxn 100 + 10#define ll long long#define INF 1000000000#define FOR(i, a, b) for(int i = a; i < b; ++i)using namespace std;struct agency{int a, b, v; char name[20];}agen[maxn];int cmp(const void *x, const void *y){    if((*(agency*)x).v != (*(agency*)y).v)        return (*(agency*)x).v - (*(agency*)y).v;    return strcmp((*(agency*)x).name, (*(agency*)y).name);}int main(){    int t, kase = 0;    scanf("%d", &t);    while(t--)    {        int n, m, l;        scanf("%d%d%d", &n, &m, &l);        char str[50];        FOR(i, 0, l) {scanf("%s", str); sscanf(str, "%[^:]:%d,%d", agen[i].name, &agen[i].a, &agen[i].b);}        //FOR(i, 0, l) printf("%s:%d,%d\n", agen[i].name, agen[i].a, agen[i].b);        FOR(i, 0, l)        {            int num_a = 0, num_b = 0, tmp = n;            while(tmp/2 >= m && agen[i].a*(tmp/2) > agen[i].b)            {                tmp/=2;                ++num_b;            }            num_a = tmp - m;            agen[i].v = num_a*agen[i].a + num_b*agen[i].b;        }        qsort(agen, l, sizeof(agen[0]), cmp);        printf("Case %d\n", ++kase);        FOR(i, 0, l) printf("%s %d\n", agen[i].name, agen[i].v);    }    return 0;}