1. 程式人生 > >BZOJ 1800 [Ahoi2009]fly 飛行棋

BZOJ 1800 [Ahoi2009]fly 飛行棋

pri main can algorithm play opened sum div cnblogs

水題。

把弧長和sum求出,若為奇數顯然無解。

從1~n-1枚舉,找出一段和為sum/2的段的個數。

ans=tot*(tot-1)/2;

技術分享
//Twenty
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<vector>
typedef long long LL;
using namespace
std; int n,a[25],sum,now; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); sum+=a[i]; } if(sum&1) printf("0\n"); else { sum>>=1; int j=1,ans=0; for(int i=1;i<n;i++) { now+=a[i];
while(now>sum) { now-=a[j]; j++; } if(now==sum) ans++; } printf("%d\n",ans*(ans-1)/2); } return 0; }
View Code

BZOJ 1800 [Ahoi2009]fly 飛行棋