• UVA 10670 Work Reduction


    UVA_10670

        一开始不知道rounding down是四舍五入的意思,还以为是向下取整,果断就疑惑了……

        贪心的思路不难想到,如果减半不会使文件少于M且比单份划算的话就一直用减半即可。

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #define MAXD 110
    int N, M, L, cost[MAXD], a[MAXD], b[MAXD], r[MAXD];
    char name[MAXD][20], temp[110];
    int cmp(const void *_p, const void *_q)
    {
    int *p = (int *)_p;
    int *q = (int *)_q;
    if(cost[*p] == cost[*q])
    return strcmp(name[*p], name[*q]);
    else
    return cost[*p] < cost[*q] ? -1 : 1;
    }
    void solve()
    {
    int i, j, k, s;
    for(i = 0; i < L; i ++)
    {
    scanf("%s", temp);
    for(j = 0; temp[j]; j ++)
    if(temp[j] == ':' || temp[j] == ',')
    temp[j] = ' ';
    sscanf(temp, "%s%d%d", name[i], &a[i], &b[i]);
    cost[i] = 0;
    s = N;
    while(s - (s + 1) / 2 >= M && b[i] < (s + 1) / 2 * a[i])
    {
    cost[i] += b[i];
    s -= (s + 1) / 2;
    }
    cost[i] += (s - M) * a[i];
    }
    for(i = 0; i < L; i ++)
    r[i] = i;
    qsort(r, L, sizeof(r[0]), cmp);
    for(i = 0; i < L; i ++)
    printf("%s %d\n", name[r[i]], cost[r[i]]);
    }
    int main()
    {
    int i, t, tt;
    scanf("%d", &t);
    for(tt = 0; tt < t; tt ++)
    {
    printf("Case %d\n", tt + 1);
    scanf("%d%d%d", &N, &M, &L);
    solve();
    }
    return 0;
    }


  • 相关阅读:
    wav格式
    python字符串操作
    云中Active Directory是如何工作的?
    Azure Active Directory中的特权身份管理如何运作?
    工作组下的共享设置
    重新审视虚拟桌面存储
    NAND
    如何使用PowerShell管理Windows服务
    如何应对云爆发架构?四种方法替你解忧
    配置网络策略中的 NAP 条件
  • 原文地址:https://www.cnblogs.com/staginner/p/2309515.html
Copyright © 2020-2023  润新知