• 2017广东工业大学程序设计竞赛决赛-tmk买礼物


     tmk买礼物

    Description

    今天是校赛的日子,为了庆祝这么喜庆的日子,TMK打算买些礼物给女票LSH庆祝一下。

    TMK进入了雪梨超市,然后刚踏入的一瞬间,店主就对TMK说:“恭喜你成为了本店第2147483647位顾客,本店在搞一个活动,对本店第2147483647位顾客进行赠送活动。你先看看你有多少钱?”

    TMK一摸口袋,发现只有n个硬币,每个硬币的价值为a[i]

    然后店主继续说:“现在你用你的钱凑一些数,如果你的钱能凑成[0,x]里面所有的数,那么你将会免费获得该店价值x元的代金券,假设你有四个硬币面值分别为1,2,4100,你就可以凑成[0,7]里面所有的数,我们将会送你7元的代金券。现在就用你的硬币来试试吧。Enjoy yourself!”

    TMK努力凑钱的时候,店主想知道他要送多少代金券给TMK

    Input

    第一行一个整数T,表示数据组数。

    对于每组数据,首先读入一个整数nn<=100000),然后接下来的一行有n个整数,表示a[i] 0<a[i]<=1e9

    Output

    对于每个数据,输出一个整数x,表示店主要送x元的代金券给TMK

    Sample Input

    1 3 1 2 3

    Sample Output

    6

    HINT

    /*
    题意:略
    
    思路:先将所有的数排序,先特判一下第一个数是不是1,如果不是的话,那么肯定不可能有x,否则就找到第一个a[i]使得
    a[i]>a[i-1]+...a[0]+1,这个a[i]就是一定不能组成的
    
    */
    #include<bits/stdc++.h>
    using namespace std;
    int t;
    int n;
    long long a[100005];
    long long res;
    void init(){
        res=0;
    }
    int main(){
        // freopen("in.txt","r",stdin);
        scanf("%d",&t);
        while(t--){
            init();
            scanf("%d",&n);
            for(int i=1;i<=n;i++){
                scanf("%lld",&a[i]);
            }
            sort(a+1,a+n+1);
            int f=0;
            for(int i=1;i<=n;i++){
                if(a[i]>res+1){
                    f=1;
                    printf("%lld
    ",res);
                    break;
                }
                res+=a[i];
            }
            if(f==0){
                printf("%lld
    ",res);
            }
        }
        return 0;
    }
  • 相关阅读:
    加密算法
    git 误操作
    element项目发布
    node命令
    计划
    第一次碰见类似留几手的段子手
    【vue】---猫眼项目中使用js组件的时候-------loading 加载 无法移除的原因---------
    【异步】---异步解决方案---
    【问题-方法】---buffer---解决方法,butter 文件转字符串
    【大脑】--如何让大脑快速记忆
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/6623929.html
Copyright © 2020-2023  润新知