CF1738EBalance Addicts

原题: CF1738EBalance Addicts

题目大意

有\(n\)个数的数列,把它分成若干个子集,保证所有子集的和能够组成一个回文数列,求\(mod\ 998244353\)后的方案数。

做法

思路

先分别从头和尾找到一段序列的和相同,记为\(l1\ r2\)然后从\(l1\ r2\)开始寻找一段最长的和相等的序列记为\(r1\ l2\)。

此时答案为

\[ans *= \sum_{i = 0}^{min(r1 - l1 + 1 , r2 - l2 + 1)}C_{r1 - l1 + 1}^i * C_{r2 - l2 + 1}^i
\]

注意

1、如果此时\(l1\ r2\)之间的数都为\(0\)。

显然:\(l1\ r2\)之间的数都可以随便选,那么将\(ans *= 2^{r2 - l1 + 1}\)即可退出

2、预处理\(sum1\ sum2\ tpow\)表示前缀和、后缀和、2的\(n\)次方

3、记得\(mod\ 998244353\)

code

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
const long long mod = 998244353;
int n;
long long ans , ans1 , sum1[N + 5] , sum2[N + 5] , fac[N + 5] , inv[N + 5] , tpow[N + 5] , a[N + 5];
long long pw(long long x , long long y) {
if(!y)
return 1;
long long z = pw (x , y / 2);
z = z * z % mod;
if(y & 1)
z = z * x % mod;
return z;
}
void pre() {
fac[1] = fac[0] = 1;
for(int i = 2 ; i <= N ; i++) {
fac[i] = fac[i - 1] * i % mod ;
}
inv[N] = pw (fac[N] , mod - 2);
for(int i = N - 1 ; i >= 0 ; i--) {
inv[i] = inv[i + 1] * (i + 1) % mod;
}
tpow[0] = 1;
for (int i = 1 ; i <= N ; i++)
tpow[i] = tpow[i - 1] * 2 % mod;
}
long long C(int x , int y) {
if(x<0||y<0) return 0;
if(x < y)
return 0;
return fac[x] * inv[y] % mod * inv[x - y] % mod;
}
int main () {
pre ();
int T;
scanf ("%d" , &T);
while (T--) {
ans = 1;
scanf ("%d" , &n);
for (int i = 1 ; i <= n ; i++) {
scanf ("%d" , &a[i]);
}
for (int i = 1 ; i <= n ; i++) {
sum1[i] = sum1[i - 1] + a[i];
}
for (int i = n - 1; i >= 1 ; i--) {
sum2[i] = sum2[i + 1] + a[i + 1];
}
for (int l1 = 1 , r2 = n - 1 , l2 , r1; l1 <= r2 ; l1 = r1 + 1 , r2 = l2 - 1) {
while (l1 <= r2 && sum1[l1] != sum2[r2]) {
if(sum1[l1] < sum2[r2])
l1 ++;
else
r2 --;
}
if (l1 > r2)
break;
if (sum1[l1] == sum1[r2]) {
ans = tpow[r2 - l1 + 1] * ans % mod;
break;
}
r1 = l1 , l2 = r2;
while (sum1[r1 + 1] == sum1[l1])
r1 ++;
while (sum2[l2 - 1] == sum2[r2])
l2 --;
ans1 = 0;
for (int i = 0 ; i <= min(r1 - l1 + 1 , r2 - l2 + 1) ; i++) {
ans1 = (ans1 + (C (r1 - l1 + 1 , i) * C (r2 - l2 + 1 , i) %mod) ) %mod;
}
ans = ans * ans1 % mod;
}
printf("%lld\n" , ans);
for (int i = 1 ; i <= n ; i++)
sum1[i] = sum2[i] = 0;
}
return 0;
}

CF1738EBalance Addicts的更多相关文章

  1. java运算符优先级记忆口诀

    尊重原创:(口诀)转自http://lasombra.iteye.com/blog/991662 今天看到<java编程思想>中的运算符优先级助记口诀,不过"Ulcer Addi ...

  2. zoj 1010 (线段相交判断+多边形求面积)

    链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=10 Area Time Limit: 2 Seconds      Mem ...

  3. How good software makes us stupid?

    How good software makes us stupid? 科技是怎样让人变傻的? People assume that iPhones, laptops and Netflix are e ...

  4. zoj 1010 Area【线段相交问题】

    链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1010 http://acm.hust.edu.cn/vjudge/ ...

  5. L268 A terrifying look at the consequences of climate change

    Climate change is a devilish problem for humanity: at once urgent and slow-moving, immediate and dis ...

  6. Why I Left the .NET Framework

    The .NET Framework was good. Really good. Until it wasn't. Why did I leave .NET? In short, it constr ...

  7. 每日英语:How Often Do Gamblers Really Win?

    The casino billboards lining America's roadways tantalize with the lure of riches. 'Easy Street. It' ...

  8. Social media users of the world unite!

    Social media users of the world unite!全世界社交媒体用户联合起来!If Plato were alive today, he might well regard ...

  9. TEXT 8 Ready, fire, aim

    TEXT 8 Ready, fire, aim 预备!开火!瞄准!! Feb 16th 2006 From The Economist print edition Foreword:A vice-pr ...

  10. 【256】◀▶IEW-答案

    附答案 Unit I Fast food Model Answers: Model 1 The pie chart shows the fast foods that teenagers prefer ...

随机推荐

  1. css scoped和moudle

    scoped css 官方文档 缺点 一.如果用户在别处定义了相同的类名,也许还是会影响到组件的样式. 二.根据css样式优先级的特性,scoped这种处理会造成每个样式的权重加重了: 即理论上我们要 ...

  2. PyCharm2018 不使用IPython 不成功--一直显示连接控制台

    每次关闭PyCharm时,都提示有后台任务在运行,一开始不知道怎么回事. 另外,发现底部的,python 控制台,启动pycharm时总有错误信息. 后来发现底部状态栏,显示1个 进程在运行. 2个地 ...

  3. mac 安装go语言以及配置环境变量

    Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://golang.google.cn/dl/ 其他版本自己根据系统版本下载,这里只介绍mac下载 一 ...

  4. 2020/03/24 HTML基础复习笔记

    2020-03-24 15:49:30 下午好! 这是我开通博客的第二天也是在钉钉上网课的又一天,为了应对考试现在复习到了HTML基础知识,本打算用VS敲想了想还是用了XMind(真的好用!!!)文件 ...

  5. Net6读取AppSettings.json

    1.创建Helper类 public class AppHelper { private static IConfiguration _config; public AppHelper(IConfig ...

  6. NX二次开发VS环境搭建

    1.安装VS2019(直接安装高版本:与NX匹配时向下兼容,不需要纠结) 2.安装习惯使用的NX(建议直接上NX1980,新版不管是功能还是界面都比低版好用得多.很多人说新版不好用,这只是个人习惯和接 ...

  7. JSON常见用法

    https://blog.csdn.net/weixin_43631296/article/details/105253434

  8. json.dumps和json.loads,get和post

    一.json.dumps()和json.loads()概念理解 1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) json.dumps() ...

  9. mysql 不包含某个字符

    转载网址: https://blog.csdn.net/mp624183768/article/details/121696040?utm_medium=distribute.pc_relevant. ...

  10. Cesium渲染模块之Command

    1. 引言 Cesium是一款三维地球和地图可视化开源JavaScript库,使用WebGL来进行硬件加速图形,使用时不需要任何插件支持,基于Apache2.0许可的开源程序,可以免费用于商业和非商业 ...