20210808 Hunter,Defence,Connect
考场
乍一看都不可做
T1 算了半天样例,一直算出来 \(\frac{81}{400}\),直接丢了
T1 推了推发现是求最长连续 \(0\) 的数量,那就是线段树合并加上《玫瑰花精》
T3 完全不会。甚至不知道该状压还是乱搞
先敲了 T1 T3 两个暴力和 T3 完全图+边权相同的部分分,8 点多开始写 T2。结果出奇的顺利,9,00 就过了样例和测速(测速时发现线段树节点数忘 \(\times4\) 了,担心 MLE,换成了 merge 时不新建点的写法)。拍上后决定手模一些小数据,结果第一个就挂了。。。发现答案要和前缀 \(0\) 数+后缀 \(0\) 数取 \(\max\),暴力也没考虑,9.30 加上并过了自己造的小数据。
回头看 T1,还是没有想法。先加了个记忆化,又用分数类输出了一下样例,发现是 \(\frac{11}5\)???一直i疑惑到 10.00。交了T1 T3,发现编译器只有 C++11 gcc 8.2.0
一个选项,担心 T2 被卡常。造了链、菊花、二叉树的满数据,都在 0.3s 跑完了,感觉很稳。
res
rk4 20+100+20
T1 在求 \(\sum w_i\) 时没有模,导致算分母逆元时爆 LL
了,挂 25pts
T3 有完全图但边权不相等情况,挂 10pts
rk1 肖鸣孜 45+100+40
Hunter
考察了对期望的线性性本质的理解
要求的是在第一个猎人之前死的期望猎人数 \(+1\),即 \(\text{E}(\sum_{i=2}^nA_i)+1\),等于 \(\sum_{i=2}^n\text{E}(A_i)+1\),而每个猎人在第一个猎人之前死的期望是 \(\frac{w_i}{w_1+w_i}\times1\)。
code
const int N = 1e5+5, mod = 998244353;
int n;
LL a[N];
LL ans;
LL Pow(LL x,LL y=mod-2)
{ LL res=1; for(;y;y>>=1,x=x*x%mod)if(y&1)res=res*x%mod; return res; }
signed main() {
read(n);
For(i,1,n) read(a[i]);
For(i,2,n) ans = (ans + a[i] * Pow(a[1]+a[i])) %mod;
write((ans+1)%mod);
return iocl();
}
Defence
线段树合并+线段树求最长连续 \(0\) 数
考场代码
const int N = 1e5+5;
int n,m,q;
vector<int> to[N];
int rt[N],pre[N],suf[N],ans[N];
#define ls(u) t[u].ch[0]
#define rs(u) t[u].ch[1]
#define mid ((l+r)>>1)
int ind;
struct Node { int l,r; int len() { return r-l-1; } };
bool operator < (Node x,Node y) { return x.len() < y.len(); }
struct Seg { int ch[2],ll,rr; Node mx; } t[N*4*18];
void up(int u) {
t[u].mx = max(t[ls(u)].mx,t[rs(u)].mx);
if( ls(u) && rs(u) ) ckmax(t[u].mx,Node{t[ls(u)].rr,t[rs(u)].ll});
t[u].ll = t[ ls(u)?ls(u):rs(u) ].ll, t[u].rr = t[ rs(u)?rs(u):ls(u) ].rr;
}
void insert(int &u,int l,int r,int p) {
if( !u ) u = ++ind;
if( l == r ) {
t[u].ll = t[u].rr = p, t[u].mx = {p,p};
return;
}
if( p <= mid ) insert(ls(u),l,mid,p);
else insert(rs(u),mid+1,r,p);
up(u);
}
int merge(int u,int v,int l,int r) {
if( !u || !v ) return u | v;
if( l == r ) return u;
ls(u) = merge(ls(u),ls(v),l,mid), rs(u) = merge(rs(u),rs(v),mid+1,r);
up(u); return u;
}
#undef ls
#undef rs
#undef mid
void dfs(int u,int fa) {
for(int v : to[u]) if( v != fa ) {
dfs(v,u);
rt[u] = merge(rt[u],rt[v],0,m);
ckmin(pre[u],pre[v]), ckmax(suf[u],suf[v]);
}
if( suf[u] ) ans[u] = max(t[rt[u]].mx.len(),pre[u]-0-1+m-suf[u]-1);
else ans[u] = -1;
}
signed main() {
// printf("%d\n",sizeof(t));
// return 0;
// freopen("b1.in","r",stdin);
// freopen("b1.out","w",stdout);
read(n,m,q); ++m;
For(i,1,n-1) {
int x,y; read(x,y);
to[x].pb(y), to[y].pb(x);
}
For(i,1,n) pre[i] = m, insert(rt[i],0,m,0), insert(rt[i],0,m,m);
while( q-- ) {
int x,y; read(x,y);
insert(rt[x],0,m,y);
ckmin(pre[x],y), ckmax(suf[x],y);
}
dfs(1,0);
For(i,1,n) write(ans[i]);
return iocl();
}
Connect
本质是要保留一条 \(1\) 到 \(n\) 的链,其他点与这条链只有一个交点,求删去边的最小权值和。
\(n\) 很小,考虑状压 DP。
设 \(f[s,i]\) 为当前考虑过的点集为 \(s\),链的结尾为 \(i\) 的保留,每次考虑添加一个点到链中或找一个联通块,使这个联通块中的点与这条链的交点为 \(i\)。具体看代码
code
const int N = 16;
int n,m;
int w[N][N];
int all,sum[1<<N],g[1<<N][N],f[1<<N][N];
signed main() {
read(n,m); all = (1<<(n--))-1;
For(i,1,m) {
int x,y,z; read(x,y,z); --x,--y;
w[x][y] = w[y][x] = z;
}
For(s,1,all) For(i,0,n) if( s & (1<<i) ) For(j,i+1,n) if( s & (1<<j) )
sum[s] += w[i][j]; // sum[s]: 集合s中内部连边的和
For(s,1,all) For(i,0,n) For(j,0,n) if( s & (1<<j) ) g[s][i] += w[i][j];
// g[s,i]: 集合s与点i连边的和
memset(f,0xcf,sizeof f);
f[1][0] = 0;
For(s,1,all) For(i,0,n) if( f[s][i] >= 0 ) {
For(j,0,n) if( !(s & (1<<j)) ) // 点j接到链上
ckmax(f[s|(1<<j)][j],f[s][i]+w[i][j]);
for(int ss = all^s, t = ss; t; t = (t-1)&ss) // 联通块t接到i上
ckmax(f[s|t][i],f[s][i]+g[t][i]+sum[t]);
}
write(sum[all]-f[all][n]);
return iocl();
}
20210808 Hunter,Defence,Connect的更多相关文章
- 8.8考试总结(NOIP模拟33)[Hunter·Defence·Connect]
无法逃避的是自我,而无法挽回的是过去. 前言 还算可以,不过 T1 少 \(\bmod\) 了一下挂了 25pts,T2 没看清题面挂了 27pts. 下回注意吧.. T1 Hunter 解题思路 感 ...
- Connect() 2016 大会的主题 ---微软大法好
文章首发于微信公众号"dotnet跨平台",欢迎关注,可以扫页面左面的二维码. 今年 Connect 大会的主题是 Big possibilities. Bold technolo ...
- “.Net 社区虚拟大会”(dotnetConf) 2016 Day 1 Keynote: Scott Hunter
“.Net 社区虚拟大会”(dotnetConf) 2016 今天凌晨在Channel9 上召开,在Scott Hunter的30分钟的 Keynote上没有特别的亮点,所讲内容都是 微软“.Net社 ...
- IdentityServer4 使用OpenID Connect添加用户身份验证
使用IdentityServer4 实现OpenID Connect服务端,添加用户身份验证.客户端调用,实现授权. IdentityServer4 目前已更新至1.0 版,在之前的文章中有所介绍.I ...
- 2003-Can't connect to mysql server on localhost (10061)
mysql数据库出现2003-Can't connect to mysql server on localhost (10061)问题 解决办法:查看wampserver服务器是否启动,如果没有启动启 ...
- Error connecting to database [Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)]
参照 http://stackoverflow.com/questions/4448467/cant-connect-to-local-mysql-server-through-socket-var- ...
- HTTP Method详细解读(`GET` `HEAD` `POST` `OPTIONS` `PUT` `DELETE` `TRACE` `CONNECT`)
前言 HTTP Method的历史: HTTP 0.9 这个版本只有GET方法 HTTP 1.0 这个版本有GET HEAD POST这三个方法 HTTP 1.1 这个版本是当前版本,包含GET HE ...
- IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...
- Connect to the DSP on C6A8168/DM8168/DM8148 using CCS
转自ti-wiki 这份wiki,我曾经就收藏过,但是没有加以重视,以至于绕了一大圈的ccs开发环境的配置,现在正式收藏于自己的博客中...总结良多啊 Connecting to DSP on C6 ...
随机推荐
- 如何用C++封装一个简单的数据流操作类(附源码),从而用于网络上的数据传输和解析?
历史溯源 由于历史原因,我们目前看到的大部分的网络协议都是基于ASCII码这种纯文本方式,也就是基于字符串的命令行方式,比如HTTP.FTP.POP3.SMTP.Telnet等.早期操作系统UNIX( ...
- 18Oracle入门
1 Oracle的服务 Oracle的监听服务:OralceOraDB12Home1TNSListener 需要通过程序链接数据库进行开发的时候,此服务必须打开,如果只是在本机使用,此服务可不启动 O ...
- OpenGL学习笔记(二)画三角形
目录 渲染管线(Graphics Pipeline) 编码实现 顶点数据 顶点缓冲对象(VBO) 顶点着色器 编译着色器 片段着色器 着色器程序 链接顶点属性 顶点数组对象 最终绘制三角形 索引缓冲对 ...
- pwnable.kr之simple Login
pwnable.kr之simple Login 懒了几天,一边看malloc.c的源码,一边看华庭的PDF.今天佛系做题,到pwnable.kr上打开了simple Login这道题,但是这道题个人觉 ...
- js遍历终极大法--再也不用苦逼的for循环了
while循环 while后面跟循环条件和执行语句,只要满足条件,就会一直执行里面的执行 var i = 0 while(i<10){ console.log(i) i++ } do...whi ...
- vue 快速入门 系列 —— vue-cli 上
其他章节请看: vue 快速入门 系列 Vue CLI 4.x 上 在 vue loader 一文中我们已经学会从零搭建一个简单的,用于单文件组件开发的脚手架:本篇,我们将全面学习 vue-cli 这 ...
- Android Jetpack 架构组件最佳实践之“网抑云”APP
背景 近几年,Android 相关的新技术层出不穷.往往这个技术还没学完,下一个新技术又出来了.很多人都是一脸黑人问号? 不少开发者甚至开始哀嚎:"求求你们别再创造新技术了,我们学不动了!& ...
- 我的大学Android开发学习之路——从开始到微信/支付宝/抖音Offer
前言 笔者2016年高考考入华中科技大学计算机科学与技术专业. 2017年底(大二寒假)拿到今日头条(字节跳动)深圳研发中心Android开发实习生Offer,在深圳研发中心实习至2018年3月. 2 ...
- CYPEESS USB3.0程序解读之---SPI读写
前面已经解读了GPIO以及同步FIFO操作,下面我们看一个SPI读写的例子,它是主程序命令从SPI中读写一些数据. SPI传输子程序看一下: 页地址,字节计数,缓冲区,读写标志 因为只能一页一页的读或 ...
- 基于ssm的电影售票选座管理系统基于Java的电影网站的网页设计与制作源码
注意:此项目只截图部分功能,可评论区咨询查看项目全部功能演示! 1.开发环境 开发语言: 后台框架:SSM(Spring+SpringMVC+Mybatis) 前端技术:HTML+CSS+JavaSc ...