码迷,mamicode.com
首页 > 其他好文 > 详细

[每日一题]:CodeForces - 1279B Verse For Santa

时间:2020-04-26 20:37:16      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:value   break   clu   continue   最大   +=   每日   ring   int   

题目:

技术图片

技术图片

题目大意:

给一个序列,然后给你一个数 s ,从头开始进行累加,不能超过 s
在累加的过程中,你可以 跳过 一个数 进行累加,最后保证累加的
数量是最多的,不是累加的和哦,输出你跳过的那个数在序列中的位置。
(根据样例推断,似乎只能从前开始累加,否则第一个样例就有误了,嘻嘻)

考察点:

签到题,模拟即可。

Code:

#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

const int maxn = 1e5 + 10;

typedef long long LL;

int a[maxn]; 

int t,n,s;

int main(void) {
	scanf("%d",&t);
	while(t --) {
		LL res = 0,ans = 0;
		scanf("%d%d",&n,&s);
		for(int i = 1; i <= n; i ++) {
			scanf("%d",&a[i]);
			ans += a[i];
		}
		// 总和 <= s 时直接跳过 
		if(ans <= s) {
			puts("0");
			continue;
		}
		// 存储跳过的位置,时刻更新最大值 
		int pos = 0,maxValue = -1;
		bool flag = false;
		for(int i = 1; i <= n; i ++) {
			res += a[i];
			if(res > s && flag) {
				res -= a[i];
				break;
			}
			if(res > s) {
				res -= a[pos];
				flag = true;
			}
			if(maxValue < a[i]) maxValue = a[i],pos = i;
		}
		printf("%d\n",pos);
	}	
	return 0;
} 

后记:

今天的题目有点水了,抱歉,各位!

[每日一题]:CodeForces - 1279B Verse For Santa

标签:value   break   clu   continue   最大   +=   每日   ring   int   

原文地址:https://www.cnblogs.com/prjruckyone/p/12781869.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!