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容器也可以做,思路一样 */ # ...
随机推荐
- 【Hibernate】Hibernate系列7之二级缓存
二级缓存 7.1.概述 7.2.配置方法
- Eclipse 输入提示设置
提升eclipse工具的效率是提升开发效率很重要的一个环节,然而java函数之多你不可能完全记住.eclipse默认打个“.”号后会有相应的提示,然而这略显笨拙.只需要对eclipse进行简单的配置便 ...
- Java for LeetCode 173 Binary Search Tree Iterator
Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ro ...
- codeforces C. Fixing Typos 解题报告
题目链接:http://codeforces.com/problemset/problem/363/C 题目意思:纠正两种类型的typos.第一种为同一个字母连续出现3次以上(包括3次):另一种为两个 ...
- HDU 2147 kiki's game(博弈)
kiki's game Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d & %I64u Submit S ...
- Java性能优化权威指南-读书笔记(五)-JVM性能调优-吞吐量
吞吐量是指,应用程序的TPS: 每秒多少次事务,QPS: 每秒多少次查询等性能指标. 吞吐量调优就是减少垃圾收集器消耗的CPU周期数,从而将更多的CPU周期用于执行应用程序. CMS吞吐调优 CMS包 ...
- linux 禁止ping
[root@86 sysconfig]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all #关闭ping [root@86 sysconfig] ...
- 拷贝Java项目报错
经常需要将一个项目,导出,然后发给同事,或者是自己用另一个Eclipse工具打开. 这时,导入项目后,就会出现各种各样的问题.大牛笔记:www.weixuehao.com 代码相同,环境不同,主要是修 ...
- SqlHelper类的使用
SqlHelper.cs public static class SqlHelper { private static readonly string conStr = ConfigurationMa ...
- M方法和D方法的区别
M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...