AGC009E Eternal Average
神题orz
那个擦掉\(k\)个数然后写上一个平均值可以看成是\(k\)叉Huffman树的构造过程,每次选\(k\)个点合成一个新点,然后权值设为平均值.这些0和1都会在叶子的位置,同时每个叶子\(i\)的贡献为\(w_i\)(0或1)\(*{\frac{1}{k}}^{dep_i}\),也就是每过一层这个叶子代表的0或1就要除掉\(k\)加到答案里,这样子算,所有点的贡献之和正好是最终的平均值.还要满足\(\sum_{i=1}^{n}{\frac{1}{k}}^{dep_i}+\sum_{j=1}^{m}{\frac{1}{k}}^{dep_j}=1\),相当于如果全是1那么最后的值也是1.那么\(z\)能被表示成最终的值当且仅当\(z\)能表示成\(m\)个\({\frac{1}{k}}^{a_i}\)之和,以及\(1-z\)能表示成\(n\)个\({\frac{1}{k}}^{b_i}\)之和
如果把最终的值写成\(k\)进制小数,也就是\(0.c_1c_2...c_l\),那么\(\sum c=m\),当然这是没考虑进位,每次进位会导致一个\(c_i\ge k\)的\(c_i\)减\(k\),并且对应的\(c_{i-1}\)加\(1\),那么每次进位都会导致\(\sum c\)减去\(k-1\),所以条件就要改为\(\sum c \equiv m \mod k-1\).然后\(1-z\)的\(\sum c\)应该是\(l(k-1)+1-\sum c\),其中前半部分为整数1的\(k\)进制表示,所以在满足上述条件的情况下还满足\(l(k-1)+1-\sum c < n\)以及\(l(k-1)+1-\sum c \equiv n \mod k-1\)
然后dp求方案数.设\(f_{i,j}\)为考虑\(i\)位,\(\sum c\)为\(j\)的方案.注意我们要强制最后一位\(>0\),不然会和前面的方案算重,再加一维\(0/1\)表示末尾是\(0\)还是\(>0\)即可.转移可以前缀和优化
#include<bits/stdc++.h>
#define LL long long
#define uLL unsigned long long
#define db double
using namespace std;
const int N=2000+10,mod=1e9+7;
int rd()
{
int x=0,w=1;char ch=0;
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
int n,m,kk,f[2][N][2],pr[N],ans;
int main()
{
n=rd(),m=rd(),kk=rd();
int nw=1,la=0;
f[0][0][0]=1;
int lm=max(n,m)<<1;
for(int i=1;i<=lm;++i)
{
for(int j=0;j<=m;++j)
{
pr[j]=j?pr[j-1]:0;
pr[j]=(pr[j]+(f[la][j][0]+f[la][j][1])%mod)%mod;
f[la][j][0]=f[la][j][1]=0;
}
for(int j=0;j<=m;++j)
{
f[nw][j][0]=(pr[j]-(j?pr[j-1]:0)+mod)%mod;
if(j) f[nw][j][1]=(pr[j-1]-(j-(kk-1)-1<0?0:pr[j-(kk-1)-1])+mod)%mod;
if(j%(kk-1)==m%(kk-1)&&(i*(kk-1)+1-j)%(kk-1)==n%(kk-1)&&i*(kk-1)+1-j<=n)
ans=(ans+f[nw][j][1])%mod;
}
nw^=1,la^=1;
}
printf("%d\n",ans);
return 0;
}
AGC009E Eternal Average的更多相关文章
- AtCoder AGC009E Eternal Average (DP)
题目链接 https://atcoder.jp/contests/agc009/tasks/agc009_e 题解 又被劝退了... 第一步转化非常显然: 就等价于一开始有一个数\(1\), 有\(\ ...
- 【AGC009E】Eternal Average
[AGC009E]Eternal Average 题面 洛谷 题解 神仙题.jpg 我们把操作看成一棵\(k\)叉树,其中每个节点有权值,所有叶子节点(共\(n+m\)个)就是\(0\)或\(1\). ...
- AGC009:Eternal Average
传送门 好神啊 直接考虑一棵 \(n+m\) 个叶子的 \(k\) 叉树,根结点权值为 \(\sum_{i\in m}(\frac{1}{k})^{deep_i}\) 对于一个 \(deep\) 的序 ...
- AtCoder Grand Contest 009 E:Eternal Average
题目传送门:https://agc009.contest.atcoder.jp/tasks/agc009_e 题目翻译 纸上写了\(N\)个\(1\)和\(M\)个\(0\),你每次可以选择\(k\) ...
- AT2294 Eternal Average
题目 题目给我们的这个东西可以转化为一棵\(k\)叉树,有\(n+m\)个叶子节点,其中\(m\)个权值为\(1\),\(n\)个权值为\(0\),每个非叶子节点的权值为其儿子的平均值,现在问你根节点 ...
- AtCoder刷题记录
构造题都是神仙题 /kk ARC066C Addition and Subtraction Hard 首先要发现两个性质: 加号右边不会有括号:显然,有括号也可以被删去,答案不变. \(op_i\)和 ...
- ZJOI2017 Day2
私のZJOI Day2 2017-3-22 08:00:07 AtCoder试题选讲 SYC(Sun Yican) from Shaoxing No.1 High School 2017-3-22 0 ...
- AtCoder Grand Contest 009
AtCoder Grand Contest 009 A - Multiple Array 翻译 见洛谷 题解 从后往前考虑. #include<iostream> #include< ...
- AtCoder Grand Contest
一句话题解 QwQ主要是因为这篇文章写的有点长……有时候要找某一个题可能不是很好找,所以写了这个东西. 具体的题意.题解和代码可以再往下翻._(:з」∠)_ AGC 001 C:枚举中点/中边. D: ...
随机推荐
- jquery注册验证的写法
在做注册页面时会用到jquery验证注册信息,用户名,密码,邮箱,手机号的验证,比较简单的,新手莫怪... <script> function Name(){ var name = $(& ...
- [转]Cookie详解
从事 Web 开发已有近17个月:在学以致用的工作学习里,对于不怎么使用的部分,多少有些雾里探花的窘迫感-差不多是了解一二,然而又非真切的明晰:这就使得再用的时候,总要去再搜索一番:如此颇为难受,倒不 ...
- JMeter4.0分布式调度压测部署
我们在Loadrunner学过使用Load Generator做肉鸡, 通过Controller来进行脚本和权重的分配来进行分布式压测, Jmeter作为当今的网红性能测试工具,这个功能必须是少不了的 ...
- springmvc+mybatis多数据源切换
前文:之前练习SSM时配置的都是单数据源,现在项目需求多数据源,所以自己查阅了以下资料,在controller中手动切换数据源成功,以下的配置细节. 实际上应该在dao层进行注解的方式切换,使用AOP ...
- 阶段3 3.SpringMVC·_03.SpringMVC常用注解_3 PathVariable注解
请求地址都一样,根据不同的请求方式,最终让不同的方法去执行.这就是restfull的风格 如果有两个查询都是get的.那么当前访问 满足条件的就是两个. 用一个占位符 {id} 演示PathVaria ...
- 阶段3 3.SpringMVC·_02.参数绑定及自定义类型转换_5 自定义类型转换器演示异常
后端自动进行类型的转换.前端输入的年龄都是字符串的形式传递到后端. user的实体类 加一个Date日期类型格式的字段.生成get和set还有toString的方法 重新部署程序 日期用横线的方式 ...
- Linux 部署 Django 系统
一:安装uwsgi pip3 install uwsgi 二:进入项目目录下,创建uwsgi.ini配置文件 [uwsgi] # 使用nginx连接时使用功能,上线时才使用socket,指定项目执行的 ...
- TextureMerger使用教程
https://bbs.egret.com/thread-1653-1-1.html TextureMerger使用教程 2014-10-28 15:53 1862932 本帖最后由 E-Tool君 ...
- linux下杀进程的方法
http://www.linuxidc.com/Linux/2011-08/40052.htm kill -s 9 2222
- Nginx动态添加模块 平滑升级
已经安装好的Nginx动态添加模块 说明: 已经安装好的Nginx,需要添加一个未被编译安装的模块,需要怎么弄呢? 这里已安装第三方nginx-rtmp-module模块为例 nginx的模块是需要重 ...