BestCoder Round #72
由于第一次打,只能在div2打。(这么好的机会还没AK真是丢人)
枚举题不解释(我不会告诉你我上来WA了四发的)
经典题目,计算一下x+y,x-y的最大值和最小值算一下即可。
按位贪心,从高到低位尽量放1,用并查集判判是否可行。
---------------------------------------------------------------------
因为我太弱了div2只写完这几道(代码找不到了)。
这是一个Dirichlet卷积,是满足结合律的,于是快速幂即可。(出题人明明可以把k出成10^9的却出成了10^5于是我没想到,差评)
#include<cstdio>
#include<cctype>
#include<queue>
#include<cstring>
#include<algorithm>
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define ren for(int i=first[x];i!=-1;i=next[i])
using namespace std;
inline int read() {
int x=,f=;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-;
for(;isdigit(c);c=getchar()) x=x*+c-'';
return x*f;
}
const int maxn=;
const int mod=;
typedef long long ll;
struct Seq {
ll A[maxn];
}A,ans;
int n,k;
ll tmp[maxn];
void mul(Seq& A,Seq& B) {
rep(i,,n) for(int j=i;j<=n;j+=i) (tmp[j]+=A.A[i]*B.A[j/i])%=mod;
rep(i,,n) A.A[i]=tmp[i],tmp[i]=;
}
void pow(Seq& A,int m) {
Seq T;T=A;m--;
while(m) {
if(m&) mul(A,T);
mul(T,T);m>>=;
}
}
void solve() {
n=read(),k=read();
rep(i,,n) A.A[i]=;
rep(i,,n) ans.A[i]=read();
pow(A,k);mul(ans,A);
rep(i,,n) printf("%lld%c",ans.A[i],i==n?'\n':' ');
}
int main() {
dwn(T,read(),) solve();
return ;
}
一般涉及到点度数的题目就要用到prufer序列。
prufer序列的入门题目:BZOJ1005: [HNOI2008]明明的烦恼
因为每个prufer序列与一棵无根树是一一对应的,
所以这样一个问题:
有多少大小为K的无根树满足N个条件中的K个(即每个点的度数<=d[i])
和这个问题:
有多少长度为K-2的序列满足N个条件中的K个(即每个数在序列中出现的次数<d[i])
是等价的。
设f[i][j][k]表示考虑前i个限制,已经满足了j个限制的长度为k的序列有多少个。
1.不满足第i条限制: f[i][j][k]=f[i-1][j][k]
2.满足第i条性质: 则我们枚举插入数字i之前序列的长度k2,那么我们有k2 + 1个位置可以插入数字i,方案数为x1+x2+---+x(k2 + 1) = k - k2方程的解的个数*f[i-1][j-1][k2],即C(k,k-k2)*f[i-1][j-1][k2]。
问题在O(N^4)的时间里完满解决。
(用生成函数和FFT可实现O(N^3logN)的效率)
#include<cstdio>
#include<cctype>
#include<queue>
#include<cstring>
#include<algorithm>
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define ren for(int i=first[x];i!=-1;i=next[i])
using namespace std;
inline int read() {
int x=,f=;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-;
for(;isdigit(c);c=getchar()) x=x*+c-'';
return x*f;
}
const int maxn=;
const int mod=;
typedef long long ll;
ll C[maxn][maxn],f[maxn][maxn][maxn];
int n,d[maxn];
void solve() {
memset(f,,sizeof(f));
n=read();
rep(i,,n) d[i]=read();
f[][][]=;
rep(i,,n) rep(j,,i) rep(k,,n-) {
f[i][j][k]=f[i-][j][k];
if(j) rep(k2,max(,k+-d[i]),k) (f[i][j][k]+=f[i-][j-][k2]*C[k][k-k2])%=mod;
}
rep(i,,n) printf("%I64d%c",f[n][i][max(i-,)],i==n?'\n':' ');
}
int main() {
C[][]=;
rep(i,,) {
C[i][]=C[i][i]=;
rep(j,,i-) C[i][j]=(C[i-][j]+C[i-][j-])%mod;
}
dwn(T,read(),) solve();
return ;
}
BestCoder Round #72的更多相关文章
- BestCoder Round #72 (div.2)
后面的题目补不懂了 暴力 1001 Clarke and chemistry 这题也把我搞死了..枚举系数判断就行了 #include <cstdio> #include <algo ...
- CH Round #72树洞[二分答案 DFS&&BFS]
树洞 CH Round #72 - NOIP夏季划水赛 描述 在一片栖息地上有N棵树,每棵树下住着一只兔子,有M条路径连接这些树.更特殊地是,只有一棵树有3条或更多的路径与它相连,其它的树只有1条或2 ...
- BestCoder Round #89 02单调队列优化dp
1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01 HDU 5944 水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...
- BestCoder Round #90 //div all 大混战 一题滚粗 阶梯博弈,树状数组,高斯消元
BestCoder Round #90 本次至少暴露出三个知识点爆炸.... A. zz题 按题意copy Init函数 然后统计就ok B. 博弈 题 不懂 推了半天的SG..... 结果这 ...
- bestcoder Round #7 前三题题解
BestCoder Round #7 Start Time : 2014-08-31 19:00:00 End Time : 2014-08-31 21:00:00Contest Type : ...
- Bestcoder round #65 && hdu 5593 ZYB's Tree 树形dp
Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...
- Bestcoder round #65 && hdu 5592 ZYB's Premutation 线段树
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...
- 暴力+降复杂度 BestCoder Round #39 1002 Mutiple
题目传送门 /* 设一个b[]来保存每一个a[]的质因数的id,从后往前每一次更新质因数的id, 若没有,默认加0,nlogn复杂度: 我用暴力竟然水过去了:) */ #include <cst ...
- 贪心 BestCoder Round #39 1001 Delete
题目传送门 /* 贪心水题:找出出现次数>1的次数和res,如果要减去的比res小,那么总的不同的数字tot不会少: 否则再在tot里减去多余的即为答案 用set容器也可以做,思路一样 */ # ...
随机推荐
- windows下的C/C++精确计时
由于我要测试线性筛法的速度,用上了C/C++精确计时.此时传统的clock()方法不够用了,我们需要另一种测量的办法,即CPUTicks/CPUFreq.如何实现呢? #include <win ...
- 深入了解PooledConnectionFactory CachingConnectionFactory Sin
深入理解PooledConnectionFactory CachingConnectionFactory SingleConnectionFactory PooledConnectionFactory ...
- HTML模仿桌面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Java for LeetCode 025 Reverse Nodes in k-Group
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...
- codeforces B. Color the Fence 解题报告
题目链接:http://codeforces.com/problemset/problem/349/B 题目意思:给定v升的颜料和9个需要花费ad 升的颜料,花费ad 升的颜料意味着得到第d个数字,现 ...
- MFC 颜色选择对话框、颜色按钮
COLORREF color=RGB(0,255,0); unsigned char r=GetRValue(color); unsigned char g=GetGValue(color); uns ...
- Android涉及到的设计模式
转载地址:http://blog.csdn.net/dengshengjin2234/article/details/8502097 1.适配器模式:ListView或GridView的Adapter ...
- struts2 标签问题----escape="false" 这个属性
1.在编程过程中,会遇到这个动西,escape="false" eg: <s:fielderror escape="false"/>-------& ...
- 菜鸟学Linux命令:cat命令 查看文件内容
cat命令的用途是连接文件或标准输入并打印. 这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. Linux下查看文件内容的方式很多:vi ...
- go编写简单的web服务器
package main import ( "fmt" "log" "net/http" "strings" ) //h ...