原题链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1094
思路:维护前缀和sum的最小下标,然后枚举i看是否有对应的sum
AC代码:
#include<bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int MAXN = 10005;
map<long long, int> mp;
long long sum[MAXN];
int main() {
int n, k, a;
scanf("%d %d", &n, &k);
for (int i = 1; i <= n; i++) {
scanf("%d", &a);
sum[i] = a + sum[i - 1];
if (mp[sum[i]] == 0)mp[sum[i]] = i;
else mp[sum[i]] = min(mp[sum[i]], i);
}
bool flag = true;
for (int i = 0; i < n; i++) {
if (mp[sum[i] + k] && mp[sum[i] + k] >= i + 1) {
flag = false;
printf("%d %d\n", i + 1, mp[sum[i] + k]);
break;
}
}
if (flag)printf("No Solution\n");
return 0;
}