题意:给你一个首项为1的n阶方程(n<=8),求出方程的无理数的根: #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <iostream> #include <cmath> #include <queue> #include <vector> #define MM(a,b) mem…
Irrational Roots http://acm.hust.edu.cn/vjudge/contest/view.action?cid=101594#problem/F [题意]: 判断一个整系数高阶方程的无理根的个数. [解题思路]: 定理:如果方程f(x)=0的系数都是整数,那么方程有理根仅能是这样的分数p/q,其分子p是方程常数项的约数,分母q是方程最高次项的约数. 这里最高次系数为1,那么有理根就一定为整数. 题目给定了根的范围,枚举整数判断是为根即可. 重根判断:求导直到导数不为…
CF Round250 E. The Child and Binary Tree 题意:n种权值集合C, 求点权值和为1...m的二叉树的个数, 形态不同的二叉树不同. 也就是说:不带标号,孩子有序 \(n,m \le 10^5\) sro vfk picks orz 和卡特兰数很像啊,\(f_i\)权值为i的方案数,递推式 \[ f[i] = \sum_{i\in C} \sum_{j=0}^{m-i}f[j]f[n-i-j] \] 用OGF表示他 \[ C(x)=\sum_{i\in C}x…
题目大意 一行有\(n\)个球,现在将这些球分成\(k\) 组,每组可以有一个球或相邻两个球.一个球只能在至多一个组中(可以不在任何组中).求对于\(1\leq k\leq m\)的所有\(k\)分别有多少种分组方法. 答案对\(998244353\)取模. \(n\leq {10}^9,m<2^{19}\) 题解 因为\(k>n\)的项都是\(0\),所以我们钦定\(m\leq n\) 考虑DP. 记\(f_{i,j}\)为前\(i\)个球分为\(j\)组的方案数. \[ f_{i,j}=f…
题目大意 考虑一个含有\(n\)个互异正整数的序列\(c_1,c_2,\ldots ,c_n\).如果一棵带点权的有根二叉树满足其所有顶点的权值都在集合\(\{c_1,c_2,\ldots ,c_n\}\)中,我们的小朋友就会将其称作神犇的.并且他认为,一棵带点权的树的权值,是其所有顶点权值的总和. 给出一个整数\(m\),你能对于任意的\(s(1\leq s\leq m)\)计算出权值为\(s\)的神犇二叉树的个数吗? 我们只需要知道答案关于\(998244353\)取模后的值. \(n,m\…
设f(n)为权值为n的神犇二叉树个数.考虑如何递推求这个东西. 套路地枚举根节点的左右子树.则f(n)=Σf(i)f(n-i-cj),cj即根的权值.卷积的形式,cj也可以通过卷上一个多项式枚举.可以考虑生成函数. 设F(x)为f(n)的生成函数,G(x)为c(n)的生成函数,G(x)中含有xa项表示存在ci=a.于是可得F(x)=F2(x)G(x)+1.+1是因为枚举根的权值时没有考虑空树即根没有权值的情况. 可以解出F(x)={1±√[1-4G(x)]}/2G(x)=2/{1±√[1-4G(…
首先,我们构造一个函数$G(x)$,若存在$k∈C$,则$[x^k]G(x)=1$. 不妨设$F(x)$为最终答案的生成函数,则$[x^n]F(x)$即为权值为$n$的神犇二叉树个数. 不难推导出,$[x^n]F(x)=\sum_{i=0}^{n}[x^i]G(x)\sum_{j=0}^{n-i}[x^j]F(j)\times [x^{n-j-i}]F(n-j-i)$. (这个式子的意思就是说,不妨设当前根节点的权值为i,然后枚举左右两个子树的权值) 这个式子显然可以通过动规的方式去推,从而得出…
题面 传送门 题解 首先你得会多项式开根->这里 其次你得会解形如 \[x^2\equiv a \pmod{p}\] 的方程 这里有两种方法,一个是\(bsgs\)(这里),还有一种是\(Cipolla\)(这里)(不过这个只能用来解二次剩余就是了) 代码里留着的是\(bsgs\),注释掉的是\(Cipolla\) 如果用\(Cipolla\)的话注意这里需要求的是较小的那个解 //minamoto #include<bits/stdc++.h> #include<tr1/unor…
FFT #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> #include<algorithm> #define maxn 1000005 using namespace std; inline int read() { ,f=;char ch=getchar(); ; +ch-'; return x*f; }…
生成函数又有奇妙的性质. $F(x)=C(x)*F(x)*F(x)+1$ 然后大力解方程,得到一个带根号的式子. 多项式开根有解只与常数项有关. 发现两个解只有一个是成立的. 然后多项式开根.求逆. 不太会算复杂度为什么是$n\log {n}$的. 开根号里套了一个求逆,不应该是两个$\log$? #include <map> #include <cmath> #include <queue> #include <cstdio> #include <c…