zoukankan      html  css  js  c++  java
  • HDU 1205 吃糖果

    题意:n种糖果, 每种a[i]个, 每次吃一颗,要求连续吃的两颗种类不同,问是否存在一种顺序能吃完所有糖果

    抽屉原理  能否吃完与个数最多的糖果(mx)有关,要吃完mx个至少需要其他种类糖果mx-1个, 设s=a[0]+...+a[n-1]-mx;

    if 其他种类糖果个数不满足要求, 则不能吃完所有糖果

    else s>mx-1,  随着mx--, 次大值会变成mx, 此时一定能保证  (剩下的s) >(当前mx)-1  一直变化 最后就能吃完

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<map>
    #include<queue>
    #include<stack>
    #include<list>
    #include<set>
    using namespace std;
    typedef long long ll;
    typedef pair<ll,ll> p;
    typedef long double ld;
    #define mem(x) memset(x, 0, sizeof(x))
    #define me(x) memset(x, -1, sizeof(x))
    #define fo(i,n) for(i=0; i<n; i++)
    #define sc(x) scanf("%lf", &x)
    #define pr(x) printf("%lld
    ", x)
    #define pri(x) printf("%lld ", x)
    #define lowbit(x) x&-x
    const ll MOD = 1e18 +7;
    const ll N = 6e6 +5;
    ll a[N], vis[N];
    int main()
    {
        ll i, j, k, l=0;
        ll n, m, t, x;
        cin>>t;
        while(t--)
        {
            cin>>n;
            ll mx=-1;
            ll s=0, f=0;
            for(i=0; i<n; i++)
            {
                cin>>a[i];
                s+=a[i];
                mx=max(mx,a[i]);
            }
            s-=mx;
            if(s>=mx-1) f=1;
            if(f) cout<<"YES"<<endl;
            else cout<<"NO"<<endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Next Permutation
    Generate Parentheses
    Unique Binary Search Trees II
    LDP LSP建立
    LDP标签分发和管理
    维护LDP会话
    LDP会话状态机
    LDP会话建立过程
    LDP发现机制
    LDP术语
  • 原文地址:https://www.cnblogs.com/op-z/p/10751101.html
Copyright © 2011-2022 走看看