周赛B

原创 2018年04月15日 21:48:55
给出n个数,然后给一个数m,找出长度最短的连续子系列,其总和大于等于m。
n和m为正整数且n小于100 000,m小于100 000 000


若干组测试样例,处理到文件结束,注意无解情况输出0
第一行输入m,m。接下来一行有n个数。


input
10 15
5 1 3 5 10 7 4 9 2 8
5 11
1 2 3 4 5


output
2

3

#include<iostream>
#include<math.h>
#include<algorithm>
#include<string.h>
using namespace std;
int main(){
	long long n,m;
	long long a[100010];
	while(scanf("%lld %lld",&n,&m)!=EOF)
	{
		memset(a,0,sizeof(a));
		long long x,sum=0,vis=0;
		long long res=1e9+7;
		for(long long i=1;i<=n;i++){
			scanf("%lld",&x);
			sum+=x;
			a[i]=sum;
			if(sum>=m){
			for(long long j=i-1;j>=0;j--){
				if(a[i]-a[j]>=m){
					vis=1;
					long long t=i-j;
					if(res>t){
						res=t;
					}
					break;
				}
			}
		}
		}
		if(!vis){
			res=0;
		}
		printf("%lld\n",res);
	}
	return 0;
}

用a数组存储他们的和,在相减即可

写的时候很费劲,一直超时,后来改了改才过,知道看了学长的代码才知道可以这么简单

#include<iostream>  
#include<cstdio>  
#include<cstring>  
#include<cmath>  
using namespace std;  
const int MAXN=100000+10;    
int sum[MAXN];    
int main()    
{    
    int n,s,t;    
    while(scanf("%d%d",&n,&s)!=EOF)    
    {    
        sum[0]=0;    
        for(int i=1;i<=n;i++)    
        {    
            scanf("%d",&t);    
            sum[i]=sum[i-1]+t;    
        }    
        int ans=n+1,j=0;    
        for(int i=1;i<=n;i++)    
        {    
            if(sum[i]-s<0)continue;    
            while(sum[i]-sum[j]>=s) j++;    
            ans=min(ans,i-j+1);    
        }    
        printf("%d\n",ans==n+1 ? 0:ans);    
    }    
}  

其实跟我的整体思想都差不多但是这个

        for(int i=1;i<=n;i++)    
        {    
            if(sum[i]-s<0)continue;    
            while(sum[i]-sum[j]>=s) j++;    
            ans=min(ans,i-j+1);    
        }    
没想到,没想到


2015 年 JXNU_ACS 算法组寒假第一次周赛 1001 A+B

A+B Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submissi...
  • u013615904
  • u013615904
  • 2015-01-25 15:29:04
  • 651

没事玩玩leetcode周赛 #30~#34 #40 #42~#48 #50~#54 #56~ 61 #65~71

怒跪。#1. 矩阵reshape操作,手速题。#2 求 给定整数【-1000,1000】数组(20000长度)  ,求区间和为k(1e-7,1e7)的区间数量。算法:朴实平方算法肯定超时。 预处理前缀...
  • u011498819
  • u011498819
  • 2017-04-30 11:38:45
  • 494

TopCoder竞赛介绍

  • Xviewee
  • Xviewee
  • 2007-12-30 18:45:00
  • 1815

Leetcode第四周周赛

用golang做了1,2,4题,第3题golang总是有问题换成c++来做。 代码地址:leetcode solution(golang)396. Rotate Function最暴力的方法莫过于一...
  • NachtZ
  • NachtZ
  • 2016-09-12 10:20:33
  • 366

2018美赛B题翻译

背景:目前地球上大约有6900种语言。世界上约有一半的人口声称拥有下列十种语言之一(以大多数人的语言来说):普通话(标准中文)、西班牙语、英语、印地语、阿拉伯语、孟加拉语、葡萄牙语、俄语、旁遮普语和日...
  • qq_36225706
  • qq_36225706
  • 2018-02-09 09:42:57
  • 4283

2018 美赛 B

问题 B:有多少种语言 背景:目前地球上大约有 6900 种语言。世界的一半人口声称有下列十种语言之一(以大多数 人的语言)为母语: 普通话(标准中文),西班牙语,英语,北印度语,阿拉伯语,孟加拉语...
  • zhelong3205
  • zhelong3205
  • 2018-02-09 10:55:53
  • 3036

第一次周赛B

B - Problem B Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Subm...
  • qcwdytx
  • qcwdytx
  • 2014-07-19 13:27:49
  • 242

2016年数学建模美赛题目原文及翻译-B [个人思路]

PROBLEM B: Space Junk The amount of small debris in orbit around earth has been a growing concern....
  • zhangty0223
  • zhangty0223
  • 2016-01-29 09:59:13
  • 12317

2018数学建模美赛B题翻译

背景:       目前地球大约有6900种语言。全世界约一半人口的要求有以下十种语言(在大多数人)作为母语:中文(包括普通话)、西班牙语、英语、印地语、阿拉伯语、孟加拉语、Portuguese、俄语...
  • Explos
  • Explos
  • 2018-02-14 20:49:14
  • 176

2017电赛 B题 基础题

  • 2017年08月21日 13:19
  • 6.32MB
  • 下载
收藏助手
不良信息举报
您举报文章:周赛B
举报原因:
原因补充:

(最多只允许输入30个字)