Gym 101243ECupcakes
Posted 谦谦君子,陌上其华
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gym 101243ECupcakes相关的知识,希望对你有一定的参考价值。
http://codeforces.com/gym/101243/attachments
题意:
有n个人,桌子上有k的蛋糕,每个人都有一个值val,表示每次轮到他吃蛋糕时,他可以吃1~val的蛋糕量。在这n个人当中,val最大的人是最贪婪的,他每次都会固定的吃val蛋糕。现在一个一个排好队吃蛋糕,如果轮到谁吃蛋糕时已经没有蛋糕了,那么这个人就要打扫卫生,现在要判断是否能让最贪婪的人去打扫卫生。
思路:
先找出最贪婪的那个人,计算出他左边的人一轮下来所要吃的最少的蛋糕量l_min和最多的蛋糕了l_max,另外还要计算出一轮下来除贪婪人外其余人所要吃的最少的蛋糕了和最多的蛋糕量。
如果l_min<=k<=l_max,那么左边的人肯定能在轮到贪婪的人吃时正好吃完蛋糕。
如果不能的话,那么蛋糕就要被贪婪的人吃掉点,接下来我们加上一轮下来其余人所要吃的最少的蛋糕和最多的蛋糕,重复上述步骤判断。
1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<cstdio> 5 #include<sstream> 6 #include<vector> 7 #include<stack> 8 #include<queue> 9 #include<cmath> 10 #include<map> 11 #include<set> 12 using namespace std; 13 typedef long long ll; 14 typedef pair<int,int> pll; 15 const int INF = 0x3f3f3f3f; 16 const int maxn = 1e5+5; 17 18 int n, k; 19 ll a[maxn]; 20 21 int main() 22 { 23 freopen("input.txt","r",stdin); 24 freopen("output.txt","w",stdout); 25 //freopen("input.txt","r",stdin); 26 while(~scanf("%d%d",&n,&k)) 27 { 28 ll MAX=0; 29 for(int i=1;i<=n;i++) 30 { 31 scanf("%lld",&a[i]); 32 MAX=max(MAX,a[i]); 33 } 34 35 ll l_min=0, l_max=0; 36 ll round_min=0, round_max=0; 37 bool flag=true; 38 39 for(int i=1;i<=n;i++) 40 { 41 if(a[i]==MAX) {flag=false;continue;} 42 if(flag) 43 { 44 l_min++; 45 l_max+=a[i]; 46 } 47 round_min++; 48 round_max+=a[i]; 49 } 50 51 flag=false; 52 while(k>=0) 53 { 54 if(k>=l_min && k<=l_max) 55 { 56 puts("YES"); 57 flag=true; 58 break; 59 } 60 else 61 { 62 k-=MAX; 63 l_min+=round_min; 64 l_max+=round_max; 65 } 66 67 } 68 if(!flag) puts("KEK"); 69 } 70 return 0; 71 }
以上是关于Gym 101243ECupcakes的主要内容,如果未能解决你的问题,请参考以下文章
codeforces gym101243 A C D E F G H J
解决使用Monitor出现gym.error.DependencyNotInstalled: Found neither the ffmpeg nor avconv executables的问题(代码