暑假集训CSP提高模拟 25

暑假集训CSP提高模拟 25

组题人: @KafuuChinocpp | @H_Kaguya

\(T1\) P235.可持久化线段树 \(0pts\)

  • 弱化版: SP11470 TTM - To the moon

  • 标记永久化主席树板子。

    点击查看代码
    const ll p=998244353;
    ll a[100010];
    struct PDS_SMT
    {ll root[100010],rt_sum;struct SegmentTree{ll ls,rs,sum,lazy;}tree[100010<<5];#define lson(rt) tree[rt].ls#define rson(rt) tree[rt].rsll build_rt(){rt_sum++;return rt_sum;}void build_tree(ll &rt,ll l,ll r){rt=build_rt();if(l==r){tree[rt].sum=a[l];return;}ll mid=(l+r)/2;build_tree(lson(rt),l,mid);build_tree(rson(rt),mid+1,r);tree[rt].sum=(tree[lson(rt)].sum+tree[rson(rt)].sum)%p;}void update(ll pre,ll &rt,ll l,ll r,ll x,ll y,ll val){rt=build_rt();tree[rt]=tree[pre];tree[rt].sum=(tree[rt].sum+(min(r,y)-max(l,x)+1)*val%p)%p;if(x<=l&&r<=y){tree[rt].lazy=(tree[rt].lazy+val)%p;return;}ll mid=(l+r)/2;if(x<=mid){update(lson(pre),lson(rt),l,mid,x,y,val);}if(y>mid){update(rson(pre),rson(rt),mid+1,r,x,y,val);}}ll query(ll rt,ll l,ll r,ll x,ll y){if(x<=l&&r<=y){return tree[rt].sum;}ll mid=(l+r)/2,ans=0;if(x<=mid){ans=(ans+query(lson(rt),l,mid,x,y))%p;}if(y>mid){ans=(ans+query(rson(rt),mid+1,r,x,y))%p;}return (ans+tree[rt].lazy*(min(r,y)-max(l,x)+1)%p)%p;}
    }T;
    int main()
    {ll n,m,pd,l,r,x,c_cnt=0,i;cin>>n>>m;for(i=1;i<=n;i++){cin>>a[i];}T.build_tree(T.root[0],1,n);for(i=1;i<=m;i++){cin>>pd;if(pd==1){cin>>l>>r>>x;c_cnt++;T.update(T.root[c_cnt-1],T.root[c_cnt],1,n,l,r,x);}if(pd==2){cin>>l>>r;cout<<T.query(T.root[c_cnt],1,n,l,r)<<endl;}if(pd==3){cin>>x;c_cnt-=x;}}return 0;
    }
    

\(T2\) P208.Little Busters ! \(0pts\)

  • 原题: 2024牛客暑期多校训练营6 D Puzzle: Wagiri

  • Lun 边至少属于图中的一个环等价于 Lun 边连接的两个端点属于一个边双连通分量,Qie 边不属于图中的任意环等价于 Qie 边连接的两个端点不属于一个边双连通分量。

  • 部分分

    • \(20 \%\) :枚举每条边保留或不保留,然后 \(Tarjan\) 判断是否合法。
    • 另外 \(20 \%\) :缩完点后只能有一个点否则不满足题意。
    • 另外 \(20 \%\) :直接删成一棵树就行了。
    • 随机 \(pts\) :乱搞。
    点击查看代码
    struct node
    {int nxt,to,w,id;
    }E[200010];
    int head[200010],u[200010],v[200010],w[200010],dfn[200010],low[200010],c[200010],vis[200010],tot=0,cnt=0,scc_cnt=0;
    vector<pair<int,int> >e[200010],ans;
    stack<int>s;
    void add(int u,int v,int w,int id)
    {cnt++;E[cnt].nxt=head[u];E[cnt].to=v;E[cnt].w=w;E[cnt].id=id;head[u]=cnt;
    }
    void tarjan(int x,int fa)
    {tot++;dfn[x]=low[x]=tot;s.push(x);for(int i=0;i<e[x].size();i++){if(e[x][i].first!=fa){if(dfn[e[x][i].first]==0){tarjan(e[x][i].first,x);low[x]=min(low[x],low[e[x][i].first]);}else{low[x]=min(low[x],dfn[e[x][i].first]);}}}if(dfn[x]==low[x]){int k;scc_cnt++;do{k=s.top();s.pop();c[k]=scc_cnt;}while(k!=x);}
    }
    void tarjanE(int x,int fa)
    {tot++;dfn[x]=low[x]=tot;s.push(x);for(int i=head[x];i!=0;i=E[i].nxt){if(vis[E[i].id]==0&&E[i].to!=fa){if(dfn[E[i].to]==0){tarjanE(E[i].to,x);low[x]=min(low[x],low[E[i].to]);}else{low[x]=min(low[x],dfn[E[i].to]);}}}if(dfn[x]==low[x]){int k;scc_cnt++;do{k=s.top();s.pop();c[k]=scc_cnt;}while(k!=x);}
    }
    bool check(int state,int n,int m)
    {if(__builtin_popcount(state)<n-1){return false;}scc_cnt=tot=0;ans.clear();for(int i=1;i<=n;i++){dfn[i]=low[i]=c[i]=0;e[i].clear();}while(s.empty()==0){s.pop();}for(int i=0;i<=m-1;i++){if((state>>i)&1){e[u[i+1]].push_back(make_pair(v[i+1],w[i+1]));e[v[i+1]].push_back(make_pair(u[i+1],w[i+1]));ans.push_back(make_pair(u[i+1],v[i+1]));}}tarjan(1,0);for(int i=1;i<=n;i++){if(dfn[i]==0){return false;}}for(int i=1;i<=n;i++){for(int j=0;j<e[i].size();j++){if(e[i][j].second==1){if(c[i]!=c[e[i][j].first]){return false;}}else{if(c[i]==c[e[i][j].first]){return false;}}}}return true;
    }
    void dfs(int x,int fa)
    {vis[x]=1;for(int i=0;i<e[x].size();i++){if(vis[e[x][i].first]==0){cout<<x<<" "<<e[x][i].first<<endl;dfs(e[x][i].first,x);}}
    }	
    int main()
    {int n,m,flag1=1,flag2=1,state,i,j;string pd;cin>>n>>m;for(i=1;i<=m;i++){cin>>u[i]>>v[i]>>pd;w[i]=(pd=="Lun");flag1&=(w[i]==1);flag2&=(w[i]==0);}if(flag1==1){for(i=1;i<=m;i++){e[u[i]].push_back(make_pair(v[i],w[i]));e[v[i]].push_back(make_pair(u[i],w[i]));}tarjan(1,0);if(scc_cnt==1){cout<<"YES"<<endl;cout<<m<<endl;for(i=1;i<=m;i++){cout<<u[i]<<" "<<v[i]<<endl;}}else{cout<<"NO"<<endl;}}else{if(flag2==1){for(i=1;i<=m;i++){e[u[i]].push_back(make_pair(v[i],w[i]));e[v[i]].push_back(make_pair(u[i],w[i]));}cout<<"YES"<<endl;cout<<n-1<<endl;dfs(1,0);}else{if(m<=20){for(state=0;state<=(1<<m)-1;state++){if(check(state,n,m)==true){cout<<"YES"<<endl;cout<<ans.size()<<endl;for(i=0;i<ans.size();i++){cout<<ans[i].first<<" "<<ans[i].second<<endl;}return 0;}}cout<<"NO"<<endl;}else{for(i=1;i<=m;i++){add(u[i],v[i],w[i],i);add(v[i],u[i],w[i],i);e[u[i]].push_back(make_pair(v[i],w[i]));e[v[i]].push_back(make_pair(u[i],w[i]));}tarjan(1,0);for(int i=1;i<=n;i++){for(int j=head[i];j!=0;j=E[j].nxt){if(E[j].w==1){if(c[j]!=c[E[j].to]){vis[E[j].id]=1;}}else{if(c[j]!=c[E[j].to]){vis[E[j].id]=0;}}}}scc_cnt=tot=0;ans.clear();for(int i=1;i<=n;i++){dfn[i]=low[i]=c[i]=0;e[i].clear();}while(s.empty()==0){s.pop();}tarjanE(1,0);for(int i=1;i<=n;i++){if(dfn[i]==0){cout<<"NO"<<endl;return 0;}}for(int i=1;i<=n;i++){for(int j=0;j<e[i].size();j++){if(e[i][j].second==1){if(c[i]!=c[e[i][j].first]){cout<<"NO"<<endl;return 0;}}else{if(c[i]==c[e[i][j].first]){cout<<"NO"<<endl;return 0;}}}}for(i=1;i<=m;i++){if(vis[i]==0){ans.push_back(make_pair(u[i],v[i]));}}cout<<"YES"<<endl;cout<<ans.size()<<endl;for(i=0;i<ans.size();i++){cout<<ans[i].first<<" "<<ans[i].second<<endl;}}}}return 0;
    }
    

\(T3\) P220.魔卡少女樱 \(45pts\)

  • 部分分
    • \(65pts\) :设 \(f_{i,j}\) 表示当前处理到 \(i\) 时,且 \(a_{i}=j\) 的合法方案数,状态转移方程为 \(f_{i,j}=\sum\limits_{k=0}^{j-1}[k \not \equiv j \pmod{3}] \times f_{i-1,k}=\sum\limits_{k=0}^{j-1}f_{i-1,k}-\sum\limits_{k=0}^{j-1}[k \equiv j \pmod{3}] \times f_{i-1,k}\) ,边界为 \(f_{1,i}=[i+n-1 \le m]\) 。前缀和优化后时间复杂度为 \(O(nm)\)

      点击查看代码
      const ll p=998244353;
      int f[2][10000010],sum[5];
      int main()
      {int n,m,ans=0,i,j;cin>>n>>m;if(n-1<=m){for(i=0;i<=m;i++){f[1][i]=(i+n-1<=m);}for(i=2;i<=n;i++){sum[0]=sum[1]=sum[2]=sum[3]=0;for(j=0;j<=m;j++){f[i&1][j]=(sum[3]-sum[j%3]+p)%p;sum[j%3]=(sum[j%3]+f[(i-1)&1][j])%p;sum[3]=(sum[3]+f[(i-1)&1][j])%p;}}for(i=n-1;i<=m;i++){ans=(ans+f[n&1][i])%p;}cout<<ans<<endl;}else{cout<<0<<endl;}return 0;
      }
      
  • 正解

\(T4\) P202.声之形 \(5pts\)

  • 原题: 2024牛客暑期多校训练营5 K 思
  • 部分分

总结

  • \(T1\) 因不会算结构体变量空间和提交前没有再编译一遍,挂了 \(100pts\)
  • \(T2\) 提交前没有再编译一遍,挂了 \(60pts\)
    • 我再也不相信 C/C++ 的报错了。。。
  • \(T3\) 结束前 \(10 \min\) 前原 \(O(nm^{2})\) 的做法才发现可以前缀和优化,过了小样例后就直接交了,忘删每次 \(O(m)\) 的清空了,挂了 \(25pts\)

后记

  • \(T1\) 原本在 @H_Kaguya 可持久化数据结构课件里做例题,没想到他和教练会为了检验我们有没有掌握将其放在了 \(T1\) 的位置。而 luogu P4690 [Ynoi2016] 镜中的昆虫 因被出到模拟赛里作为 \(T4\) ,他干脆没讲,只透露了会有一道珂朵莉树的题在模拟赛里等着我们,详见 暑假集训CSP提高模拟20 T4 P128. 穗 。
  • \(T3\) 在前几天于题库中曾被公开过,组题人貌似泄题了也没管。

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

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

相关文章

[Flink] Flink 序列化器

Flink 序列化器依赖包及版本信息org.apache.kafka:kafka-clients:${kafka-clients.version=2.4.1}org.apache.flink:flink-java:${flink.version=1.12.6} org.apache.flink:flink-clients_${scala.version=2.11}:${flink.version} org.apache.flink:flink-streaming-java_${sca…

怎么在pycharm里面写.md文件

一、插件安装 如果不清楚自己的PyCharm是否自带Markdown,可以在File - settings - Plugins - installed中查看是否有“Markdown”插件。 如果没有安装,可以在File - settings - Plugins - Marketplace中搜索“Markdown”安装。二、创建Markdown文件 在Pycharm中,Markdown(.m…

香城档案利用 NocoBase 快速实现智能档案管理

探索香城档案如何通过 NocoBase 革新档案管理,通过智能系统和强大的自动化技术提高效率。关于档案管理行业 档案管理历史悠久,最早可追溯至周朝。周文王姬昌非常重视档案管理,他命令手下的管理者将这些文献和档案进行整理和分类,然后存放在专门的档案馆中。这些档案馆也被称…

无线露点监测仪器在线式4G/WiFi传输MQTT协议对接云平台

无线露点温度环境检测仪器,传感变送器。4G/WiFi/LoRa无线传输,在线式监测压缩空气露点,高精度,具备加热抗结露功能,适用于电池生产、半导体制造、干燥系统、实验室等高精度控制湿度的场景。配套云平台可在手机app电脑端远程查看实时历史数据。

vCenter通过修改主机配置文件来重置ESXi主机root密码

背景:管理员一般通过vCenter来管理ESXi主机,时间长了,ESXi主机的root密码忘记了,本文主要介绍在vCenter中通过修改主机配置文件来修改ESXI主机的root密码,不用重启ESXI主机。 1、提取主机配置文件 选中要操作的主机,右键选择“主机配置文件”>>点击“提取主机配置文…

「代码随想录算法训练营」第四十二天 | 单调栈 part2

42. 接雨水题目链接:https://leetcode.cn/problems/trapping-rain-water/ 文章讲解:https://programmercarl.com/0042.接雨水.html 题目难度:困难 视频讲解:https://www.bilibili.com/video/BV1uD4y1u75P/ 题目状态:这道题目在LeetCode Top100中做过,使用两种方法,再回顾…

深入理解双变量(二元)正态投影:理论基础、直观解释与应用实例

在统计学和机器学习中,理解变量之间的关系对于构建预测模型和分析数据至关重要。探索这些关系的一种基本技术是双变量投影 bivariate projection。它依赖于二元正态分布的概念,所以又被称为二元投影。这种技术允许我们根据另一个变量来检验和预测一个变量的行为,利用它们之间的…

校验和

1. 对应数据位累加和: 需确认协议规定是从哪一位累加到哪一位,以及对应到代码中rd_cnt[7:0]是从第几位累加到第几位。//校验和 reg [15:0] rcvCLJ_SUM; always @(posedge SYS_CLK or negedge sys_rst_n ) beginif(!sys_rst_n) rcvCLJ_SUM <= 16d0;else if(rd_cnt>8d2 &…

Docker 入门文档阅读笔记

Docker 的架构图片来自 Docker 官网教程 Docker 采用 CS 架构, 可以通过 CLI 和 API 与 Docker daemon 进行交互。 Docker Objects Images (镜像) An image is a read-only template with instructions for creating a Docker container. Often, an image is based on anothe…

顶尖待办事项软件对比:找到你的最佳匹配

国内外主流的10款待办事项管理软件对比:PingCode、WorktileTodoist、TickTick、Teambition、 Microsoft To Do、. Asana、Tower、番茄ToDo、飞书。在面对日益复杂的工作和个人任务时,找到一款能够有效帮助你管理日常待办事项的软件,变得越来越重要。无论是在提高个人生产力,…

Oracle RAC 集群启动顺序 转发:https://www.modb.pro/db/1824295923545612288?utm_source=index_ori

前言 前几天使用脚本在 RockyLinux 9.4 安装 Oracle 11GR2 RAC,安装完之后发现集群无法正常启动,后经过分析发现原来是因为 RHEL9 版本默认安装移除了 initscripts 软件包,需要人为手动安装,在 RHEL8 之前是默认安装的。 在分析问题的过程中,顺便对 Oracle RAC 集群启动顺…

SHELL之数值运算

【四则运算符号】表达式 举例$(( )) echo $((1+1))$[ ] echo $[10-5]expr expr 10 / 5 (运算符左右有空格)let n=1;let n+=1 等价于 let n=n+1一、整数运算 1、基本运算类别加法:+ 减法:- 乘法:* 整除:/ 取余数:%2、expr运算工具加法:+ 减法:- 乘法:* 整除:/ 取余数…