首页 > 代码库 > CodeForces 21C Stripe 2 构造题
CodeForces 21C Stripe 2 构造题
题目链接:
题目链接:点击打开链接
#include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <iostream> #include <map> #include <set> #include <math.h> using namespace std; #define inf 10000000 #define N 100050 #define ll __int64 ll n; ll a[N], lsum[N], rsum[N]; ll lok[N], rok[N]; int main(){ ll i, j; while(cin>>n) { ll sum = 0; bool siz = false; for(i=1;i<=n;i++)cin>>a[i], sum += a[i], siz |= a[i]; if(!siz) { cout<<(n-1)*(n-2)/2<<endl; continue; } if(sum%3){puts("0");continue;} sum/=3; lsum[0] = 0; for(i=1;i<=n;i++)lsum[i] = lsum[i-1]+a[i]; rsum[n+1] = 0; for(i=n;i;i--)rsum[i] = rsum[i+1]+a[i]; memset(lok, 0, sizeof lok); memset(rok, 0, sizeof rok); for(i=1;i<=n;i++) { if(lsum[i]==sum){ lok[i] = 1; } // if(i==n)lok[i]=0; // lok[i] += lok[i-1]; } for(i=n;i;i--) { if(rsum[i]==sum){ rok[i] = 1; } rok[i]+=rok[i+1]; } ll ans = 0; for(i = 1; i+2<=n; i++) ans += lok[i] * rok[i+2]; // ll ans = (lok[n]*(lok[n]-1))/2; cout<<ans<<endl; } return 0; } /* 7 -1 1 -1 1 -1 1 0 9 -5 -2 1 1 5 0 -4 4 0 100 3 0 -5 2 -3 -1 -1 0 -2 -5 -4 2 1 2 -2 -1 -1 -4 3 -1 -3 -1 5 0 -4 -4 -1 0 -2 -2 0 1 -1 -2 -1 -5 -4 -2 3 1 -3 0 -1 1 0 -1 2 0 -2 -1 -3 1 -2 2 3 2 -3 -5 2 2 -2 -2 1 2 -2 -1 3 0 -4 7 -2 2 1 4 -9 -1 -2 -1 0 -1 0 -2 -2 -1 1 1 -4 2 -3 -3 7 1 1 -3 -7 0 -2 0 5 -2 */
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。