由于第一次打,只能在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. 【持续集成】[Jenkins]Job中如何传递自定义变量

    [Jenkins]Job中如何传递自定义变量 来自dweiwei   2015-06-27 18:37:19|  分类: 自动化测试 |举报 |字号大中小 订阅 用微信  “扫一扫” 将文章分享到朋友 ...

  2. Minimum Path Sum

    Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...

  3. (转)SQL Server 中WITH (NOLOCK)浅析

    概念介绍 开发人员喜欢在SQL脚本中使用WITH(NOLOCK), WITH(NOLOCK)其实是表提示(table_hint)中的一种.它等同于 READUNCOMMITTED . 具体的功能作用如 ...

  4. [Java] Java 打包成jar包 和 解压jar包

    解压jar包 jar xf xxx.jar 打包成jar包 方法一:通过jar命令 jar命令的用法: 下面是jar命令的帮助说明: 用法:jar {ctxui}[vfm0Me] [jar-file] ...

  5. CUDA学习笔记(三)——CUDA内存

    转自:http://blog.sina.com.cn/s/blog_48b9e1f90100fm5f.html 结合lec07_intro_cuda.pptx学习 内存类型 CGMA: Compute ...

  6. 深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结

    转自 http://www.jb51.net/article/37527.htm,感谢作者 #include "stdafx.h"      #include <iostre ...

  7. hadoop配置文件加载顺序(转)

    原文  http://www.cnblogs.com/wolfblogs/p/4147485.html 用了一段时间的hadoop,现在回来看看源码发现别有一番味道,温故而知新,还真是这样的 在使用h ...

  8. jquery.validate.unobtrusive.js插件作用

    在 ASP.NET MVC 中启用 Unobtrusive JavaScript 功能,可以在运行时由服务器端根据Model中设置的验证规则,自动生成客户端验证js代码(结合jquery.valida ...

  9. oracle 10g 学习之多表查询、分组函数(6)

    笛卡尔集 l  笛卡尔集会在下面条件下产生: 省略连接条件 连接条件无效 所有表中的所有行互相连接 l  为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件. 自连接 select m.las ...

  10. .net学习之多线程、线程死锁、线程通信 生产者消费者模式、委托的简单使用、GDI(图形设计接口)常用的方法

    1.多线程简单使用(1)进程是不执行代码的,执行代码的是线程,一个进程默认有一个线程(2)线程默认情况下都是前台线程,要所有的前台线程退出以后程序才会退出,进程里默认的线程我们叫做主线程或者叫做UI线 ...