梦熊联盟2025 -- 云智计划 -- 1 月 27 日 --【CSP-S】模拟赛 #7 div2 T1~T3 题解 附T4的50分法

T1:科技树(TechTree)

题目大意

给你一棵树,每一次你可以点一个没点过的点,问你任意一个点最早什么时候点?最晚什么时候点?

解法

题目都已经说了,是树,那么最早就是它前面所有的前置科技都已经点完之后再点它,即 \(dfn_x\)。最晚的即是以它为根的这棵子树不点,其他的都点。因为以他为根的这棵子树里面必须要点他,而其他的点对他没有任何要求,即 \(n-siz_x\)

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=1e5+5;
vector<int> g[maxn];
int dep[maxn],siz[maxn];
void dfs(int x,int fa)
{siz[x]=1,dep[x]=dep[fa]+1;for(auto &to:g[x]){if(to==fa) continue;dfs(to,x);siz[x]+=siz[to];}
}
signed main()
{freopen("TechTree.in","r",stdin);freopen("TechTree.out","w",stdout);ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);int t;cin>>t;while(t--){int n;cin>>n;for(int i=1;i<n;i++){int u,v;cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}dfs(1,0);for(int i=1;i<=n;i++) cout<<dep[i]<<' '<<n-siz[i]+1<<'\n';for(int i=1;i<=n;i++) g[i].clear();}return 0;
}

T2:B. 增益选择(Buff)

题目大意

给你一个长度为数 \(n\) 的数组 \(a\),问你任意选两个点,这两个点之比积更大,有多少种方案?

解法

我们想一想有什么情况两个数之和比积更大?

  • 负数乘正数
  • 正数乘0
  • 正数乘1(含1)

所以我们只需要统统计正数,负数,0和1的个数即可。

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=1e6+5;
signed main()
{freopen("Buff.in","r",stdin);freopen("Buff.out","w",stdout);ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);int t;cin>>t;while(t--){int n,cntz=0,cntf=0,cnt1=0,cnt0=0;cin>>n;for(int i=1;i<=n;i++){int x;cin>>x;if(x>0) cntz++;if(x<0) cntf++;if(x==1) cnt1++;if(x==0) cnt0++;}int ans=0;ans+=cntz*cntf;//正数*负数ans+=cnt1*(cntz-cnt1);//正数*1(不含1)ans+=cnt1*(cnt1-1)/2;//1*1ans+=cnt0*cntz;//0*正数cout<<ans<<endl;}return 0;
}

T3:C. 树状数组(FenwickTree)

题目大意

给你一棵树状数组 \(c\) 的某位是否为0,请问至少操作多少次才能变成 \(c\)(具体数值自定,只需满足是否为0即可)?

解法

根据树状数组的原理,我们可以知道:

$ c_x=\sum^x_{i=x-lowbit(x)+1} a_i$

其中\(lowbit(x)\)\(x\)的因数中最大的2的幂次方。如 \(lowbit(12)=4\)

\(lowbit(x)=2^d\)\(c_x\) 可以进一步表示成:

\(c_x=a_x+\sum^{d-1}_{i=0} c_{x-2^i}\)

比如 \(c_{16}=a_{16}+c_{15}+c_{14}+c_{12}+c_{8}\)

至此不难发现,每一个位置只跟 \(a_c\)\(c_{x-2^i}\) 有关,且每个位置至多操作一次。可以得出以下结论:

  1. 如果 \(c_x\) 为0且 \(c_{x-2^i}\) 中仅有一个非零,那么 \(a_x\) 必须被操作一次。
  2. 如果 \(c_x\) 不为0且 \(c_{x-2^i}\) 中只有零,那么 \(a_x\) 必须被操作一次。

从前往后扫一遍,每个位置最多来一遍时间复杂度为 \(O(n)\)

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=2e5+5;
int a[maxn];
signed main()
{freopen("FenwickTree.in","r",stdin);freopen("FenwickTree.out","w",stdout);ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);int t;cin>>t;while(t--){int n,ans=0;cin>>n;for(int i=1;i<=n;i++){char c;cin>>c;a[i]=c-'0';}for(int i=1;i<=n;i++){int cnt=0,d=i&(-i);for(int j=1;j<d;j*=2) cnt+=a[i-j];if(a[i]==0&&cnt==1) ans++;if(a[i]!=0&&cnt==0) ans++;}cout<<ans<<'\n';}return 0;
}

附:T4:D. 部队编号(Code) 50pts

题目大意

给你一个字符串 \(s\) 问里面有多少个“114514”串?

“114514” 定义:其可以分成6段非空的子段,其中第一段、第二段和第五段是相同的,第三段和第六段是相同的;

50pts解法

不难发现,一共就只有3种子串,枚举三者的长度与起点,判断一下即可。好悬啊

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=15;
signed main()
{freopen("Code.in","r",stdin);freopen("Code.out","w",stdout);ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);int t;cin>>t;while(t--){string s;cin>>s;int n=s.size(),ans=0;s=' '+s;for(int i=1;i<=n;i++){for(int j=1;j+i+j+i+i<=n;j++){for(int k=1;i+j+k+i+j+i<=n;k++){for(int l=1;l+i+j+k+i+j+i-1<=n;l++){string s1=s.substr(l,i),s2=s.substr(i+l,i),s3=s.substr(i+i+l,j)//且由于其中有一个子串没有任何要求,所以就五个。,s5=s.substr(i+i+j+k+l,i),s6=s.substr(i+i+j+k+i+l,j);if(s1==s2&&s2==s5&&s3==s6) ans++;}}}}cout<<ans<<endl;}return 0;
}

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

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

相关文章

1. 2025年:致每一位在软件测试道路上奋斗的伙伴

亲爱的读者朋友们: 新年好!时光荏苒,转眼间我们已经迈入2025年。在这辞旧迎新的时刻,我怀着无比感恩的心情,向一路相伴的每一位软件测试从业者、爱好者以及关注者们致以最诚挚的祝福!愿大家在新的一年里,健康平安,事业有成,代码无Bug,需求皆清晰! 过去的一年,是软件测试行业蓬勃…

执行npm run dev时,报错10% building 2/5 modules 3 active node,如何解决?

错误信息如下:原因:版本问题,为了不替换node版本使用如下方法 在package.json文件下 将 "dev": " vue-cli-service serve", "build:prod": "vue-cli-service build", "build:stage": "vue-cli-service build --mode…

Make your ternimal more useful

目录引入Iterm2配置和Zshell配置TmuxVim配置基本使用插件配置Coc默认配置快捷键说明NerdTree快捷键分屏:Buffer, Windows和Tab 引入 本着好程序员要用好终端的信念,加之在使用mac过程中对快捷键依赖度增加,对鼠标的依赖逐渐减少,所以打算尝试配置终端的代码编写环境。 不曾…

龙哥量化:通达信技术指标编写技巧分享篇1-成交量和换手率

龙哥微信:Long622889代写通达信技术指标、选股公式(通达信,同花顺,东方财富,大智慧,文华,博易,飞狐)代写期货量化策略(TB交易开拓者,文华8,金字塔) 春节假期, 和朋友闲聊,发现在选股思路上很杂乱, 完全没有体系,但是大致可以分为两种,趋势策略和震荡策略,其…

昆明理工大学材料科学与工程学院 2025年硕士研究生招生预测调剂名额 (供考生提前规划)

亲爱的考生: 为助力各位考生提前规划考研调剂方向,昆明理工大学材料科学与工程学院结合近年招生趋势及学科发展需求,预测2025年材料工程相关专业将有部分调剂名额,具体信息如下。欢迎符合条件的考生持续关注! 一、预测调剂专业及名额注: 最终调剂名额以2025年研招网官方发…

hive-pig--pig安装

1.下载 curl https://dlcdn.apache.org/pig/pig-0.17.0/pig-0.17.0.tar.gz -o /opt/software/pig-0.17.0.tar.gz2.解压 tar -zxvf /opt/software/pig-0.17.0.tar.gz -C /usr/local/src/ mv /usr/local/src/pig-0.17.0/ /usr/local/src/pig 3.把二进制路径添加到命令行路径 echo…

PyTorch生态系统中的连续深度学习:使用Torchdyn实现连续时间神经网络

神经常微分方程(Neural ODEs)是深度学习领域的创新性模型架构,它将神经网络的离散变换扩展为连续时间动力系统。与传统神经网络将层表示为离散变换不同,Neural ODEs将变换过程视为深度(或时间)的连续函数。这种方法为机器学习开创了新的研究方向,尤其在生成模型、时间序…

[ArkUI] 记录一次 ArkUI 学习心得 (1) -- 基础概念

1.一个原生鸿蒙应用的源码目录其中:ets是项目的源码目录.ets/pages是页面目录, 用于渲染页面.resources是资源目录,下面会讲. 2.第一个原生鸿蒙应用 话不多说,直接上代码. @Entry @Component struct Index {@State message: string = My First Program!;@State num: number = 0…

互联网已经没法用了

图片:作者制作我们已经到了这样的地步——曾经能让我们随时随地获取全世界信息的互联网,现在已经完全没法用了。 罪魁祸首是广告,情况糟糕到一种极端的程度,以至于它被称为“广告末日”(adpocalypse)。 现在我打开的几乎每个网站都塞满了广告,整个页面都快撑爆了。在电脑…

uniCloud(dcloud.net.cn)https证书配制

前端网页托管-->参数配置-->域名信息-->更新证书 阿里云 https--SSL证书获取

Cisco Catalyst 9800-CL Wireless Controller for Cloud, IOS XE Release 17.16.1 ED - 思科虚拟无线控制器系统软件

Cisco Catalyst 9800-CL Wireless Controller for Cloud, IOS XE Release 17.16.1 ED - 思科虚拟无线控制器系统软件Cisco Catalyst 9800-CL Wireless Controller for Cloud, IOS XE Release 17.16.1 ED 面向云的思科 Catalyst 9800-CL 无线控制器,专为基于意图的网络全新打造…

Cisco Catalyst 9800 Wireless Controller, IOS XE Release 17.16.1 ED - 思科无线控制器系统软件

Cisco Catalyst 9800 Wireless Controller, IOS XE Release 17.16.1 ED - 思科无线控制器系统软件Cisco Catalyst 9800 Wireless Controller, IOS XE Release 17.16.1 ED 思科 Catalyst 9800 系列无线控制器 IOS XE 系统软件 请访问原文链接:https://sysin.org/blog/cisco-cat…