连续和和下标系列问题
程序员文章站
2022-03-03 11:34:42
...
上一篇补提写得超级麻烦啊。。。宛如智障
今天改了简单写法
/**/
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cctype>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <stack>
#include <queue>
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
std::vector<int> v;
int main()
{
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int k, x;
while(cin >> k) {
v.clear();
getchar();
int flag = 1;
int sum = 0, index = -1, res = -100000, ans = -100;
while(scanf("%d", &x) == 1) {
v.push_back(x);
// getchar();
}
getchar();
int n = v.size();
if(k > n || k <= 0) {
cout << "-1" << endl;
// break;
}else if (k == 1) {
int ans = max_element(v.begin(), v.end()) - v.begin() + 1;
cout << ans << endl;;
// break;
}else if(k == n) cout << "1";
else {
index = 0;
for(int i = 0; i < n - k + 1; i++) {
sum = 0;
for(int j = i; j - i < k; j++) {
sum += v[j];
// s.push_back(sum);
}
cout << sum << " " << res << endl;
int a = sum, b = res;
if(res < sum) {
res = sum;
index = i;
}
if(res == sum) {
// if(flag) {
flag = 0;
cout << index + 1 << " ";
// }
// else {
// cout << " " << index + 1;
// }
index = i;
}
}
// if(flag) cout << index + 1 << endl;
// else cout << " " << index + 1 << endl;
cout << index + 1 << endl;
}
}
return 0;
}
/**/
还有一题类似的
HDOJ 1003 Max Sum
#include <stdio.h>
int a[100010];
int main(){
int T,N,i,cas=1;
int start,end,temp,sum,max=0;
scanf("%d",&T);
while(T--){
scanf("%d",&N);
start=end=temp=1;
sum=0;
max=-1001;
for(i=1;i<=N;i++){
scanf("%d",&a[i]);
sum+=a[i];
if(sum>max){
max=sum;
start=temp;
end=i;
}
if(sum<0){
sum=0;
temp=i+1;
}
}
printf("Case %d:\n",cas++);
printf("%d %d %d\n",max,start,end);
if(T>0)
printf("\n");
}
return 0;
}
// /**/
// #include <cstdio>
// #include <cstring>
// #include <cmath>
// #include <cctype>
// #include <iostream>
// #include <algorithm>
// #include <map>
// #include <set>
// #include <vector>
// #include <string>
// #include <stack>
// #include <queue>
// typedef long long LL;
// typedef unsigned long long ULL;
// using namespace std;
// vector<int> v;
// vector<LL> s;
// int main()
// {
// //freopen("in.txt", "r", stdin);
// //freopen("out.txt", "w", stdout);
// int n;
// cin >> n;
// for(int kase = 1; kase <= n; kase++) {
// v.clear();
// s.clear();
// int m;
// cin >> m;
// for(int i = 0; i < m; i++) {
// int x;
// cin >> x;
// v.push_back(x);
// }
// LL sum = 0;
// for(int i = 0; i < v.size(); i++) {
// sum += v[i];
// s.push_back(sum);
// if(sum < 0) sum = 0;
// }
// LL _max = -1000000000;
// int index = -1;
// for(int i = 0; i < s.size(); i++) {
// if(_max < s[i]) {
// _max = s[i];
// index = i;
// }
// }
// int be = 0;
// for(int i = index; i >= 0; i--) {
// if(s[i] <= 0) break;
// else be = i;
// }
// printf("Case %d:\n", kase);
// cout << _max << " " << be + 1 << " " << index + 1;
// if(kase != n) cout << endl;
// }
// return 0;
// }
// /**/