#3771. Triple(生成函数 + 容斥)

#3771. Triple

考虑只有一个损失时,损失值的生成函数为A(x)A(x)A(x)

如果不考虑无序方案,有两个损失的生成函数为B(x)=A(x)A(x)B(x) =A(x)A(x)B(x)=A(x)A(x),同理有三个的时候C(x)=A(x)A(x)A(x)C(x) = A(x)A(x)A(x)C(x)=A(x)A(x)A(x)

考虑如何得到无序方案:

选择两个的时候:

ababab的排列有ab,baab, baab,ba两种,我们先减去aa,bbaa, bbaa,bb的然后除以二就是B(x)B(x)B(x)了,所以B(x)=A(x)A(x)−D(x)2B(x) = \frac{A(x)A(x) - D(x)}{2}B(x)=2A(x)A(x)D(x)

选择三个的时候:

abcabcabc的排列共有666种,同样的我们先减去aaa,bbb,cccaaa, bbb, cccaaa,bbb,ccc这样相同的,然后除以666就是C(x)=A(x)A(x)A(x)−E(x)2C(x) = \frac{A(x)A(x)A(x) - E(x)}{2}C(x)=2A(x)A(x)A(x)E(x)

#include <bits/stdc++.h>using namespace std;struct Complex {double r, i;Complex(double _r = 0, double _i = 0) : r(_r), i(_i) {}
};Complex operator + (const Complex &a, const Complex &b) {return Complex(a.r + b.r, a.i + b.i);
}Complex operator - (const Complex &a, const Complex &b) {return Complex(a.r - b.r, a.i - b.i);
}Complex operator * (const Complex &a, const Complex &b) {return Complex(a.r * b.r - a.i * b.i, a.r * b.i + a.i * b.r);
}Complex operator / (const Complex &a, const Complex &b) {return Complex((a.r * b.r + a.i * b.i) / (b.r * b.r + b.i * b.i), (a.i * b.r - a.r * b.i) / (b.r * b.r + b.i * b.i));
}Complex operator * (const Complex &a, const double &b) {return Complex(a.r * b, a.i * b);
}typedef long long ll;const int N = 3e5 + 10;int r[N];Complex x[N], y[N], z[N], ans[N];void get_r(int lim) {for (int i = 0; i < lim; i++) {r[i] = (i & 1) * (lim >> 1) + (r[i >> 1] >> 1);}
}void FFT(Complex *f, int lim, int rev) {for (int i = 0; i < lim; i++) {if (i < r[i]) {swap(f[i], f[r[i]]);}}const double pi = acos(-1.0);for (int mid = 1; mid < lim; mid <<= 1) {Complex wn = Complex(cos(pi / mid), rev * sin(pi / mid));for (int len = mid << 1, cur = 0; cur < lim; cur += len) {Complex w = Complex(1, 0);for (int k = 0; k < mid; k++, w = w * wn) {Complex x = f[cur + k], y = w * f[cur + mid + k];f[cur + k] = x + y, f[cur + mid + k] = x - y;}}}if (rev == -1) {for (int i = 0; i < lim; i++) {f[i].r /= lim;}}
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);int n;scanf("%d", &n);for (int i = 1, a; i <= n; i++) {scanf("%d", &a);x[a].r++, y[a + a].r++, z[a + a + a].r++;} int lim = 1;while (lim <= 3 * 40000) {lim <<= 1;}get_r(lim);FFT(x, lim, 1), FFT(y, lim, 1), FFT(z, lim, 1);for (int i = 0; i < lim; i++) {ans[i] = ans[i] + (x[i] * x[i] * x[i] - 3.0 * x[i] * y[i] + 2 * z[i]) * (1.0 / 6.0);ans[i] = ans[i] + (x[i] * x[i] - y[i]) * (1.0 / 2);ans[i] = ans[i] + x[i];}FFT(ans, lim, -1);for (int i = 0; i < lim; i++) {int res = int(ans[i].r + 0.5);if (res) {printf("%d %d\n", i, res);}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计数质数

题目描述 统计所有小于非负整数 n 的质数的数量。 示例: 输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。解法 思路1&#xff1a;暴力法 /***暴力法* 时间复杂度O(n2)* 空间复杂度(O(1))* param n* return*/ public int countPrimes(int n) {if(n&…

做“是非题”的正确姿势

这里是Z哥的个人公众号每周五11&#xff1a;45 按时送达有时也会有感而发&#xff0c;来加个餐&#xff5e;我的第「107」篇原创敬上大家好&#xff0c;我是Z哥。这两天中国男篮的事&#xff0c;让我有感而发。不知道你有没有留意到&#xff0c;我们身边总有类似下面这样的事情…

3的幂

题目描述 给定一个整数&#xff0c;写一个函数来判断它是否是 3 的幂次方。 示例 1: 输入: 27 输出: true示例 2: 输入: 0 输出: false示例 3: 输入: 9 输出: true示例 4: 输入: 45 输出: false进阶&#xff1a; 你能不使用循环或者递归来完成本题吗&#xff1f; 解法1&a…

E. The Child and Binary Tree(生成函数 + 多项式)

E. The Child and Binary Tree 不难写出一个递推式fn∑i1ngi∑j0n−ifjfn−i−jf_n \sum\limits_{i 1} ^{n}g_i \sum\limits_{j 0} ^{n - i}f_jf_{n - i - j}fn​i1∑n​gi​j0∑n−i​fj​fn−i−j​&#xff0c;其中gig_igi​表示ccc中有没有iii这个数。 设F(x)F(x)F(x)…

依赖倒置原则(DIP)、控制反转(IoC)、依赖注入(DI)(C#)

象的控制权交由配置文件控制&#xff0c;然后根据配置文件中的信息&#xff08;程序集类型&#xff09;&#xff0c;通过反射来获取对象&#xff0c;而不是直接new对象&#xff0c;这也是控制反转的一种体现。IoC容器会连接程序中的所有模块&#xff0c;模块将所需对象的控制权…

汉明距离

题目描述 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y&#xff0c;计算它们之间的汉明距离。 注意&#xff1a; 0 ≤ x, y < 231. 示例: 输入: x 1, y 4输出: 2解释: 1 (0 0 0 1) 4 (0 1 0 0)↑ ↑上面的箭头指…

P3978 [TJOI2015]概率论(生成函数)

P3978 [TJOI2015]概率论 设fif_ifi​表示节点数为iii的二叉树有多少&#xff0c;gig_igi​表示节点数为iii的二叉树有多少叶子节点。 fn∑i0n−1fifn−1−if_n \sum\limits_{i 0} ^{n - 1}f_if_{n - 1 - i}fn​i0∑n−1​fi​fn−1−i​&#xff0c;f01f_0 1f0​1。 对于g…

四种为HttpClient添加默认请求报头的解决方案

HttpClient在Web调用中具有广泛的应用&#xff0c;而为它添加默认请求头是我们经常遇到的需求&#xff0c;本文介绍4种为HttpClient添加默认请求头的方式。直接在创建的HttpClient对象的DefaultRequestHeaders集合中添加报头。class Program{static Task Main()> SendAsync…

Java位运算

java中位运算^,&,<<,>>,<<<,>>>总结 1.^(亦或运算) &#xff0c;针对二进制&#xff0c;相同的为0&#xff0c;不同的为1 public static void main(String[] args) {System.out.println("2^3运算的结果是 :"(2^3));//打印的结果是…

#3456. 城市规划(生成函数,多项式求逆)

#3456. 城市规划 设fnf_nfn​为nnn个点的的点的简单无向连通图数目&#xff0c;gng_ngn​为nnn个点的简单无向图个数&#xff08;不要求联通&#xff09;。 对于gng_ngn​显然有gn2n(n−1)2g_n 2 ^{\frac{n(n - 1)}{2}}gn​22n(n−1)​&#xff0c;共有n(n1)2\frac{n(n 1)}…

【盛派内部分享资料】本期主题:使用JavaScript HTML CSS构建跨平台桌面应用

先上录制视频友情提示&#xff1a;如果公众号内视频无法显示高清视频&#xff0c;您也可以在小程序内观看高清视频&#xff0c;点击下方按钮观看&#xff1a;【盛派内部分享资料】本期主题&#xff1a;使用JavaScript HTML CSS构建跨平台桌面应用本次活动由盛派技术人员伏允坤主…

负载均衡及负载均衡器

负载均衡在分布式系统中&#xff0c;负载均衡&#xff08;load balancing&#xff09;是一种有效的将网络请求分配到多个服务器的过程。通过将负载进行负载均衡&#xff0c;可以有效地改进系统响应时间&#xff0c;提高系统的可用性。随着系统变的愈发复杂&#xff0c;用户增多…

Sequence II (HDU 5919)(主席树)

Sequence II 题目大意是有mmm次询问&#xff0c;每次询问一段区间[l,r][l, r][l,r]&#xff0c;从左到右&#xff0c;如果这个数是在这个区间第一次出现&#xff0c;则记录下其下标&#xff0c; 我们会得到一个新的数组&#xff0c;要求这个数组的中位数是什么。 考虑使用主…

VS Code 摸鱼插件开发小记

插件地址&#xff1a;https://marketplace.visualstudio.com/items?itemNamebugbreeder.vscode-readhub原文链接&#xff1a;https://github.com/alex-yh99/vscode-readhub/blob/master/docs/develop-note.md一、关于插件在 VSCode 中快捷查阅科技动态、开发者资讯等 Readhub …

帕斯卡三角形杨辉三角

给定一个非负整数 numRows&#xff0c;生成杨辉三角的前 numRows 行。 在杨辉三角中&#xff0c;每个数是它左上方和右上方的数的和。 示例: 输入: 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1] ]解法 思路1&#xff1a;循环遍历 public List<List<Integer>…

ICPC 南昌现场赛 K:Tree(dsu on tree + 动态开点线段树)

Tree 让我们找满足一下五个条件的(x,y(x, y(x,y)点对有多少&#xff1a; x≠yx \neq yx​yxxx不是yyy的祖先yyy不是xxx的祖先dis(x,y)≤kdis(x, y)\leq kdis(x,y)≤kzzz是x,yx, yx,y的最近公共祖先&#xff0c;valuexvaluey2valuezvalue_x value_y 2value_zvaluex​valuey…

缺失数字

题目描述 给定一个包含 0, 1, 2, …, n 中 n 个数的序列&#xff0c;找出 0 … n 中没有出现在序列中的那个数。 示例 1: 输入: [3,0,1] 输出: 2示例 2: 输入: [9,6,4,2,3,5,7,0,1] 输出: 8解法 思路1&#xff1a;使用额外数组存储0~n&#xff0c;遍历数组&#xff0c;缺失…

9月数据库排行:Microsoft SQL Server分数罕见下滑

DB-Engines 数据库流行度排行榜 9 月更新已发布&#xff0c;排名前二十如下&#xff1a;明显能看出来&#xff0c;整体排名和上个月的保持一致。而上个月出现分数下跌的 PostgreSQL 和 MongoDB 终于“回归正道”&#xff0c;分数有了稍微的上升。与上个月相比&#xff0c;Postg…

P4175 [CTSC2008]网络管理(树状数组套主席树)

P4175 [CTSC2008]网络管理 每次询问两点间的第kkk大&#xff0c;考虑建立nnn棵主席树&#xff0c;每棵主席树记录的是从根节点到当前节点的状态&#xff0c; 由于主席树是一种类似前缀和的数据结构&#xff0c;可以使用差分的方式得到(u,v)(u, v)(u,v)点对之间的主席树为uv−…

Exceptionless使用介绍

一.Exceptionless介绍Exceptionless专注于.net平台提供实时错误和日志报告。主要包括&#xff1a;错误通知、智能分组异常、详细错误报告堆栈跟踪、支持离线、UI查看重要错误和确定优先级、仪表板上的统计信息和趋势、对异常标记为已修复&#xff0c;监视回归、将事件标记为关键…