列表

详情


NC221681. dd爱框框

描述

读入,给出个数,求最小的区间,使,若存在相同长度区间,输出最小的那个

输入描述

第一行两个数,n(1≤n≤10000000),x(1≤x≤10000)
第二行n个数a[i](1≤a[i]≤1000)

输出描述

输出符合条件l,r(保证有解)

示例1

输入:

10 20
1 1 6 10 9 3 3 5 3 7

输出:

3 5

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 769ms, 内存消耗: 39544K, 提交时间: 2022-01-11 15:40:07

#include<stdio.h>
int main()
{
	int a,b,sum=0,z=0,y=0,q=99999,j=1;
	scanf("%d %d",&a,&b);
    int x[a+1];
	for(int i=1;i<=a;i++){
		scanf("%d",&x[i]);
		sum=sum+x[i];
		while(sum>=b){
			if(i-j<q)
			{
				q=i-j;
				z=j;
				y=i; 
			}
			sum=sum-x[j++];
	}
	}
    printf("%d %d",z,y);
	return 0; 
} 

C 解法, 执行用时: 1297ms, 内存消耗: 39440K, 提交时间: 2021-05-28 23:57:44

#include<stdio.h>
int main(){
	int x,y,n=0,m=999999,i,j=1,z,z1;
	scanf("%d %d",&x,&y);
	int a[x];
	for(i=1;i<=x;i++){
		scanf("%d",&a[i]);
		n=n+a[i];
		while(n>=y){
			if(i-j<m){
				m=i-j;
				z=j;
				z1=i;
			}
			n=n-a[j++];
		} 
	}
	printf("%d %d",z,z1);
}

上一题