您的位置:首页 > 其它

2013暑假集训 第三场个人赛总结

2013-07-21 19:07 525 查看
  7月20日,第三场个人赛。这场个人赛应该是最低谷了吧,整场比赛2y了一题以后就再也没出题了。

IDOriginTitle
0 / 11Problem ASPOJ SEGMENTSA
1 / 94Problem BSPOJ STRDISTB
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

const int N = 111111;
int rec
, sum
, p
;
bool vis
;

bool cmp(int a, int b) { return sum[a] < sum[b];}

int main() {
//freopen("in", "r", stdin);
int n;
while (~scanf("%d", &n)) {
sum[0] = 0;
bool ok = true;
for (int i = 1; i <= n; i++) {
scanf("%d", rec + i);
sum[i] = sum[i - 1] + rec[i];
p[i] = i;
if (sum[i] <= 0) ok = false;
}
sort(p + 1, p + n + 1, cmp);
memset(vis, 0, sizeof(vis));
int ans = n;
for (int i = 1; i <= n; i++) {
//cout << p[i] << endl;
if (sum[p[i - 1]] == sum[p[i]]) ok = false;
if (!vis[i]) {
int t = i;
while (!vis[t]) vis[t] = true, t = p[t];
ans--;
}
//for (int i = 1; i <= n; i++) cout << vis[i] << ' '; cout << endl;
}
if (ok) printf("%d\n", ans);
else puts("-1");
}
return 0;
}


View Code
  最后还有一题F,这个真不会了。以后研究懂了dp的时候再说吧。

——written by Lyon
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: