第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛——G题 贪吃的派蒙

这是一个关于编程逻辑的题目,描述了一个在提瓦特大陆上的人们如何通过策略让贪吃的派蒙最后刷盘子的问题。程序需要处理不同角色的领取上限,并判断是否能确保派蒙留下。输入包括人数、甜甜花酿鸡数量和每个角色的领取上限,输出是YES或NO,表示能否达成目标。示例展示了不同的测试用例及其结果。

题目描述

在遥远的提瓦特大陆上,正在筹备一年一度的羽球节,猎鹿人餐厅为犒劳认真筹备的众人,准备了K份甜甜花酿鸡供大家排队领取。

在每一次的排队中,编号为i的角色领取上限为Ai,这意味着他可以领取的甜甜花酿鸡在[1-Ai]范围内。当一个角色领完本次的甜甜花酿鸡,他/她就会回到队列的末尾,直到所有甜甜花酿鸡都被吃完为止。当轮到一个角色领取时,如果所有的甜甜花酿鸡都被领完,那么他/她就要帮大家刷盘子。

贪吃的派蒙每次都吃固定的Ax个甜甜花酿鸡(如果剩下的甜甜花酿鸡的数量比Ax小,那么他就把剩下的都吃完)。我们很容易找到派蒙的编号,Ax比其他所有的Ai都要大。大家都想让派蒙最后留下来刷盘子,请你写一个程序来判断这是否可能。

输入描述:

第一行包含一个整数T(1≤T≤100)T(1≤T≤100)T(1T100),表示有T组测试数据。

接下来每组测试数据包含两行。

第一行包含两个整数N和K(2≤N≤105,0≤K≤108)N和K(2≤N≤10^5,0≤K≤10^8)NK(2N105,0K108),分别表示人数和甜甜花酿鸡的数量。

第二行包含一个整数Ai(1≤Ai≤109)Ai(1≤Ai≤10^9)Ai(1Ai109),表示队列中编号为i的角色可以领取甜甜花酿鸡的最大数量。始终只有一个最大的Ax。

输出描述:

如果大家能找到一种方案让派蒙刷盘子,那么输出“YES”。否则输出“NO”。

示例1

输入
1
4 3
1 2 3 2

输出
YES

示例2

输入
1
5 8
1 2 3 2 1

输出
NO

AC的C++代码

#include<iostream>
using namespace std;
int T,N,K,ax,pos,i;
long long sum[100005];
int main(){
    cin>>T;
    while(T--){
        cin>>N>>K;
        ax=0;
        for(i=1;i<=N;i++){
            int x;
            cin>>x;
            if(x>ax)
                ax=x,pos=i;
            sum[i]=sum[i-1]+x;
        }
        //循环不足一个周期 或者 循环了至少一个周期,但是左边人的最大总和要小于k
        if(pos>K+1||(sum[N]>=K&&sum[pos-1]<K))
            cout<<"NO\n";
        else
            cout<<"YES\n";
    }
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值