CodeForces 18C Stripe (简单题)

来源:互联网 发布:博途v13软件安装顺序 编辑:程序博客网 时间:2024/05/22 03:04
题目类型  简单题

题目意思
给出 n 个数 (1 <= n <=1e5) 
问把这 n 个数分成 "和" 相等的两部分 的方法数
例如 给出 3 个数 1 2 3 一种合法的分法是  1 2 | 3 
如果 给出 3 个数 1 1 1 则没有合法的分法

解题方法
先求出所有数加起来的和
从左到右遍历原数组 并不断更新前面的数加起来的和 如果这个和等于 所有的数的和的一半 则表示有一种合法的分法

参考代码 - 有疑问的地方在下方留言 看到会尽快回复的
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <set>#include <map>#include <string>#include <algorithm>using namespace std;typedef long long LL;const int MAXN = 1e5 + 10;int a[MAXN];int main() {  int n;  while(scanf("%d", &n) != EOF) {     int sum = 0;    for( int i=0; i<n; i++ ) {      scanf("%d", &a[i]);      sum += a[i];    }    if(sum % 2) {      printf("0\n");      continue;    }    int tsum = 0;    int res = 0;    for( int i=0; i<n-1; i++ ) {      tsum += a[i];      if(tsum == sum / 2) {        res++;      }    }    printf("%d\n", res);  }  return 0;}


0 0