CodeForces
来源:互联网 发布:动画制作软件手机版 编辑:程序博客网 时间:2024/06/12 00:57
http://codeforces.com/problemset/problem/808/C
给定你n个酒杯的大小,
和你一大瓶酒 容量m,
要求1 每个杯至少放一半,奇数向上取整
2 容量大的杯子放的酒要比容量小的多
3 每个杯子里都要有,并且是整数性质。
是周赛的题,开始时交了十几遍,一直错在第8个样例。比赛完又自己开codeforce交了十几次。。终于发现了错误的原因竟然是两行的代码的顺序颠倒了,导致了一个失误。。。。
那就是在后来 把茶杯里剩下的给其他酒杯倒得时候,要先减去酒杯的容量,在更改cup的大小。。
总体是一个贪心,开始只是想的是每次 放一半,放完一半后,把剩下的一股脑的都放到最大的那个杯子里,没有考虑如果第一个又放满了怎么办。
后来看题解,发现了要从大到小一次再放。
(为什么让所有人都感到满意,这里是贪心的思想。)
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>using namespace std;const int maxn=3000;struct Node{ int u,v; int num;};int cmp1(Node a,Node b){ return a.u<b.u;//dadaopxiao}int cmp2(Node a,Node b){ return a.num<b.num;//dadaopxiao}int main(){ int m; int w; Node v[maxn]; scanf("%d%d",&m,&w); int sum=0; for(int i=0;i<m;i++) { scanf("%d",&v[i].u); v[i].v=v[i].u/2+v[i].u%2; v[i].num=i; sum+=v[i].v; } if(sum>w){printf("-1\n");return 0;} sort(v,v+m,cmp1); w-=sum; int t=m-1; while(w>0) { if(v[t].u-v[t].v<w) { w-=(v[t].u-v[t].v); v[t].v=v[t].u; //w-=(v[t].u-v[t].v); t--; } else {v[t].v+=w;w=0;} } sort(v,v+m,cmp2); for(int x=0;x<=m-1;x++) cout<<v[x].v<<" "; //printf("%d\n",v[m-1].v); return 0;}
阅读全文
0 0
- codeforces~~~
- Codeforces
- codeforces
- Codeforces
- codeforces
- codeforces
- Codeforces
- Codeforces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- 块状元素和行内元素
- 简述游戏抽奖机制运用的心理学知识(上)
- oracle怎么清屏
- Java生成指定位数不重复随机数
- 傅里叶变换方法求图像卷积-OpenCV实现 遇到的问题!!!求指教!!!!!!
- CodeForces
- HDU 3259 Wormholes(Bellman-Ford算法)
- java 小类型向大类型转化
- 双向循环链表
- cocos creator 修改源码教程并使浏览器预览生效(js)
- LeetCode560. Subarray Sum Equals K
- readn和writen函数实现通信
- http协议
- 判断网络状态、Xutils3.0图片框架·····--狸菇凉_