水题。大意是找到最小的前缀和使其大于等于总和的一半。直接扫一遍比较就好了。值得注意的是 如果sum为奇数,sum=sum/2+1.因为这个wa了一发
#include <iostream> #include <bits/stdc++.h> using namespace std; int a[200005]; int main() { int n,i,sum=0; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",a+i); sum+=a[i]; } if(sum%2==0) { sum/=2; } else { sum=sum/2+1; } int temp=0,flag; for(i=0;i<n;i++) { temp+=a[i]; if(temp>=sum) { flag=i; break; } } printf("%d ",flag+1); return 0; }