本文共 1045 字,大约阅读时间需要 3 分钟。
第1行:2个数N,K。N为数列的长度。K为需要求的和。(2 <= N <= 10000,-10^9 <= K <= 10^9)第2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9)。
如果没有这样的序列输出No Solution。输出2个数i, j,分别是区间的起始和结束位置。如果存在多个,输出i最小的。如果i相等,输出j最小的。
6 10123456
1 4
n=10000,O(n^2)暴力能过。。。
const int maxn=1e4+10;ll sum[maxn];int main(){ ios::sync_with_stdio(false); int n,k; while(cin>>n>>k) { int flag=1; int x,y,tmp; memset(sum,0,sizeof(sum)); for(int i=1;i<=n;i++) { cin>>tmp; sum[i]=tmp+sum[i-1]; } for(int i=0;i下面这个用map写的才是比较快的
const int maxn=1e4+10;ll a[maxn],sum[maxn];mapmp;int main(){ ios::sync_with_stdio(false); int n,k; while(cin>>n>>k) { mp.clear(); memset(sum,0,sizeof(sum)); for(int i=1;i<=n;i++) { cin>>a[i]; sum[i]=a[i]+sum[i-1]; mp[sum[i]]++; } for(int i=0;i
转载地址:http://weali.baihongyu.com/