這題是均分紙牌求方案數

我們可以分2種情況討論:

1.當前面部分的平均值>=現在我們要的值

那麼我們可以把所有牌都放到第i個點,現在若有k張牌,則要把k−i∗avek-i*avek−i∗ave張牌放到後面

對答案的貢獻為c(a[i],k−i∗ave)c(a[i],k-i*ave)c(a[i],k−i∗ave),要更新現在的元素值

2.當前面部分平均值<現在我們要的值

那麼我們可以從後面抓i∗ave−ki*ave-ki∗ave−k張牌

由於我們要讓所有部分有aveaveave張牌,所以我們後面需要有ave+i∗ave−kave+i*ave-kave+i∗ave−k張牌,才可以讓抓牌後這部分有aveaveave張牌

所以對答案的貢獻為c((i+1)∗ave−s[i],i∗ave−s[i])c((i+1)*ave-s[i],i*ave-s[i])c((i+1)∗ave−s[i],i∗ave−s[i])

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mo 998244353ll
ll t,n,a[1010],jc[1000010],ijc[1000010],s[1010];
ll qp(ll x,ll y){
	ll r=1;
	while(y){
		if(y&1)r=r*x%mo;
		x=x*x%mo;
		y>>=1;
	}
	return r;
}
void get(){
	jc[0]=1;
	for(ll i=1;i<=1000005;i++)
		jc[i]=jc[i-1]*i%mo;
	ijc[0]=1;
	for(ll i=1;i<=1000005;i++)
		ijc[i]=ijc[i-1]*qp(i,mo-2)%mo;
}
ll c(ll x,ll y){
	return jc[x]*ijc[x-y]%mo*ijc[y]%mo;
}
int main(){
	freopen("gwent.in","r",stdin);
	freopen("gwent.out","w",stdout);
	scanf("%lld",&t);
	get();
	while(t--){
		scanf("%lld",&n);
		for(ll i=1;i<=n;i++)
			scanf("%lld",&a[i]);
		for(ll i=1;i<=n;i++)
			s[i]=s[i-1]+a[i];
		ll k=s[n]/n,ans=1;
		for(ll i=1;i<=n;i++){
			ll va=s[i]-k*i;
			if(va>=0){
				ans=ans*c(a[i],va)%mo;
				a[i]-=va;
				a[i+1]+=va;
			}
			else ans=ans*c(-va+k,-va)%mo;
		}
		printf("%lld\n",ans);
	}
}

jzoj5945的更多相关文章

随机推荐

  1. Castle ActiveRecord学习(四)延迟加载、分页查询、where条件

    一.延迟加载 //用户发布的主题,一对多:Table:外键表:ColumnKey:外键:Lazy:延迟加载:Cascade:级联操作(级联删除) [HasMany(typeof(ThemeInfo), ...

  2. Phalcon Framework的MVC结构及启动流程分析

    目前的项目中选择了Phalcon Framework作为未来一段时间的核心框架.技术选型的原因会单开一篇Blog另说,本次优先对Phalcon的MVC架构与启动流程进行分析说明,如有遗漏还望指出. P ...

  3. 使用kindeditor 4.1.7 编辑器 注意事项,上传图片失败 问题 ,

    <script charset="utf-8" src="editor/kindeditor.js"></script> <scr ...

  4. 2018.09.19 atcoder Snuke's Subway Trip(最短路)

    传送门 就是一个另类最短路啊. 利用颜色判断当前节点的最小花费的前驱边中有没有跟当前的边颜色相同的. 如果有这条边费用为0,否则费用为1. 这样跑出来就能ac了. 代码: #include<bi ...

  5. Fiddler实战深入研究(二)[转载]

    Fiddler实战深入研究(二) 阅读目录 Fiddler不能捕获chrome的session的设置 理解数据包统计 请求重定向(AutoResponder) Composer选项卡 Filters选 ...

  6. 《C++ Primer (V4)》读书笔记

    第2章 变量和基本类型 1.(P56)如果使用class关键字来定义类,那么定义在第一个访问标号前的任何成员都隐式指定为private:如果使用struct关键字,那么这些成员都是public. 第7 ...

  7. 前端程序员经常忽视的一个 JavaScript 面试题

    题目 function Foo() { getName = function () { alert (1); }; return this; } Foo.getName = function () { ...

  8. 用eclipse创建maven的webapp项目

    来自http://www.cnblogs.com/candle806/p/3439469.html和http://blog.csdn.net/chuyuqing/article/details/288 ...

  9. 201709019工作日记--Java中的各种锁--未解决

    1. Syncronized与ReentrantLock Synchronized比ReentrantLock进java标准早,因此一开始大家都是用它.相当于Java提供了一种封装的互斥锁机制,对于用 ...

  10. Windows 下使用 GCC

    MinGw 是 Minimal GNU on Windows 的缩写,允许在 GNU/Linux 和 Windows 平台生成本地的 Windows 程序而不需要第三方运行时库.本文主要介绍 MinG ...