• B Verse For Santa


    题意:一组不可改变顺序的数组a[n],从头开始求和,至多允许跳过一个数,使取最多数出来求和并且和小于s,求跳过该数的位置,如果没有跳过则输出0。

    思路:从头开始求和sum,用maxx标记出目前已加过的最大值的位置,当sum>s的时候退出循环;

       判断如果数组所有数之和小于s(或者说i>n循环走完),无需跳过某个数,则输出0;

       如果sum>s,则判断减去最大值加上i的下一个值,如果小于s,即可跳过最大值,输出最大值位置。

       否则输出0,没必要跳过。

    #include<stdio.h>
    #include<algorithm>
    #define N 1e5+10
    using namespace std;
    int main(){
            long long int t,i,n,s,a[int(N)],sum,maxx;
            while(~scanf("%lld",&t)){
                    while(t--){
                            scanf("%lld %lld",&n,&s);
                            for(i=1;i<=n;i++){
                                    scanf("%d",&a[i]);
                            }
                            maxx=1;
                            sum=0;
                            for(i=1;i<=n;i++){
                                    sum+=a[i];
                                    if(a[i]>a[maxx])
                                            maxx=i;
                                    if(sum>s) break;
                            }
                            if(i>n) printf("0\n");
                            else{
                                    if(sum-a[maxx]+a[i+1]<=s)
                                            printf("%lld\n",maxx);
                                    else printf("0\n");
                            }
                    }
            }
    }
    View Code
  • 相关阅读:
    计算机编程基础
    css3 压缩及验证工具
    BFC
    【原创】bootstrap框架的学习 第五课
    曼珠沙华
    仓央嘉措
    waiting for spring......
    一天
    21-chttp连接池该取多大
    守护线程会不会执行finally?默认情况new thread怎么样确定守护状态?
  • 原文地址:https://www.cnblogs.com/DreamingBetter/p/12183060.html
Copyright © 2020-2023  润新知