Description

问所有三/二/一元组可能形成的组合.

Sol

FFT.

利用生成函数直接FFT一下,然后就是计算,计算的时候简单的容斥一下.

任意三个-3*两个相同的+2*全部相同的+任意两个-两个相同的+任意一个.

Code

/**************************************************************
Problem: 3771
User: BeiYu
Language: C++
Result: Accepted
Time:1760 ms
Memory:26684 kb
****************************************************************/ #include <bits/stdc++.h>
using namespace std; #define mpr make_pair
#define rr first
#define ii second
typedef pair< double,double > Complex;
const int N = 5e5+50;
const int M = 40000;
const double Pi = M_PI; Complex operator + (const Complex &a,const Complex &b) {
return mpr(a.rr+b.rr,a.ii+b.ii);
}
Complex operator - (const Complex &a,const Complex &b) {
return mpr(a.rr-b.rr,a.ii-b.ii);
}
Complex operator * (const Complex &a,const Complex &b) {
return mpr(a.rr*b.rr-a.ii*b.ii,a.rr*b.ii+a.ii*b.rr);
}
Complex operator * (const Complex &a,const int &b) {
return mpr(a.rr*b,a.ii*b);
}
Complex operator / (const Complex &a,const double &b) {
return mpr(a.rr/b,a.ii/b);
}
int n;
Complex a[N],b[N],c[N];
int ans[N]; void Rev(Complex a[]) {
for(int i=0,j=0;i<n;i++) {
if(i>j) swap(a[i],a[j]);
for(int k=n>>1;(j^=k)<k;k>>=1);
}
}
void DFT(Complex a[],int r) {
Rev(a);
for(int i=2;i<=n;i<<=1) {
Complex wi=mpr(cos(2.0*Pi/i),r*sin(2.0*Pi/i));
for(int k=0;k<n;k+=i) {
Complex w=mpr(1.0,0.0);
for(int j=k;j<k+i/2;j++) {
Complex t1=a[j],t2=w*a[j+i/2];
a[j]=t1+t2,a[j+i/2]=t1-t2;
w=w*wi;
}
}
}if(r==-1) for(int i=0;i<n;i++) a[i].rr/=n;
}
void FFT(Complex a[],Complex b[],Complex c[]) {
DFT(a,1),DFT(b,1);
for(int i=0;i<n;i++) c[i]=a[i]*b[i];
DFT(c,-1);
}
void init(int x) {
for(n=1;n<x;n<<=1);
}
void Print(Complex a[]) {
for(int i=0;i<n;i++) if((int)(a[i].rr+0.5)>=1) printf("%d %d\n",i,int(a[i].rr+0.5));
}
int main() {
int l;
cin>>l;
for(int i=1,x;i<=l;i++) cin>>x,a[x].rr+=1.0,b[x*2].rr+=1.0,c[x*3].rr+=1.0;
init(M*3); DFT(a,1),DFT(b,1),DFT(c,1);
for(int i=0;i<n;i++) a[i]=(a[i]*a[i]*a[i]-a[i]*b[i]*3+c[i]*2)/6.0+(a[i]*a[i]-b[i])/2.0+a[i];
DFT(a,-1); Print(a);
return 0;
}

  

BZOJ 3771: Triple的更多相关文章

  1. [BZOJ 3771] Triple(FFT+容斥原理+生成函数)

    [BZOJ 3771] Triple(FFT+生成函数) 题面 给出 n个物品,价值为别为\(w_i\)且各不相同,现在可以取1个.2个或3个,问每种价值和有几种情况? 分析 这种计数问题容易想到生成 ...

  2. bzoj 3771 Triple FFT 生成函数+容斥

    Triple Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 847  Solved: 482[Submit][Status][Discuss] Desc ...

  3. bzoj 3771 Triple——FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3771 把方案作为系数.值作为指数,两项相乘就是系数相乘.指数相加,符合意义. 考虑去重.先自 ...

  4. bzoj 3771 Triple —— FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3771 令多项式的系数是方案数,次数是值: 设 a(x) 为一个物品的多项式,即 a[w[i] ...

  5. BZOJ 3771: Triple [快速傅里叶变换 生成函数 容斥原理]

    题意:n个物品,可以用1/2/3个不同的物品组成不同的价值,求每种价值有多少种方案(顺序不同算一种) [生成函数]: 构造这么一个多项式函数g(x),使得n次项系数为a[n]. 普通型生成函数用于解决 ...

  6. BZOJ 3771 Triple FFT+容斥原理

    解析: 这东西其实就是指数型母函数? 所以刚开始读入的值我们都把它前面的系数置为1. 然后其实就是个多项式乘法了. 最大范围显然是读入的值中的最大值乘三,对于本题的话是12W? 用FFT优化的话,达到 ...

  7. BZOJ.3771.Triple(母函数 FFT 容斥)

    题目链接 \(Description\) 有\(n\)个物品(斧头),每个物品价值不同且只有一件,问取出一件.两件.三件物品,所有可能得到的价值和及其方案数.\((a,b),(b,a)\)算作一种方案 ...

  8. BZOJ 3771: Triple(生成函数 FFT)

    Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 911  Solved: 528[Submit][Status][Discuss] Description ...

  9. BZOJ 3771 Triple ——FFT

    直接暴力卷积+统计就可以了. 去重比较复杂. 其实也不复杂,抄吧! 反正AC了. #include <map> #include <cmath> #include <qu ...

随机推荐

  1. [LeetCode] Palindrome Permutation II 回文全排列之二

    Given a string s, return all the palindromic permutations (without duplicates) of it. Return an empt ...

  2. [LeetCode] Strobogrammatic Number III 对称数之三

    A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside ...

  3. 简单的浏览器调试——console命令

    一.显示信息 <script type="text/javascript"> console.log('hello'); console.info('信息'); con ...

  4. 【WPF】Combobox指定选中值用selectedValue不是很灵的时候,

    wpf combobox 指定选中的值,前题,combobox是通过数据库绑定的ItemsSource:所以再指定的时候用selectValue不是很成功!我的解决方法是 生成一个字典,办值和索引对应 ...

  5. Block常用方法以及注意事项

    1. ViewController间传递数据 2. Block的@property必须定义为copy

  6. 远程桌面时plsql的复制粘贴功能失效

    解决办法:重新启动远程桌面上的rdpclip进程就可以复制粘贴了,但是每次重开远程桌面都会出现同样的问题.可以rdpclip这个设置成开机启动.

  7. 【转】MipMap

    原文地址http://www.cppblog.com/wc250en007/archive/2011/08/06/152653.html 首先从MIPMAP的原理说起,它是把一张贴图按照2的倍数进行缩 ...

  8. Java相关书籍分享

    Java核心技术(卷1):基础知识(原书第9版) [Core Java Volume I-Fundamentals (Ninth Edition)].pdf Java核心技术(卷2):高级特性(原书第 ...

  9. py-faster-rcnn搭配pycharm使用

    先在ubuntu下配置好cuda.cudnn以及py-faster-rcnn,然后安装pycharm. 打开pycharm看py-faster-rcnn代码,import处各种红色下划曲线,提示报错. ...

  10. linux安装apache

    我的linux是用阿里云上的,版本是CentOS 6.5 apache依赖于apr.apr-util和pcre,所以需要先安装这三个 apr(包含apr.apr-util和apr-iconv)是apa ...