博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVa 10670 - Work Reduction
阅读量:6146 次
发布时间:2019-06-21

本文共 2232 字,大约阅读时间需要 7 分钟。

  题目大意:对n份文件进行处理使其减少到m份,有l个机构可供选择。每个机构提供两种方案:每减少一份收费a元,或者减少到文件数量的一半收费b元。根据各个机构收取费用进行排序。

  很直接的题目,直接进行模拟就好了。其中对A、B两种方案的选择使用贪心策略。

1 #include 
2 #include
3 #include
4 #include
5 using namespace std; 6 #define MAXN 100+10 7 8 struct Agency 9 {10 char name[20];11 int cost;12 };13 Agency agency[MAXN];14 15 bool cmp (const Agency& a, const Agency& b)16 {17 if (a.cost != b.cost) return a.cost < b.cost;18 else return strcmp(a.name, b.name) < 0;19 }20 21 int main()22 {23 #ifdef LOCAL24 freopen("in", "r", stdin);25 //freopen("out", "w", stdout);26 #endif27 int T;28 scanf("%d", &T);29 for (int kase = 1; kase <= T; kase++)30 {31 int n, m, l;32 scanf("%d%d%d", &n, &m, &l);33 getchar();34 for (int i = 0; i < l; i++)35 {36 int cnt = 0;37 char ch = getchar();38 while (isupper(ch))39 {40 agency[i].name[cnt++] = ch;41 ch = getchar();42 }43 agency[i].name[cnt] = '\0';44 int a, b;45 scanf("%d,%d", &a, &b);46 getchar();47 agency[i].cost = 0;48 int remain = n;49 while (remain > m)50 {51 int half = remain / 2;52 if (half < m)53 {54 agency[i].cost += (remain - m) * a;55 remain = m;56 }57 else58 {59 int t = a * (remain - half); // the cost reducing from remain to half with A60 if (t < b) agency[i].cost += t;61 else agency[i].cost += b;62 remain = half;63 }64 }65 }66 sort(agency, agency+l, cmp);67 printf("Case %d\n", kase);68 for (int i = 0; i < l; i++)69 printf("%s %d\n", agency[i].name, agency[i].cost);70 }71 return 0;72 }
View Code

  不过在读取名字的while循环中如果使用 while (ch = getchar() && isupper(ch))  就会出问题,不知道为什么...

转载于:https://www.cnblogs.com/xiaobaibuhei/p/3259949.html

你可能感兴趣的文章
luov之SMTP报错详解
查看>>
软件概要设计做什么,怎么做
查看>>
dwr
查看>>
java的特殊符号
查看>>
word2010中去掉红色波浪线的方法
查看>>
fabric上下文管理器(context mangers)
查看>>
JQuery-EasyUI Datagrid数据行鼠标悬停/离开事件(onMouseOver/onMouseOut)
查看>>
并发和并行的区别
查看>>
php小知识
查看>>
Windows下安装、运行Lua
查看>>
Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解(二)
查看>>
初识中间件之消息队列
查看>>
MyBatis学习总结(三)——优化MyBatis配置文件中的配置
查看>>
Spring常用注解
查看>>
我的友情链接
查看>>
PCS子层有什么用?
查看>>
查看端口,关闭端口
查看>>
代码托管平台简介
查看>>
linux:yum和apt-get的区别
查看>>
Sentinel 1.5.0 正式发布,引入 Reactive 支持
查看>>