当前位置: 首页 > news >正文

【题解】10.6 国庆中秋 提高组 热身赛

1.栅栏密码

题目传送门

题目大意:
给定高度 h 和一行使用栅栏密码加密的密文字符串 s,请你输出一行明文字符串 plain。
即把明文排列成若干个 \/\/\/ 的形状,然后再逐行按从左到右的顺序取出字符,形成密文。

STEP 1.

直观一点,用数字来表示一下:

1###5###9
#2#4#6#8#10
##3###7###11

即可排列出 1 5 9 2 4 6 8 10 3 7 11.

进而发现:
\(1^{+3\curvearrowright}5^{+3\curvearrowright}9\)
\(2^{+2\curvearrowright}4^{+2\curvearrowright}6^{+2\curvearrowright}8^{+2\curvearrowright}10\)
\(3^{+3\curvearrowright}7^{+3\curvearrowright}11\)

再看一组:

1#####7#####13
#2###6#8###12
##3#5###9#11
###4#####10

即可排列出 1 7 13 2 6 8 12 3 5 9 11 4 10.

进而发现:
\(1^{+6\curvearrowright}7^{+6\curvearrowright}13\)
\(2^{+4\curvearrowright}6^{+2\curvearrowright}8^{+4\curvearrowright}12\)
\(3^{+2\curvearrowright}5^{+3\curvearrowright}9^{+2\curvearrowright}11\)
\(4^{+6\curvearrowright}10\)

STEP 2.

可以发现,当 \(h\)\(3\) 时,一共分成了 \(3\) 行,打乱前的\(1\)\(5\)\(9\)分别变成了打乱后的第\(1\)\(2\)\(3\)个数,相邻两个数之间相差 \(2\space·(h−1)\),第 \(h\) 行同理。

观察第 \(2\) 行发现,首行和尾行的间隔不变,若行数为 \(i\),当前数为第 \(2\) 行的第奇数个数的时候,下一个数字下标就多 \(2\space·(h−i)\),若当前数为第 \(2\) 行的第偶数个数的时候,下一个数字下标就多 \(2\space·(i−1)\)。而且每一行的第一个数字就是这一行的行数。

具体来说,

\( next(x)=\begin{cases} x+2\space·(h-i)\qquad i\%2=1\\ x+2\space·(i-1)\qquad i\%2=0 \end{cases} \)

STEP 3.

根据此思路,我们可以写出代码:

代码(凭良心复制)
#include<bits/stdc++.h>
using namespace std;
string s;
char ans[100080];
int hang=0;
int h,n,x,y;
int main(){cin>>h>>s;n=s.size();s=" "+s;hang=x=y=1;for(int i=1;i<=n;i++){ ans[x]=s[i];if(hang==1||hang==h)x+=(h-1)*2;//在两端else{if(y%2==1)x+=(h-hang)*2;  //在奇数列else x+=2*(hang-1);       //在偶数列}y++;if(x>n){//超出了x=++hang;//换行y=1;}}for(int i=1;i<=n;i++)cout<<ans[i];return 0;
}

2.旅行计划

题目传送门

题目大意:
给定一个有向图,求得以第 i 个节点为终点的最长路径

STEP 1.

看到以第 i 个节点为终点就可以想到需要反向存边,这样终点就变为起点了.

由于只能向一个方向走,所以就为有向图。

STEP 2.

挺简单的,写个 DFS 就可以了

根据此思路,我们可以写出代码:

代码(凭良心复制)
#include<bits/stdc++.h>
using namespace std;
int dis[100005],n,m,x,y;
vector<int> mp[100005];
int dfs(int n){if(dis[n]!=0)return dis[n];dis[n]=1;for(auto it:mp[n]){dis[n]=max(dis[n],dfs(it)+1);}return dis[n];
}
int main(){cin>>n>>m;for(int i=1;i<=m;i++){cin>>x>>y;mp[y].push_back(x);//反着存}for(int i=1;i<=n;i++){dfs(i);}for(int i=1;i<=n;i++){cout<<dis[i]<<'\n';}return 0;
}

2.商务旅行

题目传送门

题目大意:

STEP 1.

STEP 2.

代码(凭良心复制)
http://www.rkmt.cn/news/16976.html

相关文章:

  • UCB-CS70个人笔记:至少和至多 - Zeeh
  • vscode使用“EIDE”和“Cortex-Debug”插件利用st-link插件达成程序烧写以及调试工作
  • C#中数据绑定的简单例子 - 详解
  • Spring Boot整合Druid与Dynamic-Datasource多数据源安装:从错误到完美解决
  • 用 Perl 实现验证码图像识别
  • cnblog Test
  • Claude 封杀中国后,我终于找到了平替!
  • pandoc使用
  • Exp2-后门原理与实践
  • DirectX-Graphics-Samples
  • 数学之美感悟。
  • 十所高校角逐对话式AI任务机器人挑战赛
  • SCIM漏洞挖掘实战指南
  • 虚拟文件系统
  • 代码随想录算法训练营第十天 | leetcode 232 225 20 1047
  • 2025冲压件厂家权威推荐榜:冲压件/新能源冲压件/光伏冲压件/精密冲压件/异形冲压件/五金冲压件/铝冲压件/汽配冲压件/不锈钢冲压件/家具冲压件厂家公司精密制造与品质保障实力之选
  • 简单搭建Ajax基础应用
  • 修改注册表,实现电脑小键盘开机自启(NumLock灯常亮)
  • 完整教程:nav2笔记-250603
  • 点云的遮挡剔除
  • 自制带得分和推荐走法的象棋视频
  • 深入解析:展会聚焦丨漫途科技亮相2025西北水务博览会!
  • 2025.10.7——2绿
  • 完整教程:无人机避障——感知部分(Ubuntu 20.04 复现Vins Fusion跑数据集)胎教级教程
  • 2025.10.6——1绿1蓝
  • 地球科学概论
  • Spring5笔记
  • qmd 模拟赛的一道题
  • PCoT: Persuasion-Augmented Chain of Thought for Detecting Fake News and Social Media Disinformation
  • 宏定义中,为什么使用:do{}while(0)这种模式是最安全的