由于第一次打,只能在div2打。(这么好的机会还没AK真是丢人)

T1 Clarke and chemistry

枚举题不解释(我不会告诉你我上来WA了四发的)

T2 Clarke and points

经典题目,计算一下x+y,x-y的最大值和最小值算一下即可。

T3 Clarke and MST

按位贪心,从高到低位尽量放1,用并查集判判是否可行。

---------------------------------------------------------------------

因为我太弱了div2只写完这几道(代码找不到了)。

T4 Clarke and math

这是一个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 ;
}

T5 Clarke and tree

一般涉及到点度数的题目就要用到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的更多相关文章

  1. BestCoder Round #72 (div.2)

    后面的题目补不懂了 暴力 1001 Clarke and chemistry 这题也把我搞死了..枚举系数判断就行了 #include <cstdio> #include <algo ...

  2. CH Round #72树洞[二分答案 DFS&&BFS]

    树洞 CH Round #72 - NOIP夏季划水赛 描述 在一片栖息地上有N棵树,每棵树下住着一只兔子,有M条路径连接这些树.更特殊地是,只有一棵树有3条或更多的路径与它相连,其它的树只有1条或2 ...

  3. BestCoder Round #89 02单调队列优化dp

    1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01  HDU 5944   水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...

  4. BestCoder Round #90 //div all 大混战 一题滚粗 阶梯博弈,树状数组,高斯消元

    BestCoder Round #90 本次至少暴露出三个知识点爆炸.... A. zz题 按题意copy  Init函数 然后统计就ok B. 博弈 题  不懂  推了半天的SG.....  结果这 ...

  5. bestcoder Round #7 前三题题解

    BestCoder Round #7 Start Time : 2014-08-31 19:00:00    End Time : 2014-08-31 21:00:00Contest Type : ...

  6. 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 ...

  7. Bestcoder round #65 && hdu 5592 ZYB's Premutation 线段树

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...

  8. 暴力+降复杂度 BestCoder Round #39 1002 Mutiple

    题目传送门 /* 设一个b[]来保存每一个a[]的质因数的id,从后往前每一次更新质因数的id, 若没有,默认加0,nlogn复杂度: 我用暴力竟然水过去了:) */ #include <cst ...

  9. 贪心 BestCoder Round #39 1001 Delete

    题目传送门 /* 贪心水题:找出出现次数>1的次数和res,如果要减去的比res小,那么总的不同的数字tot不会少: 否则再在tot里减去多余的即为答案 用set容器也可以做,思路一样 */ # ...

随机推荐

  1. VMware Snapshot 工作原理

    VMware中的快照是对VMDK在某个时间点的“拷贝”,这个“拷贝”并不是对VMDK文件的复制,而是保持磁盘文件和系统内存在该时间点的状态,以便在出现故障后虚拟机能够恢复到该时间点.如果对某个虚拟机创 ...

  2. BASH相关

    颜色 http://www.cnblogs.com/lr-ting/archive/2013/02/28/2936792.html http://segmentfault.com/q/10100000 ...

  3. javascript 布尔类型值判断

    javascript中,值非null的对象在if()中都会被判断为true: if([]) {// true} if({}) {// true} if(null) {// false} if(&quo ...

  4. 第十一章 TClientDataSet

    第十一章 TClientDataSet 与TTable.TQuery一样,TClientDataSet也是从TDataSet继承下来的,它通常用于多层体系结构的客户端.TClientDataSet最大 ...

  5. 15.python笔记之psutil模块

    一.psutil模块 1. psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等) ...

  6. fedora 添加其他操作系统到 GRUB 2 菜单

    # yum install os-prober # grub2-mkconfig -o /boot/grub2/grub.cfg

  7. static_cast, dynamic_cast, const_cast

    http://www.cnblogs.com/chio/archive/2007/07/18/822389.html 首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1 ...

  8. Material Design入门

    本文主要包括以下内容 ToolBar的使用 RecyclerView的定义与使用 ToolBar 风格 (style) 界面 (layout) 程序 (java) 首先自定义一个theme,并将App ...

  9. linux svn客户端 常用命令

    查看文件或者目录状态: [root@v01 ~]# svn status online/ #正常情况下没显示 [root@v01 ~]# svn status online/ #如果有变动会有如下显示 ...

  10. 转载——用Mixer API函数调节控制面板的音频设置

    关键词:Mixer函数,控制面板,音频设备调节 如果你用过windows的音频设备,比如播放音乐或者录音,聊天,调节麦克或者声音的大小,以及设置静音,都可以通过控制面板中的音频设置面板来调节,你对于下 ...