一整数数列a1, a2, ... , an(有正有负),以及另一个整数k,求一个区间
i,j ,(1 <= i <= j <= n),使得a i + ... + a j = k。第2 - N + 1行:A i (-10^9 <= A i <= 10^9)。
输出2个数i, j,分别是区间的起始和结束位置。如果存在多个,输出i最小的。如果i相等,输出j最小的。
6 10 1 2 3 4 5 6
1 4
C语言代码:
#include<stdio.h> int a[10005]={0}; int b[10005]={0}; int main() { long long int n,m; int i,j; scanf("%lld%lld",&n,&m); for(i=1;i<=n;i++) scanf("%d",&a[i]); long long int sum=0; for(i=1;i<=n;i++) { sum+=a[i]; b[i]=sum; } for(i=0;i<=n;i++) { for(j=i;j<=n;j++) if(b[j]-b[i]==m) { printf("%d %d\n",i+1,j); return 0; } } printf("No Solution"); return 0; }