20210719 noip20
考场
后两题是原题,教练说不用写了(ycx 不讲武德)
T1 先手模了 \(n\le5\) 的情况,尝试找规律失败。那就只能 DP 了,最终没搞出来。
记忆化搜索打了 \(n\le20\) 的表,交了
res
30pts
少模了,爆了 20pts。。。
rk1 赵思远 100+81+45
rk4 ys 30+72+65
玩具
具体做法可以看hzoi巨佬的博客(虽然有锅)
这里补充一下细节和如何想到。(下文中高度 = 深度,按边数计)
显然题意为求 \(n\) 个点的树树高期望
一个 naive 的想法设状态为 \(f[i,j]\) 表示 \(i\) 个点的树树高为 \(j\) 的概率,但直接转移需要知道每个深度度有多少个点,显然不行。那么考虑有若干个树加一个根拼起来,设 \(g[i,j]\) 为 \(i\) 个点的森林深度为 \(j\) 的概率,那么 \(f[i,j]=g[i-1,j-1]\),问题转化为求 \(g\)。
考虑枚举第一棵树中有多少点,那么可以由第一棵树+其他点的森林转移而来,但这样还要枚举深度,于是转换第二维为树高小于等于 \(j\) 的概率,\(g[i,j]=\sum_{k=1}^if[k,j]\times g[i-k,j]\),这样还少了一部分,即第一棵树有 \(k\) 个点的概率,设为 \(dp\),应再乘上 \(dp[i,k]\)。
最后的问题就是求 \(dp\),对于第 \(i\) 个点,它有 \(i\) 种选择(接在前 \(i-1\) 个点后或新开一棵树),则有 \(dp[i,j]=dp[i-1,j-1]\times\frac{j-1}i+dp[i-1,j]\times\frac{i-j}i\)
带注释的 code
const int N = 205;
int n,mod;
LL ans,inv[N],dp[N][N],f[N][N],g[N][N];
LL Pow(LL x,LL y)
{ LL res=1; for(;y;y>>=1,x=x*x%mod)if(y&1)res=res*x%mod; return res; }
signed main() {
read(n,mod);
For(i,1,n) inv[i] = Pow(i,mod-2);
dp[1][1] = 1;
For(i,2,n) For(j,1,i)
dp[i][j] = (dp[i-1][j-1]*(j-1) + dp[i-1][j]*(i-j))%mod*inv[i]%mod;
f[1][0] = 1; // 单点的深度为0
For(i,0,n) g[0][i] = 1;
For(i,1,n) For(j,0,n) { // j要循环到n,因为g[i][j]=1(j>i)
if( j ) f[i][j] = g[i-1][j-1];
For(k,1,i) g[i][j] = (g[i][j] + dp[i][k]*f[k][j]%mod*g[i-k][j]) %mod;
}
For(i,1,n) ans = (ans + (f[n][i]-f[n][i-1])*i) %mod;
// f[n,i]-f[n,i-1]得到深度为i的概率
write((ans%mod+mod)%mod);
return iocl();
}
y
状压 DP + meet in the middle
bitset
const int N = 95;
int n,m,d;
bitset<N> w[2][N];
int l,ans;
bitset<N> f[1<<12],g[1<<12];
// f[s][i]:从1开始路径为s到i的合法性; g:从2..n开始
signed main() {
read(n,m,d); l = d/2;
For(i,1,m) {
int x,y,z; read(x,y,z);
w[z][x][y] = w[z][y][x] = 1;
}
f[1][1] = 1;
For(i,2,n) g[1][i] = 1;
for(int i = 1; i < 1<<l; ++i)
For(j,1,n) if( f[i][j] ) f[i<<1] |= w[0][j], f[i<<1|1] |= w[1][j];
for(int i = 1; i < 1<<d-l; ++i)
For(j,1,n) if( g[i][j] ) g[i<<1] |= w[0][j], g[i<<1|1] |= w[1][j];
for(int i = 1<<l; i < 1<<l+1; ++i) for(int j = 1<<d-l; j < 1<<d-l+1; ++j)
For(k,1,n) if( f[i][k] && g[j][k] ) { ++ans; break; }
write(ans);
return iocl();
}
z
upd 20210902:
核心:离线,按长度递减的顺序处理询问,同时删除位移绝对值比 \(l\) 小的任务。
代码极其恶心,抄写的我身心俱疲。
带注释的 code
typedef pair<LL,LL> PLL;
const int N = 1e5+5;
int n,q,x[N];
PII l[N];
int m;
LL ans[N]; // ans[0]: l=0的答案
priority_queue<PLL,vector<PLL>,greater<PLL>> pq;
map<LL,LL> mp;
LL calc(LL l) { return ans[0] - (mp.size()-(!mp.empty()&&mp.begin()->se<0)) * l; }
// l<min{x}: 直接算答案(每次可以减少移动距离l,但第一个任务需要向左时不能)
signed main() {
// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout);
read(n,q);
For(i,1,n, lst=0) {
int y; read(y); if( y == lst ) continue;
if( m && ((x[m]<0&&y<lst) || (x[m]>0&&y>lst)) ) x[m] += y-lst;
else x[++m] = y-lst;
lst = y;
} // x转化为位移
For(i,1,q) read(l[i].fi), l[i].se = i; sort(l+1,l+q+1);
For(i,1,m) {
ans[0] += abs(x[i]), mp[i] = x[i];
pq.push(MP(abs(x[i]),i));
}
LL t = 1;
while( !pq.empty() ) {
PII u = pq.top(); pq.pop(); auto it = mp.lower_bound(u.se);
if( it == mp.end() || it->fi != u.se || abs(it->se) != u.fi ) continue;
while( t<=q && abs(it->se) > l[t].fi ) ans[l[t].se] = calc(l[t].fi), ++t;
// 剩余的l都比最小位移绝对值大,尝试删除
if( it != mp.begin() ) {
if( it != prev(mp.end()) ) { // 三合一
auto pre = prev(it), suf = next(it);
ans[0] -= abs(it->se) + abs(pre->se) + abs(suf->se);
it->se += pre->se + suf->se;
ans[0] += abs(it->se);
pq.push(MP(abs(it->se),u.se)), mp.erase(pre), mp.erase(suf);
} else ans[0] -= abs(it->se), mp.erase(it);
} else {
if( it->se > 0 ) { // 向右时可以被l顺便覆盖
if( it != prev(mp.end()) ) { // 二合一
auto suf = next(it);
ans[0] -= abs(it->se) + abs(suf->se);
it->se += suf->se;
if( it->se ) {
ans[0] += abs(it->se);
pq.push(MP(abs(it->se),u.se));
} else mp.erase(it);
mp.erase(suf);
} else ans[0] -= abs(it->se), mp.erase(it);
}
}
}
while( t<=q ) ans[l[t].se] = calc(l[t].fi), ++t;
For(i,1,q) write(ans[i]);
return iocl();
}
20210719 noip20的更多相关文章
- 「 题解」NOIP2021模拟赛(2021-07-19)
小兔的话 欢迎大家在评论区留言哦~ D - 矩阵 简单题意 一个 \(i * i\) 的 \(01\) 矩阵,若满足 每一行 和 每一列 都满足 恰好 有 \(2\) 个位置是 \(1\) 时,称为 ...
- noip20
T1 首先,这个插球,就是森林中连点,考虑dp,我们设 \(dp_{i,j}\) 表示有i个点的森林,有j个点在第一颗树中的概率,转移时考虑第i个点是否在第一颗子树里,转移方程: \[dp_{i,j} ...
- 调用免费API查询全年工作日、周末、法定节假日、节假日调休补班数据
前言 日常开发中,难免会用到判断今天是工作日.周末.法定节假日.节假日调休补班做一些业务处理,例如:仅在上班时间给用户推送消息.本文记录调用免费API查询全年工作日.周末.法定节假日.节假日调休补班数 ...
- AspNetCore&MassTransit Courier实现分布式事务
在之前的一篇博文中,CAP框架可以方便我们实现非实时.异步场景下的最终一致性,而有些用例总是无法避免的需要在实时.同步场景下进行,可以借助Saga事务来解决这一困扰.在一些博文和仓库中也搜寻到了.Ne ...
- 从零学习SpringSecurity
一.简介 SpringSecurity是一个功能强大且高度可定制的身份验证和访问控制框架,和spring项目整合更加方便. 二.核心功能 认证(Authentication):指的是验证某个用户能否访 ...
- 日常shell练习
2021-07-19 1.echo的使用 1.1 echo -n 表示不换行输出 # echo输出会自动换行,换行输出两个1 echo 1 echo 1 # 不换行输出,不换行输出两个1 echo - ...
- 2021record
2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...
- 基于Spring MVC + Spring + MyBatis的【超市会员管理系统】
资源下载: https://download.csdn.net/download/weixin_44893902/22035329 一. 语言和环境 实现语言:JAVA语言. 使用:MyEclipse ...
- 基于Java swing+mysql+eclipse的【水电费管理系统】
本项目为前几天收费帮学妹做的一个项目,Java swing项目,在工作环境中基本使用不到,但是很多学校把这个当做编程入门的项目来做,故分享出本项目供初学者参考. CSDN9.9赞助下载: https: ...
随机推荐
- WebRTC 用例和性能
WebRTC 用例和性能 实现低延迟.点对点传输是一项艰巨的工程挑战:有 NAT 遍历和连接检查.信令.安全.拥塞控制和无数其他细节需要处理.WebRTC 代表我们处理以上所有内容,这就是为什么它可以 ...
- 等Excel工作簿关闭后自动加密压缩备份2019年10月9日.ahk
;; 等Excel工作簿关闭后自动加密压缩备份2019年10月9日.ahk;; 腾讯QQ号 595076941; 作者:徐晓亮(weiyunwps618); 写作日期:2019年5月15日; 版本号: ...
- 解决:无法从 Windows 应用商店下载。请检查网络连接
今天在安装wsl的时候,装了几次一直中断,一直提示正在从Windows 应用商店下载,网络无法连接... 每次都是加载到2%就断了.网上搜了一圈,找到以下2种解决办法: 修改DNS把DNS修改为微软的 ...
- 在vmware虚拟机下的Window2003服务器下安装IIS服务详细教程——超级详细(解决关于:800a0bb9的解决办法)
总的来说,就是9步: 1.控制面板添加或者删除程序2.删除想要删的3.打开IIS配置4.开始共享5.导入源码6.配置权限7.网站属性.文档.应用程序配置8.web服务扩展9.访问网站 在安装好虚拟机的 ...
- Discuz ML RCE漏洞
1.漏洞描述 Discuz国际版漏洞存在于cookie的language可控并且没有严格过滤,导致可以远程代码执行. 2.产生原因:Discuz!ML 系统对cookie中的l接收的language参 ...
- idea构建servlet程序
1 新建maven项目 勾选maven_web模板 2 idea加载后应是如图所示 3 在main目录下新增两个文件夹,一个java 设置为源码根目录,另一个是resources 设置为源目录 4 在 ...
- Linux连接工具final配置
Linux连接工具 putty .CRT.XShell 在terminal里面敲不太方便,所以需要一款连接工具 这是一款美观医用的网络服务管理软件 安装final shell Windows版下载地址 ...
- Linux进程理解与实践(四)wait函数处理僵尸进程
Wait的背景 当子进程退出的时候,内核会向父进程发送SIGCHLD信号,子进程的退出是个异步事件(子进程可以在父进程运行的任何时刻终止) 子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程 ...
- 带你认识5G技术
一.移动通讯的发展历程 1.1.移动通讯具有代际演进规律 "G"代表一代 每10年一个周期,如下图所示: 1.2.5G技术指标对比概述 主要的技术指标有:流量密度.连接数密度.时延 ...
- go配置私有仓库 (go mod配置私有仓库)
windows 配置go私有仓库 一.环境 1.私有gitlab (gitlab.xxx.com) 2.go 1.16.3 3.win10系统, 家目录:C:\Users\Administrator, ...