Educational Codeforces Round 21 C. Tea Party
来源:互联网 发布:info域名 编辑:程序博客网 时间:2024/06/06 05:50
贪心
题目链接http://codeforces.com/contest/808/problem/C
题目描述:Polycarp招待朋友,给朋友们倒茶,朋友们的茶杯容量不一样,Polycarp的茶壶容量是w,w小于朋友茶杯满容量的总和。倒茶时需要满足几个条件。
1.每个人的茶杯必须至少倒一半。
2.每个人的茶杯倒整数的容量。
3.如果甲茶杯的容量大于乙茶杯的容量,那么甲茶杯里的茶不能少于乙。
4.Polycarp茶壶里的茶必须倒光。
题目分析:
比较水的一个贪心题,先对茶杯容量排一个序,按照从小大大排序,遍历每个茶杯,此时每个茶杯都正好倒一半的茶(因为至少要满足每个朋友都有茶),如果遍历完w还>0,从后往前倒满遍历。最后判断输出即可。
代码如下:
#include <iostream>#include <cstdio>#include <algorithm>#include <sstream>#include <cstdlib>#include <cstring>#include <cmath>#include <iomanip>#include <vector>using namespace std;const int maxn=100+10;struct person{ int v,index; person(int a,int b):v(a),index(b) {} person() {}};bool cmp (const person a,const person b){ return a.v<b.v;}person cup[maxn];int main(){ int n,w,mmin=999999,mmax=-1; cin >> n >> w; for(int i=0; i<n; i++) { scanf("%d",&cup[i].v); cup[i].index=i; } sort(cup,cup+n,cmp); vector< pair<int,int> > outp; for(int i=0; i<n; i++) { if(w>=((cup[i].v+1)/2)) outp.push_back(pair<int,int>(cup[i].index,(cup[i].v+1)/2)); w-=(cup[i].v+1)/2; } if(w>0) { for(int i=n-1; i>=0; i--) { if(w<=(cup[i].v-outp[i].second)) { outp[i].second+=w; w-=w; } else if(w>(cup[i].v-outp[i].second)) { w-=(cup[i].v-outp[i].second);//WA好几次是因为这两句话顺序写反了 outp[i].second+=(cup[i].v-outp[i].second); } if(w<=0) break; } } if(w==0) { if(outp.size()!=n) cout << "-1"; else { sort(outp.begin(),outp.end()); for(int i=0; i<n; i++) { cout << " " << outp[i].second; } } } else cout << "-1"; return 0;}
还是需要严谨,对于每句语句的顺序要仔细考虑,下一句话是否会用的上一句话的变量,使用到改变之前的变量值还是改变之后的变量值,这点尤为重要。有时候自己想法是正确的,但写的程序和想法不一,你还认为自己的逻辑没有错误,就会很难debug。逻辑确实没错误,只不过出个细节错误。
阅读全文
0 0
- Educational Codeforces Round 21 C. Tea Party
- Educational Codeforces Round 21 C. Tea Party
- Educational Codeforces Round 21 C. Tea Party
- Educational Codeforces Round 21-----C. Tea Party
- Educational Codeforces Round 21 C Tea Party
- codeforces Educational Codeforces Round 21 C. Tea Party
- Educational Codeforces Round 21 808C Tea Party 【贪心算法】
- Educational Codeforces Round 21 C. Tea Party 贪心
- Codeforces Educational Codeforces Round 21 [5.30] Tea Party&Array Division&Average Sleep Time&Lucky
- Codeforces 808C Tea Party
- Codeforces 808C Tea Party
- Educational Codeforces Round 21 C
- 【codeforces 808】C.Tea Party(贪心)
- Codeforces 808C Tea Party 题解
- 【Codeforces 808 C. Tea Party】+ sort
- Codeforces 808C Tea Party【贪心】
- 【Codeforces 808C】【贪心】Tea Party题解
- Educational Codeforces Round 21
- 并发编程中的几个名词概念
- TensorFlow 神经网络优化
- 网络连接的net命令
- 基于binder的跨进程通讯之使用AIDL实现Demo
- android中的Button按钮居中(水平垂直中)
- Educational Codeforces Round 21 C. Tea Party
- (转)前端面试题
- 百度ueditor上传系列问题
- apue第八章 进程控制(3) exec函数族
- Hive学习之抽样(Sampling)
- elasticsearch FunctionScore Java API
- bzoj2442
- 数据预处理:AMiner to JSON
- 有什么办法能控制微信群红包的尾数大小单双