考场

稍微想了想发现 T1 是 sb 题,枚举矩形的三个边界,右边界双指针扫就行了,T2 八成 DP,T3 感觉非常不可做

T1 犹豫了一下要不要算补集,感觉直接写也不难,就打消了这个念头

T2 只会 \(O(nma\log a)\) 的 DP,有 65pts,如果卡常+数据水也许能再混 15pts。感觉剩下的分要用数学,T3 部分分太香就没多想

T3 手玩样例发现不考虑重边的话就是一棵树,那么可以i拎出来唯一的路径 DP,\(O(qn)\) 有 47pts,放弃梦想了。

大概 7.50 开始码 T1 ,8.05 过了大样例,拍上后就没管

T2 又想了一会怎么优化,然后写了暴力 DP。发现 sub4 要跑个 8s 左右,试图卡常,然而并没有什么用,拍上看 T3 了

写完暴力还有 1.5h+,感觉发现树的部分是《[SDOI2011]染色》的弱化版,推广到仙人掌上,每条边有两种选择,带 \(2^2\) 常数分类讨论就行了,还有 1h+ 开始码。

码到剩 40min 时发现分类讨论的细节特别多,保树的分吧。

然后发现边权转点权后倍增的区间非常阴间,加上时间不多导致脑子一片混乱,最后 10min 还没过样例,弃了

res

rk5 90+65+46

T1 在 \(l=0\) 时可能一段 \(s_i\) 都是 \(0\),右边界可能比左边界还小。。。

T3 数组开小 RE 了 1pt

rk1 高俊垚,张泽阳 100+100+21

rk33 刘荣信 30+0+47

总结

这场的部分分拿得比较全,主要就是 T2 低太多的(前几都 A 了),事实上最近几场打的都不太好,不仅稳定不在前 3,还翻车考过 rk10,rk1 更是好久没拿了。趁机反思一下。

自己感觉最大的问题就是想不出来题,除了 sb 题和没有思维含量的 DS 外几乎没有在考场上 A 题,DS 有时还会调不出来导致整场爆炸。

从上次颓废后状态有所松懈,还是要绷紧啊。DP 有几天没写了,最近的早晨也比较荒废,弄完数论开组合数学吧。

最近高强度考试没时间刷题,那就更要珍惜考场上思考和考完改题的时间,不仅想清楚每个题的做法,更要清楚的是怎么想到这么做,这个题用到的思考方式/性质/结论能不能迁移到其他题上,tricks 的博客不要流于形式。

昨天和今天还暴露出一个问题,就是总在比赛快结束时 rush 一个题,随着时间推移得分不断退化,最终爆 \(0\)。除了考试快结束时心态不稳外,码力不行也是很重要的一个原因(从今天下午调 T3 也能看出来)。

前几天 hkh 写猪国杀,我认为写大模拟没有意义,考场上更重要的还是在较短时间内写/调出中等长度的代码,不过或许可以找几道毒瘤 DS 做做,最近没有时间就等回了 sdfz,先记在这里。

努力,奋斗!——《喜剧之王》

sol

叒没时间写了

T1
const int N = 35, M = 5e4+5;
int n,m,mn,mx;
char s[N][M]; int cnt[M],sum[M];
LL ans; signed main() {
// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout);
read(n,m);
For(i,1,n) scanf("%s",s[i]+1);
read(mn,mx);
For(i,1,n) {
mem(cnt,0,m);
For(j,i,n) {
For(k,1,m) cnt[k] += s[j][k]-'0', sum[k] = sum[k-1]+cnt[k];
int l = 1, r = 1;
For(k,1,m) {
ckmax(l,k), ckmax(r,k);
while( l <= m && sum[l]-sum[k-1] < mn ) ++l;
while( r < m && sum[r+1]-sum[k-1] <= mx ) ++r;
if( l > r ) break;
ans += r-l+1;
}
}
}
write(ans);
return iocl();
}
T2

容斥

const int N = 25, M = 1e5+5, mod = 1e9+7;
int n,m,a[N][M]; int ans,cnt[N][M],f[M]; void ckadd(int &x,int y) { x += y; if( x>=mod)x-=mod; else if(x<0)x+=mod;}
void ckmul(int &x,int y) { x = (LL)x * y %mod; } signed main() {
read(n,m);
For(i,1,n) For(j,1,m) read(a[i][j]), ++cnt[i][a[i][j]];
For(i,1,n) For(j,1,1e5)
for(int k = j+j; k <= 1e5; k += j) cnt[i][j] += cnt[i][k];
rFor(i,1e5,1) {
f[i] = 1;
For(j,1,n) ckmul(f[i],cnt[j][i]+1);
--f[i];
for(int j = i+i; j <= 1e5; j += i) ckadd(f[i],-f[j]);
ckadd(ans,(LL)f[i]*i%mod);
}
write(ans);
return iocl();
}
T3

点分治

typedef vector<int> VI;
const int N = 1e5+5;
int n,m,qn,mm=1;
vector<PII> to[N];
PII q[N]; int ans[N]; namespace divi {
int rt,siz[N],mx[N],fa[N],dep[N],top[N],f[N][3][3];
bool vis[N];
VI q[N],col[N];
vector<pair<int,VI>> e[N];
void findrt(int u,int fa) {
siz[u] = 1, mx[u] = 0;
for(auto i : e[u]) {
int v = i.fi; if( v == fa || vis[v] ) continue;
findrt(v,u);
siz[u] += siz[v], ckmax(mx[u],siz[v]);
}
ckmax(mx[u],siz[0]-siz[u]);
if( mx[u] < mx[rt] ) rt = u;
}
void build(int u,int fa) {
vis[u] = 1, divi::fa[u] = fa, dep[u] = dep[fa]+1;
for(auto i : e[u]) {
int v = i.fi; if( vis[v] ) continue;
siz[ rt=0 ] = siz[v], findrt(v,u), build(rt,u);
}
}
int lca(int u,int v) {
if( dep[u] < dep[v] ) swap(u,v);
while( dep[u] > dep[v] ) u = fa[u];
while( u != v ) u = fa[u], v = fa[v];
return u;
}
void dfs(int u,int fa,int top) {
divi::top[u] = top;
for(auto i : e[u]) {
int v = i.fi; if( vis[v] || v == fa ) continue;
col[v] = i.se;
For(j,0,col[top].size()-1) For(k,0,col[v].size()-1) {
f[v][j][k] = -1e9;
For(l,0,col[u].size()-1)
ckmax(f[v][j][k],f[u][j][l]+(col[v][k]!=col[u][l]));
}
dfs(v,u,top);
}
}
void work(int u) {
vis[u] = 1;
for(auto i : e[u]) {
int v = i.fi; if( vis[v] ) continue;
col[v] = i.se;
For(j,0,col[v].size()-1) For(k,0,col[v].size()-1)
f[v][j][k] = j==k ? 1 : -1e9;
dfs(v,u,v);
}
for(int i : q[u]) {
int x = ::q[i].fi, y = ::q[i].se; if( x == y ) continue;
if( y == u ) swap(x,y);
if( x == u )
For(j,0,col[top[y]].size()-1) For(k,0,col[y].size()-1)
ckmax(ans[i],f[y][j][k]);
else
For(j,0,col[top[x]].size()-1) For(k,0,col[x].size()-1)
For(l,0,col[top[y]].size()-1) For(r,0,col[y].size()-1)
ckmax(ans[i],
f[x][j][k]+f[y][l][r]-(col[top[x]][j]==col[top[y]][l]));
}
for(auto i : e[u]) {
int v = i.fi; if( vis[v] ) continue;
siz[ rt=0 ] = siz[v], findrt(v,u), work(rt);
}
}
void main() {
siz[ rt=0 ] = mx[0] = n, findrt(1,0), build(rt,0);
For(i,1,qn) q[lca(::q[i].fi,::q[i].se)].pb(i);
mem(vis,0,n);
siz[ rt=0 ] = n, findrt(1,0), work(rt);
}
} void dfs(int u,int fa) {
sort(to[u].begin(),to[u].end()),
to[u].erase(unique(to[u].begin(),to[u].end()),to[u].end());
for(int i = 0, j,v; j = i, i < to[u].size(); i = j+1)
if( (v=to[u][i].fi) != fa ) {
while( j+1 < to[u].size() && to[u][j+1].fi == v ) ++j;
divi::e[u].pb(MP(v,VI())), divi::e[v].pb(MP(u,VI()));
for(int k = i; k <= j && k < i+3; ++k)
divi::e[u].back().se.pb(to[u][k].se),
divi::e[v].back().se.pb(to[u][k].se);
dfs(v,u);
}
} signed main() {
read(n,m);
For(i,1,m) {
int x,y,z; read(x,y,z);
to[x].pb(MP(y,z)), to[y].pb(MP(x,z));
}
read(qn);
For(i,1,qn) read(q[i].fi,q[i].se);
dfs(1,0);
divi::main();
For(i,1,qn) write(ans[i]);
return iocl();
}

20210813 a,b,c的更多相关文章

  1. Java 9 揭秘(20. JDK 9中API层次的改变)

    Tips 做一个终身学习的人. 在最后一章内容中,主要介绍以下内容: 下划线作为新关键字 改进使用try-with-resources块的语法 如何在匿名类中使用<>操作符 如何在接口中使 ...

  2. 调用免费API查询全年工作日、周末、法定节假日、节假日调休补班数据

    前言 日常开发中,难免会用到判断今天是工作日.周末.法定节假日.节假日调休补班做一些业务处理,例如:仅在上班时间给用户推送消息.本文记录调用免费API查询全年工作日.周末.法定节假日.节假日调休补班数 ...

  3. Spring Boot 配置中的敏感信息如何保护?

    在之前的系列教程中,我们已经介绍了非常多关于Spring Boot配置文件中的各种细节用法,比如:参数间的引用.随机数的应用.命令行参数的使用.多环境的配置管理等等. 这些配置相关的知识都是Sprin ...

  4. 【工作篇】再次熟悉 SpringMVC 参数绑定

    前言 主要现在项目中使用的参数绑定五花八门的,搞得很头大,例如有些用字符串接收日期,用字符串接受数组等等,完全没有利用好 SpringMVC 的优势,这里自己也总结一下,免得到时又要百度谷歌查找. 以 ...

  5. Linux centos7 find 命令

    2021-08-13 1. 命令简介 find 命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子 ...

  6. 大厂的 SDK 写法,偷学到了!

    自己动手写 SDK 的经验技巧分享 大家好,我是鱼皮. 最近因为工作需要,自己动手写了一些项目的通用 SDK.在编写的过程中,我阅读和参考了不少公司中其他大佬写的 SDK,也总结了一些开发 SDK 的 ...

  7. 2021record

    2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...

  8. 【解决了一个小问题】golang的go.mod中出现版本错误

    代码中的这一句使用prometheus2.28.0版本的代码: import "github.com/prometheus/prometheus/prompb" 我把require ...

  9. 关于『进击的Markdown』:第二弹

    关于『进击的Markdown』:第二弹 建议缩放90%食用 众里寻他千百度,蓦然回首,Markdown却在灯火灿烂处 MarkdownYYDS! 各位早上好!  我果然鸽稿了  Markdown 语法 ...

随机推荐

  1. Redis挂了,流量把数据库也打挂了,怎么办?

    你好呀,我是歪歪. 是这样的,前几天有个读者给我发消息,说面试的时候遇到一个场景题: 他说他当时,一时间竟然找不到回答问题的角度,感觉自己没有回答到点子上. 我仔细想了一下,确实是感到这个问题有一丝丝 ...

  2. Apache ActiveMQ(cve-2015-5254)

    影响版本 Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞 复现 使用工具执行命令 工具地址 https://github.com/matthiaskaiser/jmet/re ...

  3. 大数据学习(18)—— Flume介绍

    老规矩,学习新东西先上官网瞅瞅Apache Flume Flume是什么 Flume是一个分布式.可靠的大规模高效日志收集.汇聚和传输的这么一个服务.它的架构基于流式数据,配置简单灵活.它具备可调节的 ...

  4. 总结开发中基于DevExpress的Winform界面效果

    DevExpress是一家全球知名的控件开发公司, DevExpress 也特指此公司出品的控件集合或某系列控件或其中某控件.我们应用最为广泛的是基于Winform的DevExpress控件组,本篇随 ...

  5. 2020年!最全Android大厂面试真题合集(附答案)

    这份Android面试真题涵盖了图片,网络和安全机制,网络,数据库,插件化.模块化.组件化.热修复.增量更新.Gradle,架构设计和设计模式,Android Framework .Android优秀 ...

  6. C++小知识——显示VS大括号/花括号折叠按钮

    这个功能默认是关闭的,打开路径如下: 将大纲语句块改为"True" 这个功能其实很有必要真不知道为啥默认要关闭这个功能. 站在巨人的肩膀上的思想,其实已经在互联网程序员之间深入人心 ...

  7. J-Link cmd的使用

    ​01.WHY 为什么要使用到J-LinkCommander呢???大部分情况下,我们使用J-link都是在IDE中debug使用的,出现问题,直接debug复现然后解决.这是最常见的开发方式. 但是 ...

  8. druid与知乎平台

    背景 知乎作为知名中文知识内容平台,业务增长和产品迭代速度很快,如何满足业务快速扩张中的灵活分析需求,是知乎数据平台组要面临的一大挑战. 知乎数据平台团队基于开源的 Druid 打造的业务自助式的数据 ...

  9. [源码解析] 深度学习流水线并行Gpipe(1)---流水线基本实现

    [源码解析] 深度学习流水线并行Gpipe(1)---流水线基本实现 目录 [源码解析] 深度学习流水线并行Gpipe(1)---流水线基本实现 0x00 摘要 0x01 概述 1.1 什么是GPip ...

  10. 题解 Prime

    传送门 考场上魔改了一下线性筛,觉得要筛到 \(\frac{R}{2}\) 就没让它跑 其实正解就是这样,只不过由于接下来类似埃氏筛的过程只要筛到根号就行了 线性筛有的时候其实并不需要筛到 \(\fr ...