20230928 比赛总结

反思

A

一开始感觉时间复杂度不够,后来还是冲了,发现很快

B

感觉自己卡常不行,要多练

C

巨大恶心题!写了我两个小时,心态差点崩了,还好调出来了
但出题人是 s b sb sb,卡常卡成暴力分了 ( 55 p t s ) (55pts) (55pts) T_T

题解

比赛链接

A

s b sb sb 题,枚举公约数然后二分即可,时间复杂度 O ( n l o g n l o g V ) O(nlognlogV) O(nlognlogV),因为是 g c d gcd gcd,所以 l o g V logV logV 远远跑不满

B

巨大恶心卡常题,不过只卡了 10 p t s 10pts 10pts
正解好像是倍增答案
但有人矩乘然后循环展开过了,感觉很神奇
u p d : upd : upd: 卡过了,用了循环展开,和 u n s i g n e d l o n g l o n g unsigned\;long\;long unsignedlonglong 减少取模次数,而且用循环展开,快了 3 3 3 倍,很神奇!!!感觉自己的机子比 n f l s nfls nfls 的评测机快

#include <bits/stdc++.h>
using namespace std;
const int K=135,P=1e9+7;
typedef unsigned long long ull;
struct Matrix{ int n,m,a[K<<1][K<<1];};
ull G[K<<1][K<<1];
Matrix operator *(const Matrix &A,const Matrix &B){Matrix C;C.n=A.n,C.m=B.m;int n=C.n,m=C.m;for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) G[i][j]=0;for(int i=1;i<=n;i++) for(int k=1;k<=m;k++) if(A.a[i][k]){int j=1;for(;j+7<=m;j+=8){G[i][j]+=1ll*A.a[i][k]*B.a[k][j];G[i][j+1]+=1ll*A.a[i][k]*B.a[k][j+1];G[i][j+2]+=1ll*A.a[i][k]*B.a[k][j+2];G[i][j+3]+=1ll*A.a[i][k]*B.a[k][j+3];G[i][j+4]+=1ll*A.a[i][k]*B.a[k][j+4];G[i][j+5]+=1ll*A.a[i][k]*B.a[k][j+5];G[i][j+6]+=1ll*A.a[i][k]*B.a[k][j+6];G[i][j+7]+=1ll*A.a[i][k]*B.a[k][j+7];}while(j<=C.m) G[i][j]+=1ll*A.a[i][k]*B.a[k][j],j++;if(k%16==0) for(int j=1;j<=m;j++) G[i][j]%=P;}for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) C.a[i][j]=G[i][j]%P;return C;
}
int n,k,a,b,f[2][K];
inline int read(){int FF=0,RR=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;return FF*RR;
}
int qmi(int a,int b){int res=1;for(;b;b>>=1){if(b&1) res=1ll*res*a%P;a=1ll*a*a%P;}return res;
}
int main(){freopen("bird.in","r",stdin);freopen("bird.out","w",stdout);n=read(),k=read(),a=read(),b=read();Matrix A;A.n=A.m=k<<1;for(int i=1;i<=k;i++){A.a[i][i]=A.a[i+k][i+k]=1;if(i>1) A.a[i-1][i]=A.a[i+k-1][i+k]=1;if(i<k) A.a[i+1][i]=A.a[i+k+1][i+k]=1;}for(int i=a+1;i<b;i++){A.a[i][i+k]=1;if(i>1) A.a[i-1][i+k]=1;if(i<k) A.a[i+1][i+k]=1;}Matrix B;B.n=1,B.m=k<<1;B.a[1][k/2]=1;int T=n-2;for(;T;T>>=1){if(T&1) B=B*A;A=A*A;}for(int i=1;i<=k;i++) f[0][i]=B.a[1][i+k];for(int i=1;i<=k;i++) f[1][i]=(1ll*f[0][i]+f[0][i-1]+f[0][i+1])%P;printf("%d\n",1ll*f[1][k/2]*qmi(n-2,P-2)%P);fprintf(stderr,"%d ms\n",int(1e3*clock()/CLOCKS_PER_SEC));return 0;
}

C

看到路径,不难想到点分治
然后就用线段树维护即可, 不难想但很难写
还被卡常了,现在才发现我的点分治板子是有多慢(卡常 + 改了 w x q wxq wxq 的点分治板子就过了)
时间复杂度 O ( n l o g 2 n ) O(nlog^2n) O(nlog2n)

#include <bits/stdc++.h>
using namespace std;
const int N=100100,inf=2e9;
typedef pair<int,int> pii;
int n,m,ans=-inf,tot,mnms;
int L[N],R[N],idx;
int val1[N],val2[N];
bool TTT[N],cov[N],vis[N];
vector<int> G[N];
vector<pii> key[N],revkey[N];
inline int read(){int FF=0,RR=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;return FF*RR;
}
struct SegmentTree{int seg[N*3],tag[N*3];void clear(int tot){ for(int i=1;i<=tot*3;i++) seg[i]=-inf,tag[i]=0;}void down(int x,int val){ seg[x]+=val,tag[x]+=val;}void pushdown(int x){down(x<<1,tag[x]),down(x<<1^1,tag[x]);tag[x]=0;}void modify(int l,int r,int x,int L,int R,int val,int type){if(L<=l&&r<=R){if(type) down(x,val);else seg[x]=val;return;}pushdown(x);int mid=(l+r)>>1;if(mid>=L) modify(l,mid,x<<1,L,R,val,type);if(mid<R) modify(mid+1,r,x<<1^1,L,R,val,type);seg[x]=max(seg[x<<1],seg[x<<1^1]);}
}sg;
int siz[N];
void get_size_wxq(int u,int fa){siz[u]=1;for(int v:G[u]) if(!vis[v]&&v!=fa) get_size_wxq(v,u),siz[u]+=siz[v];
}
int get_root_wxq(int u,int fa,int &rt){int siz=1,ms=0;for(int v:G[u]) if(!vis[v]&&v!=fa){int t=get_root_wxq(v,u,rt);siz+=t,ms=max(ms,t);}ms=max(ms,tot-siz);if(ms<mnms) mnms=ms,rt=u;return siz;
}
void init(int u,int fa){L[u]=++idx,cov[u]=1,val1[u]=val2[u]=0;for(int v:G[u]) if(v!=fa&&!vis[v]) init(v,u);R[u]=idx;
}
void clcov_wxq(int u,int fa){cov[u]=0;for(int v:G[u]) if(v!=fa&&!vis[v]) clcov_wxq(v,u);
}
void wxq12(int u,int fa){TTT[u]=1;for(pii ke:key[u]) if(TTT[ke.first]) val1[u]+=ke.second;for(pii ke:revkey[u]) if(TTT[ke.first]) val2[u]+=ke.second;for(int v:G[u]) if(v!=fa&&!vis[v]) val1[v]+=val1[u],val2[v]+=val2[u],wxq12(v,u); TTT[u]=0;
}
void add_wxq(int u,int Lb,int Rb,int val){for(pii ke:key[u]){int x=ke.first,w=ke.second;if(!cov[x]) continue;if(L[x]>1&&Lb<=L[x]&&R[x]<=Rb) sg.modify(1,idx,1,L[x],R[x],w*val,1);}
}
void wxq(int u,int fa,int Lb,int Rb,int rt){add_wxq(u,Lb,Rb,1);if(Lb<=Rb) ans=max(ans,val1[u]+sg.seg[1]-val1[rt]);for(int v:G[u]) if(v!=fa&&!vis[v]) wxq(v,u,Lb,Rb,rt);add_wxq(u,Lb,Rb,-1);
}
void insert_wxq(int u,int fa){sg.modify(1,idx,1,L[u],L[u],val2[u],0);for(int v:G[u]) if(v!=fa&&!vis[v]) insert_wxq(v,u);
}
void wxq_solve(int rt){get_size_wxq(rt,-1),mnms=inf,tot=siz[rt];// get_root_wxq(rt,-1,rt);while(true){bool fl=0;for(auto v:G[rt])if(siz[v]<siz[rt]&&siz[v]*2>=tot){fl=1,rt=v;break;}if(!fl)break;}vis[rt]=1;idx=0,init(rt,-1);wxq12(rt,-1);ans=max(ans,val1[rt]);sg.clear(idx);sg.modify(1,idx,1,1,1,val2[rt],0);for(int v:G[rt]){if(vis[v]) continue;wxq(v,rt,1,L[v]-1,rt),insert_wxq(v,rt);}sg.clear(idx);for(int i=G[rt].size()-1;i>=0;i--){int v=G[rt][i];if(vis[v]) continue;wxq(v,rt,R[v]+1,idx,rt),insert_wxq(v,rt);}ans=max(ans,sg.seg[1]);clcov_wxq(rt,-1);for(int v:G[rt]) if(!vis[v]) wxq_solve(v); 
}
int main(){freopen("score.in","r",stdin);freopen("score.out","w",stdout);n=read(),m=read();for(int i=1;i<n;i++){int x=read(),y=read();G[x].emplace_back(y),G[y].emplace_back(x);}for(int i=1,x,y,w;i<=m;i++){x=read(),y=read(),w=read();key[y].emplace_back(make_pair(x,w));revkey[x].emplace_back(make_pair(y,w));}wxq_solve(1);printf("%d\n",ans);return 0;
}
// orz wxq

D

不会,是道动态 m s t mst mst 板子题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/92828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 并发编程实战 第十一章 多线程应用的测试和除错

目录 11.1 与并发相关的错误类型 11.1.1 不必要的阻塞 11.1.2 条件竞争 11.2 定位并发错误的技术 11.2.1 代码审阅——发现潜在的错误 11.2.2 通过测试定位并发相关的错误 11.2.3 可测试性设计 11.2.4 多线程测试技术 11.2.5 构建多线程测试代码 11.2.6 测试多线程代…

网络基础(一)

通信&#xff0c;在古代是通过书信与他人互通信息的意思。 今天&#xff0c;“通信”这个词的外沿已经得到了极大扩展&#xff0c;它目前的大意是指双方或多方借助某种媒介实现信息互通的行为。 如果按照当代汉语的方式理解“通信”&#xff0c;那么古代的互遣使节、飞鸽传书…

IDEA git操作技巧大全,持续更新中

作者简介 目录 1.创建新项目 2.推拉代码 3.状态标识 5.cherry pick 6.revert 7.squash 8.版本回退 9.合并冲突 1.创建新项目 首先我们在GitHub上创建一个新的项目&#xff0c;然后将这个空项目拉到本地&#xff0c;在本地搭建起一个maven项目的骨架再推上去&#xff0…

【KingbaseES】银河麒麟V10 ARM64架构_安装人大金仓数据库KingbaseES_V8R6(CentOS8)

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的…

焕新古文化传承之路,AI为古彝文识别赋能

目录 1 古彝文与古典保护 2 古文识别的挑战 2.1 西文与汉文OCR 2.2 古彝文识别难点 3 合合信息&#xff1a;古彝文保护新思路 3.1 图像矫正 3.2 图像增强 3.3 语义理解 3.4 工程技巧 4 总结 1 古彝文与古典保护 彝文指的是云南、贵州、四川等地的彝族人使用的文字&am…

十九,镜面IBL--BRDF积分贴图

再回顾下镜面部分的分割求和近似法 现在关注第二部分 最后可化为 也就是说&#xff0c;这两部分积分可以获得F0的系数和F0的偏差。 这两个值可以存储到BRDF积分贴图的RG部分。void main() { vec2 integratedBRDF IntegrateBRDF(TexCoords.x, TexCoords.y); FragColor …

驱动开发:STM32F7控制AD5663模拟量输出

AD5663是ADI公司的一款DAC模块&#xff0c;用以实现两路模拟量信号输出。该芯片通过SPI通信来驱动。下面讲解使用STM32F7主控芯片来控制AD5663模拟量输出的流程。 配置STM32F7 SPI通信管脚 STM32CubeMX生成SPI驱动代码 /* SPI3 init function */ void MX_SPI3_Init(void) {/*…

【数据代理+事件处理+计算属性与监视+绑定样式+条件渲染】

数据代理事件处理计算属性与监视绑定样式条件渲染 1 数据代理1.1 回顾Object.defineProperty方法1.2 数据代理 2 事件处理2.1 绑定监听2.2 事件修饰符2.3 键盘事件 3 计算属性与监视3.1 计算属性3.2 监视属性(侦视属性)3.3 watch对比computed 4 绑定样式4.1 绑定class样式4.2 绑…

区块链3.0时代 基于GoMars构建的新概念TravelFi能否注入新力量?

区块链技术进入3.0时代 后疫情时代&#xff0c;全球数字化进程不断加快&#xff0c;世界范围内的移动通信、互联网技术及各类数字化应用的社会普及率也正在快速提升&#xff0c;疫情推动了互联网经济的增长&#xff0c;也让数字经济的价值开始显现。 数字经济一词的由来至今已经…

前端架构师之01_JavaScript_Ajax

1 Web基础知识 1.1 Web服务器 Web服务器又称为网站服务器&#xff0c;主要用于提供网上信息浏览服务。常见的Web服务器软件有Apache HTTP Server&#xff08;简称Apache&#xff09;、Nginx等。 浏览器与服务器交互 在Web服务器中&#xff0c;请求资源又分为静态资源和动态…

代码随想录 Day8 栈(FILO)与队列(FIFO) LeetCode T232 用栈实现队列 LeetCodeT225 用队列实现栈

题目详细思路来自于:代码随想录 (programmercarl.com) 栈和队列都是大家不陌生的数据结构,我们之前的栈和队列一般是用数组或链表来实现的 , 这里我们给出实现方式,用于帮助更好的理解. 1.用链表实现栈 /* 基于链表实现的栈 */ class LinkedListStack { private ListNode sta…

聊聊MySQL的InnoDB引擎与MVCC

目录 一、InnoDB引擎 1.1逻辑存储结构 1). 表空间 2). 段 3). 区 4). 页 5). 行 1.2架构 1.2.1内存结构 1). Buffer Pool 2). Change Buffer 3). Adaptive Hash Index 4). Log Buffer 1.2.2磁盘结构 1). System Tablespace 2). File-Per-Table Tablespaces 3). …

Vue3之Suspense

<Suspense> 是一个内置组件&#xff0c;用来在组件树中协调对异步依赖的处理。它让我们可以在组件树上层等待下层的多个嵌套异步依赖项解析完成&#xff0c;并可以在等待时渲染一个加载状态。 我们可以看到官网并不推荐我们使用它&#xff0c;目前仍处于测试中。 他用于加…

VUE2项目:尚品汇-axios二次封装请求以及VUEX的状态管理库

上一篇&#xff1a;VUE2项目&#xff1a;尚品汇VUE-CLI脚手架初始化项目以及路由组件分析&#xff08;一&#xff09; 目录 axios二次封装API接口管理与解决跨域API接口管理nprogress进度条配置 VUEX状态管理库三级分类动态背景颜色防抖三级联动跳转路由分析 axios二次封装 项…

windows系统查看exe程序的依赖dll并拷贝到指定路径下

脚本 echo off REM windows_copy_depends.bat是脚本文件名&#xff0c;exe_path是exe文件的全路径&#xff0c;dll_folder_path是脚本当前路径下的文件夹名称 REM 如windows_copy_depends.bat E:\git_code\windows_docker_desktop\winget.exe 123 echo Usage: windows_copy_dep…

大数据-玩转数据-Flink Catalog

一、Catalog Catalog 提供了元数据信息&#xff0c;例如数据库、表、分区、视图以及数据库或其他外部系统中存储的函数和信息。 数据处理最关键的方面之一是管理元数据。 元数据可以是临时的&#xff0c;例如临时表、或者通过 TableEnvironment 注册的 UDF。 元数据也可以是持…

ES写入数据时:circuit_breaking_exception[[parent] Data too large

报错&#xff1a; circuit_breaking_exception[[parent] Data too large, data for [<transport_request>] would be [12318476937/11.2gb], which is larger than the limit of [12237372108/12.2gb], real usage: [12318456248/11.2gb]原因&#xff1a; &#xff08;…

Kafka收发消息核心参数详解

文章目录 1、从基础的客户端说起1.1、消息发送者主流程1.2、消息消费者主流程 2、从客户端属性来梳理客户端工作机制2.1、消费者分组消费机制 1、从基础的客户端说起 Kafka提供了非常简单的客户端API。只需要引入一个Maven依赖即可&#xff1a; <dependency><groupId…

【RabbitMQ实战】06 RabbitMQ配置

一、概述 一般情况下&#xff0c;可以使用默认的内建配置来有效地运行RabbitMQ&#xff0c;并且大多数情况下也并不需要修改任何 RabbitMQ的配置。当然&#xff0c;为了更加有效地操控 RabbitMQ&#xff0c;也可以利用调节系统范围内的参数来达到定制化的需求。 RabbitMQ提供…

《大师级引导-应对困境的工具与技术》读书笔记1

《大师级引导-应对困境的工具与技术》这个书&#xff0c;十分不错&#xff0c;教练和非教练都可以学习。下面是其中的关于冲突的处理&#xff1a; 定义&#xff1a;双方以解决冲突、说明关系为目的而进行的积极的、具有建设性的对话。 目的&#xff1a;制定双方协议&#xf…