2024.11.142024.11.15模拟赛

news/2024/11/15 14:50:04/文章来源:https://www.cnblogs.com/Myyy-L/p/18545941

14日:

四个小时的模拟赛,四道小清新计数题。前面时间状态还是不太好,一个多小时把T1搞出来了,T2T3T4都不会,暴力也没打成。

T1又顺便挂了20分,所以最后总分只有80。是得好好调整状态了。

题目大链接


T1【字符串】

题目大意:

给出两个字符串\(s,t\),要求求出所有\(x\)的个数,使得\(x=p+q\)\(p,q\)分别是\(s\)串的非空前缀、\(t\)串的非空后缀)

\(n=|s|,m=|t|,1\leqslant n,m\leqslant 10^{6}\)

解题思路:

所有\(x\)的个数即为\(n\times m\),但由于\(s,t\)串中重复的字符拼接时会导致相同的\(x\)被统计两次,所以需要统计字符串中相同的字符后去重,总数减去一个字符在\(s\)串出现的次数乘在\(t\)串中出现的次数即可。

但!注意到前后缀非空,所以统计字符时要跳过\(s_{1}\)\(t_{m}\)

挂分小技巧:取模出错。

坏代码
#incIude <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+5;
const int MOD=998244353;
char s1[N],s2[N];
int a1[N],a2[N];
int cnt1,cnt2;
int bx1[N],bx2[N];
int ans;signed main()
{scanf("%s%s",s1,s2);for (int i=0;s1[i]!='\0';i++) a1[++cnt1]=(int)(s1[i]-'a');//闲的for (int i=0;s2[i]!='\0';i++) a2[++cnt2]=(int)(s2[i]-'a');ans=(cnt1*cnt2)%MOD;for (int i=2;i<=cnt1;i++) bx1[a1[i]]++;for (int i=1;i<cnt2;i++) bx2[a2[i]]++;for (int i=0;i<26;i++) ans=(ans-(bx1[i]*bx2[i])%MOD+MOD)%MOD;//注!意!取!模!printf("%lld",ans);return 0;
}

T2【艾特扣德】

待补。

15日:

抽象的题目。不多做评价了。

打了T1的正解,T2的“暴力”,预计总分140。但T1没注意到\(\Sigma n\)\(10^{6}\),多测初始化初始炸了;T2数据太水,导致暴力完全能过,但是因特判特殊数据特判的不对所以炸了,实际上T1 60分,T2 80分,总分140分。一切的一切都说得过去,但是……

挂了整整60分!!再次与第二失之交臂!!!

题目小链接


T1【最优排序】

题目大意:

给出一个值域为\([1,n]\)的排列\(p\),每次操作可以选取至多四个互不相同的位置,并任意交换他们的位置。求最少操作几次可以使\(p\)升序排列。\((1\leqslant T,n,\Sigma n\leqslant 10^{6})\)

解题思路:

看到这道题又手模了一会儿,突然联想到之前模拟赛的T3,于是就开始非常激动地建图……统计……然后炸了。

我们可以将不好的\(p_{i}\)指向\(i\),我们可以想到一定存在若干个\(p_{i}\),交换他们之间的位置后一定合法,手模后发现这些\(p_{i}\)会形成一个环。于是乎,我们可以建图后统计出所有环的节点个数以计算答案。

对于一个节点数量为\(t_{i}\)的环,我们可以先取到相邻4个节点并进行交换,我们容易发现一次操作会产生一个不合法的\(p_{i}\)与三个合法的\(p_{j}\),那么下一次操作包含上次不合法的\(p_{i}\)与3个新的\(p_{j}\)即可,重复以上操作就可以使整个环合法。

所以,对于该环就要操作\(\lceil\frac {t_{i}}{3}\rceil\)次。但是!可以想到,要是最后只用操作两个点的话,那么这次操作可以和其他环一起操作,最后答案即\(\Sigma^{m}_{i=1}{\lfloor\frac{t_{i}}{3}\rfloor}+\lceil\frac{\Sigma^{m}_{i=1}[t_{i} mod 3 =2]}{2}\rceil\)

因为这题情况非常简单,所以根本不用跑\(Tarjan\),跑个\(dfs\)就行。且,初始化补药\(memset\),重复到\(n\)就行,不然会炸。

坏代码
#incIude <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+5;
int T;
int n;
int p[N];
vector <int> e[N];
int vis[N];
int ans,tol;void init()
{for (int i=0;i<=n;i++) e[i].clear();for (int i=0;i<=n;i++) vis[i]=0;ans=tol=0;
}
int dfs(int x)
{vis[x]=1;int res=1;int _size=e[x].size();for (int i=0;i<_size;i++){int v=e[x][i];if (vis[v]) continue;res+=dfs(v);}return res;
}
signed main()
{scanf("%lld",&T);while (T--){init();scanf("%lld",&n);for (int i=1;i<=n;i++){scanf("%lld",&p[i]);if (p[i]==i) continue;e[i].push_back(p[i]);}for (int i=1;i<=n;i++){if (!vis[i]&&p[i]!=i){int cnt=dfs(i);ans+=cnt/3;if (cnt%3==2) tol++;}}printf("%lld\n",ans+(tol+1)/2);}return 0;
}

T2【图上移动】

题目大意:

给出一个\(n\)个节点、\(m\)条边的无向图,可以给每个点赋值,要求找到一条最长的路径,使得每次移动都是向当前节点相邻权值最小的节点移动。\((1\leqslant n\leqslant 40)\)

解题思路:

爆搜。期望得分100,特判失败,实际得分80。

容易发现,我们的路径上不能走完一个环,否则无法达到要求。所以直接枚举起点\(dfs\),若与当前节点相连的节点曾经走过的话,那么当前节点不可走,直接return回去即可。

神奇代码
#incIude <bits/stdc++.h>
#define int long long
using namespace std;
const int N=50;
int n,m; 
vector <int> e[N];
int ans;
int vis[N];void dfs(int x,int _fa,int tol)
{vis[x]=vis[_fa]+1;int _size=e[x].size();for (int i=0;i<_size;i++){int v=e[x][i];if (v!=_fa&&vis[v]) return ;}for (int i=0;i<_size;i++){int v=e[x][i];if (v==_fa) continue;dfs(v,x,tol+1);vis[v]=0;}ans=max(ans,tol);return;
}
signed main()
{scanf("%lld%lld",&n,&m);for (int i=1,u,v;i<=m;i++){scanf("%lld%lld",&u,&v);e[u].push_back(v);e[v].push_back(u);}for (int i=1;i<=n;i++) {memset(vis,0,sizeof vis);dfs(i,0,1);}printf("%lld",ans);return 0;
}

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

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

相关文章

微短剧出海新攻略:多语言翻译提效,窄带高清降本,合规之下畅享极致播放

短剧出海「 全能力解锁 」快速轻装,一站出海。 短剧出海作为近两年的蓝海赛道,发展潜力惊人,据机构报告数据显示,2023国内短剧市场规模达53亿美元,而海外短剧市场规模高达650亿美元,全球市场发展潜力巨大。 想要在规模激增的全球内容市场中稳健出海,技术可以提效降本,…

井底车场人员进入识别智慧矿山一体机罐笼乘坐人员超限识别重塑矿山作业模式,提升管理效能

在矿山行业,安全始终是最重要的议题之一。随着科技的进步,智能化设备的应用已经成为提升矿山安全管理水平的关键。智慧矿山一体机,作为新一代的智能化解决方案,正是在这样的背景下应运而生。它不仅是一款设备,更是一个全面整合的安全管理系统,旨在通过前沿的人工智能技术…

使用 JuiceFS 快照功能实现数据库发布与端到端测试

今天的博客来自 JuiceFS 云服务用户 Jerry,他们通过使用 JuiceFS snapshot 功能,创新性地实现了数据的版本控制。Jerry,是一家位于北美的科技公司,利用人工智能和机器学习技术,简化用户购买汽车和家庭保险的比较及购买流程。在软件开发领域,严格的测试和受控发布已经成为…

xshell免费版下载安装

1.官网免费的许可证 2.下载地址https://www.xshell.com/zh/free-for-home-school/ 3.下载完正常安装即可,可以直接使用邮箱进行注册,没有限制

多线程篇线程相关知识

一、线程状态 线程是 cpu 任务调度的最小执行单位,每个线程拥有自己独立的程序计数器、虚拟机栈、本地方法栈。线程状态包括:创建、就绪、运行、阻塞、死亡。二、线程状态切换三、阻塞唤醒过程 阻塞 以下三个方法的调用都会使当前线程阻塞,该线程将会被放置到对该 Object 的…

打造高效电商团队:项目管理工具选对了吗?

在竞争日益激烈的电商行业,商家和运营团队需要面对多维度的挑战——从活动策划、产品上架,到物流协调和售后服务,每个环节都需要精确管理和无缝衔接。如何在高强度的竞争中脱颖而出,实现团队协作效率的提升?项目管理工具正逐渐成为电商企业的必备利器,助力团队优化流程、…

人员背带夹佩戴识别智慧矿山一体机违规抽烟识别软硬一体化矿山智能解决方案

在当今这个快速发展的数字化时代,智慧矿山的建设已经成为矿业领域转型升级的重要方向。为了实现矿山的智能化、自动化和信息化提出了一套全面的解决方案,人员背带夹佩戴识别智慧矿山一体机旨在通过技术创新和系统集成,打造一个高效、安全、环保的智慧矿山环境。以下是对智慧…

数据采集第四次作业

代码链接:第四次数据采集实践作业码云链接 作业① 1 作业要求熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。 使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。 候选网站:东方财富网:…

使用css 画三角形的三种方法

使用纯css 绘制三角形 方法一 使用边框实现先实现一个div 四个粗边框 不同颜色 保留左右和下边框 设置左右边框为颜色为 transparent<body><div class="div1"></div><div class="div2"></div> <div class="div3&…

代码分析工具小结

本文介绍了用于C++代码的分析工具,包括3款静态分析工具和3款动态分析工具。此文总结在平时开发过程中使用到的代码分析工具,分为静态分析和动态分析两个部分,本文只介绍Windows平台的工具。 静态代码分析 CppCheck CppCheck是一款经典的C/C++静态代码检查工具,笔者最开始使…

成为行动上的巨人

总是看到别人的微博,有学习到,有被感到到,有醍醐灌顶到,也有被大开脑洞的时候。今天有了自己的博客,记录学习中的点点滴滴,也希望自己不再是只在知识的边缘磨磨蹭蹭, 而是挖掘进去,进而能够知其然又知其所以然。希望笔记成为自己知识的沉淀和积累,也希望 能够帮助到那…

a-modal打开页面报错Ancestor with aria-hidden

报错信息Blocked aria-hidden on an element because its descendant retained focus. The focus must not be hidden from assistive technology users. Avoid using aria-hidden on a focused element or its ancestor. Consider using the inert attribute instead, which w…