1. 输入格式
第一行是整数n(0 <n< 1000000);
第二行包含n个数,表示几 种糖果的数量 mi,0 < mi < 1000000
2. 输出格式
输出一行,包含一个 Yes 或 no。
3. 题解
(1)题目的最大难点就在于如何判断有没有可行的吃糖方案,本文章采用的方法为插入法,设n种糖果中某一种糖果数量最多,有mx个,然后把剩下的糖果往这mx-1个空隙里面插,只要能插满这mx-1个空隙,就有可行的吃糖方案。
则本题题眼为sum-mx>=mx-1。

4. 代码
(1)本题在求mx变量的值时,有两种方法,第一个方法是利用优先队列顶部为最大的性质mx=pq.top()直接得出
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
  ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
  int n;cin>>n;cin.ignore();
  priority_queue<int> pq;
  long long sum=0;
  for(int i=0;i<n;i++)
  {
  	int x;cin>>x;cin.ignore();
  	pq.push(x);
  	sum+=x;
  }
  long long mx=pq.top();
  if(sum-mx>=mx-1) cout<<"Yes"<<'\n';
  else cout<<"No"<<'\n';
  return 0;
}
(2)方法二则是利用max函数求解:mx=max(mx,x)。注意max函数里面的两个参数类型要一样,mx是long long类型,x也要设置为long long类型。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
  ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
  int n;cin>>n;cin.ignore();
  priority_queue<int> pq;
  long long sum=0,mx=0;
  for(int i=0;i<n;i++)
  {
  	long long x;cin>>x;cin.ignore();
  	pq.push(x);
  	mx=max(mx,x);
  	sum+=x;
  }
  if(sum-mx>=mx-1) cout<<"Yes"<<'\n';
  else cout<<"No"<<'\n';
  return 0;
}
 
                    
                     
                    
                 
                    
                
 
         
 
                
            
        
 浙公网安备 33010602011771号
浙公网安备 33010602011771号