zoukankan      html  css  js  c++  java
  • Gym 101243E Cupcakes

    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 }
  • 相关阅读:
    MySQL ON DUPLICATE KEY UPDATE 语法
    MySQl 截取函数 left(),right(),substring(),substring_index() 的用法
    MySQL timestampdiff 和 timestampadd 的用法
    MySQL replace 和 replace into 的用法
    MySQL exists 和 not exists 的用法
    MySQL concat、concat_ws 和 group_concat 的用法
    Python数据类型及其方法详解
    《Python编程从入门到实践》_第八章_函数
    《Python编程从入门到实践》_第七章_用户输入和whlie循环
    编码的秘密(python版)
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/7197292.html
Copyright © 2011-2022 走看看