3771: Triple

2024-03-27 04:48
文章标签 triple 3771

本文主要是介绍3771: Triple,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

考虑三个多项式 a b c a b c
a a 表示选取一个相同的方案数
b b 表示选取两个相同的方案数
c c 表示选取三个相同的方案数
取一个的方案数即 a a
取两个的方案数即 a2b2 a 2 − b 2
考虑实际上 a2b a 2 − b 算得是排列数,所以需要除以 2 2
同理 可推出三个的方案数即     a33(abc)c6=a33ab+2c6 a 3 − 3 ∗ ( a ∗ b − c ) − c 6 = a 3 − 3 ∗ a ∗ b + 2 ∗ c 6
c++ 代码如下:

#include<bits/stdc++.h>
#define PI acos(-1)
#define rep(i,x,y) for(register int i = x ;i <= y; ++ i)
#define repd(i,x,y) for(register int i = x ;i >= y; -- i)
using namespace std;
typedef long long ll;
template<typename T>inline void read(T&x)
{char c;int sign = 1;x = 0;do { c = getchar(); if(c == '-') sign = -1; }while(!isdigit(c));do { x = x * 10 + c - '0'; c = getchar(); }while(isdigit(c));x *= sign;
}struct cpx
{double x, y;cpx(){}cpx(double a,double b){ x = a,y = b; }cpx operator * (int a) { return cpx(x * a,y * a); }cpx operator / (int a) { return cpx(x / a,y / a); }cpx operator + (cpx a) { return cpx(x + a.x,y + a.y); }cpx operator - (cpx a) { return cpx(x - a.x,y - a.y); }cpx operator * (cpx a) { return cpx(x*a.x-y*a.y,x*a.y+y*a.x); }cpx operator *=(cpx a) { *this = *this * a; }
};const int N = 2e5 + 50;
int R[N],L,n,m,mx;
cpx a[N],b[N],c[N],ans[N];inline void fft(cpx*a,int f)
{rep(i,0,n-1) if(i < R[i]) swap(a[i],a[R[i]]);for(register int i = 1; i < n ; i <<= 1){cpx nw = cpx(cos(PI/i),f * sin(PI/i));for(register int j = 0; j <  n ; j += i << 1){cpx w = cpx(1,0); for(register int k = 0; k < i ; ++k,w *= nw){cpx x = a[j + k],y = w * a[i + j + k];a[j + k] = x + y;a[i + j + k] = x - y;}}}if(f == -1) rep(i,0,n-1) a[i].x /= n;
}int main()
{read(n);rep(i,1,n){int x;read(x);mx = max(mx,x);a[ x ].x = 1;b[x*2].x = 1;c[x*3].x = 1;}m = mx * 3;for(n = 1;n <= m; n <<= 1) ++ L;rep(i,0,n) R[i] = ((R[i>>1])>>1)|((i&1)<<(L-1));fft(a,1); fft(b,1); fft(c,1);rep(i,0,n - 1) ans[i] = a[i] + (a[i]*a[i] - b[i])/2 + (a[i]*a[i]*a[i] - a[i]*b[i]*3 + c[i]*2)/6;fft(ans,-1);rep(i,0,n) if(int(ans[i].x+0.5)) printf("%d %d\n",i,int(ans[i].x+0.5));return 0;
}

这篇关于3771: Triple的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/850978

相关文章

【SPOJ】Triple Sums【FFT】

传送门:【SPOJ】Triple Sums 题目分析: 首先我们不考虑 i<j<k i<j<k这个条件,构造多项式: Y=∑xai \qquad\qquad\qquad Y = \sum x^{a_i} 那么 ai+aj+ak=S ai+aj+ak=S的个数即 xai+aj+ak=S x^{a_i+a_j+a_k=S}的个数,等价于 Y3中xS Y^3中x^S的系数。 然后我们考虑容斥

triple Des加密之ECB加密解密、CBC加密解密

//注意偏移量 package sss; import java.security.Key; import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESedeKeySpec; import javax.crypto

假暴力,cf1168B. Good Triple

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 1168B - Codeforces 二、解题报告 1、思路分析 一眼没思路,打个暴力试试 因为如果 s[l, r] 是一个好字符串,那么s[i, r]一定也是好字符串,其中i < l 那么我们枚举左端点l,找到最近的r,那么l的贡献就是n -

Pair和Triple的最佳实践

在软件开发中,数据结构是至关重要的概念。它们帮助我们以高效和有组织的方式存储和处理数据。在Java语言中,Pair(对)和Triple(三元组)是两个常见的数据结构,它们在不同的场景中都有广泛的应用。本文将详细介绍这两个数据结构的定义、用途、以及它们在Java中的具体应用,旨在帮助读者清晰理解这两个概念并解决可能面临的困惑。 一、Pair的定义与用途 1.1 定义 在计算机科学中,Pair是

利用Triple U.Net结构对冷冻切片HE染色组织学图像进行核实例分割

利用Triple U.Net结构对冷冻切片H&E染色组织学图像进行核实例分割 摘要IntroductionRelated WorksDatasetProposed MethodologyDataset PreparationSegmentation BranchLoss FunctionWatershed Algorithm Nuclei Instance Segmentation

Android性能:Double Buffer双缓冲/Triple Buffer三缓冲丢帧Jank与无丢帧No Jank

Android性能:Double Buffer双缓冲/Triple Buffer三缓冲丢帧Jank与无丢帧No Jank   双缓冲丢帧与无丢帧:     App 连续两帧生产都超过 Vsync 周期,错过 SurfaceFlinger 合成时机),出现掉帧: 与之对应的trace: 三Buffer轮转情况下,基本不会有这种情况的发生,渲染线程一般在 dequeueB

Broadband Network Architectures: Designing and Deploying Triple-Play Services

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。 http://blog.csdn.net/topmvp - topmvp *An in-depth introduction to next-generation triple-play services: components, integration, and business

Triple HDU - 5517 —— 二维树状数组

Given the finite multi-set A of n pairs of integers, an another finite multi-set B of m triples of integers, we define the product of A and B as a multi-set C=A∗B={⟨a,c,d⟩∣⟨a,b⟩∈A, ⟨c,d,e⟩∈B and b=e}

Spoj 8372 Triple Sums

传送门:http://www.spoj.com/problems/TSUM/ 思路:先不管i<j<k这个条件 构造一个多项式A(x)=sigma x^a[i] 那么S=a[i]+a[j]+a[k]的个数就是x^(a[i]+a[j]+a[k]=S)的个数 为了让指数相加,我们把A(x)进行立方 那么个数就是A(x)^3中S次项的系数 然后进行容斥,为了方便,以下省去指数a[i]

NJUST 1923 triple (莫比乌斯反演)

triple Time Limit: 3000MS Memory Limit: 65536KB Description 给出一个整数n,表示1,2,...,n。从这n个数中任意选择3个不同的数字x,y,z,问x,y,z的最大公约数等于m的方案有多少种?(注意:(1,2,3),(1,3,2),(2,1,3),(2,3,1),(3,1,2),(3,2,1)属于同一种方案)