2024.5.25晚训题解

2024-05-26 01:20
文章标签 25 题解 晚训 2024.5

本文主要是介绍2024.5.25晚训题解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这套题挺简单的。。。
在这里插入图片描述
A题 AC率差不多100%
B题 AC率差不多75%
C题 AC率也差不多75%
D题 AC率 50%
E题 AC率 25%
向着top 1%出发

A题题解
Stair, Peak, or Neither?
简单判断题,自己写

#include<bits/stdc++.h>
using namespace std;
int A[5];
int main() {int t;scanf("%d",&t);while(t--){for(int i=1;i<=3;i++){scanf("%d",&A[i]);}if(A[1]<A[2]&&A[2]<A[3]){printf("STAIR\n");}else if(A[1]<A[2]&&A[2]>A[3]){printf("PEAK\n");}else{printf("NONE\n");}}return 0;
}

B题题解
找规律,算出每个矩形的最左上角坐标不就可以填充了

#include<bits/stdc++.h>
using namespace std;
char s[45][45];
int main() {int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);int op=0;for(int i=1;i<=n;i++){if(i%2)op=0;else op=1;for(int j=1;j<=n;j++){if(op%2==1){s[i*2-1][j*2-1]='.';s[i*2-1][j*2]='.';s[i*2][j*2-1]='.';s[i*2][j*2]='.';op=(op+1)%2;}else{s[i*2-1][j*2-1]='#';s[i*2-1][j*2]='#';s[i*2][j*2-1]='#';s[i*2][j*2]='#';op=(op+1)%2;}}}for(int i=1;i<=2*n;i++){for(int j=1;j<=2*n;j++){printf("%c",s[i][j]);}printf("\n");}}return 0;
}

C题题解
模拟题。。没啥好说的,认真读题

#include<bits/stdc++.h>
using namespace std;
int main() {int t;scanf("%d",&t);while(t--){int a,b;scanf("%d:%d",&a,&b);if(a<12){if(a==0)printf("12");else if(a<10)printf("0%d",a);else printf("%d",a);printf(":");if(b<10)printf("0%d",b);else printf("%d",b);printf(" AM\n");}else{if(a>12){a=a%12;}if(a==0)printf("12");else if(a<10)printf("0%d",a);else printf("%d",a);printf(":");if(b<10)printf("0%d",b);else printf("%d",b);printf(" PM\n");}}return 0;
}

D题题解
需要一点分析,首先二进制数有点多,100000 + ? ? ? ? ? ????? ?????
每个? 可以表示0或者1 那么有25 +1种
我们可以罗列出来,一个一个枚举。
这里所说的枚举其实可以更优雅一点,用DFS去搜索,看看给出的数字能不能凑出来
为什么DFS是可行的呢?
数字也就小于1e5级别,我们考虑最小的二进制数10 (1就不用说了,乘了也相当于没有乘)
1e4级别的数字顶多除4次10就要没了,所以说我们DFS深度肯定不会很多,四层足以,每次把当前数字能整除的,拿去除除看。

#include<bits/stdc++.h>
using namespace std;
int A[200]; //16
int len=0;
void dfs(int x){if(x>100000)return ;A[++len]=x;if(x%10==0)dfs(x+1);//只有偶数才能在末尾放1   dfs(x*10);//搜索构造二进制数  
}
bool DFS(int x){if(x==1)return true;bool now=false;for(int i=1;i<=len;i++){if(x%A[i]==0){now=now | DFS(x/A[i]);}}return now;
}
int main(){int t;scanf("%d",&t);dfs(10);//搜索出可用的二进制数 while(t--){int n;scanf("%d",&n);bool ok=DFS(n);if(ok)printf("YES\n");else printf("NO\n");}return 0;
}

E题题解
题目所说的这种字符串,首先可以从长度分析,这种字符串的长度必定是S的某个因子
某则不可能复制回去。所以我们可以枚举长度。

这种子串从哪里枚举呢?你如果要复制回去的话,肯定要从头摆过去,所以说我们直接枚举S的一段前缀字符串,长度为S字符串的因子,然后带回去检验行不行。

注意还有一种可能,那就是枚举最末尾的那一段,因为它也算是最后被复制的那一段,我们可以利用它,来尝试往前面复制。

剩下的就看大家怎么写枚举了

[aaaa…bbbbb]
简单来说就是一方面你去枚举aaa能不能行
再枚举bbbb能不能行,两种方法取最小值

#include<bits/stdc++.h>
using namespace std;
char s[200005];
int main(){int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);scanf("%s",s+1);int ans=n;//初始值为N  for(int i=1;i<=n/2;i++){//i 枚举子串长度if(n%i==0){int res=0;//有多少个不一样bool ok=true;for(int k=1;k<=n/i;k++){// 把S划分为N/i 段   每段都判断判断if(ok==false)break;for(int j=1;j<=i;j++){//这个j 对应的前缀 S[1~i] if(s[(k-1)*i+j]!=s[j])res++;//(k-1)*i表示前面已经枚举了多少段  算一个偏移量if(res>=2){ok=false;break;}}}if(ok){ans=i;break;}}}for(int i=1;i<=n/2;i++){if(n%i==0){int res=0;bool ok=true;for(int k=1;k<=n/i;k++){if(ok==false)break;//倒着枚举要注意,不是枚举后缀//而是枚举S[j~n] 从左到右能不能复制 for(int j=n-i+1,q=1;j<=n;j++,q++){if(s[(k-1)*i+q]!=s[j])res++;// j表示S[j~n]//S[(K-1)*i+Q]是枚举段 if(res>=2){ok=false;break;}}}if(ok){ans=min(ans,i);break;}}}printf("%d\n",ans);}return 0;
}

这篇关于2024.5.25晚训题解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1003156

相关文章

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

C - Word Ladder题解

C - Word Ladder 题解 解题思路: 先输入两个字符串S 和t 然后在S和T中寻找有多少个字符不同的个数(也就是需要变换多少次) 开始替换时: tips: 字符串下标以0开始 我们定义两个变量a和b,用于记录当前遍历到的字符 首先是判断:如果这时a已经==b了,那么就跳过,不用管; 如果a大于b的话:那么我们就让s中的第i项替换成b,接着就直接输出S就行了。 这样

【秋招笔试】9.07米哈游秋招改编题-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新 🍄 题面描述等均已改编,如果和你笔试题看到的题面描述

LeetCode 第414场周赛个人题解

目录 Q1. 将日期转换为二进制表示 原题链接 思路分析 AC代码 Q2. 范围内整数的最大得分 原题链接 思路分析 AC代码 Q3. 到达数组末尾的最大得分 原题链接 思路分析 AC代码 Q4. 吃掉所有兵需要的最多移动次数 原题链接 思路分析 AC代码 Q1. 将日期转换为二进制表示 原题链接 Q1. 将日期转换为二进制表示 思路分析

【JavaScript】LeetCode:21-25

文章目录 21 最大子数组和22 合并区间23 轮转数组24 除自身以外数组的乘积25 缺失的第一个正数 21 最大子数组和 贪心 / 动态规划贪心:连续和(count)< 0时,放弃当前起点的连续和,将下一个数作为新起点,这里提供使用贪心算法解决本题的代码。动态规划:dp[i]:以nums[i]为结尾的最长连续子序列(子数组)和。 dp[i] = max(dp[i - 1]

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

P2858 [USACO06FEB] Treats for the Cows G/S 题解

P2858 题意 给一个数组。每天把最左或者最右的东西卖掉,第 i i i个东西,第 d a y day day天卖出的价格是 a [ i ] ∗ d a y a[i]*day a[i]∗day。 记忆化搜索 void dfs(int l,int r,int day,ll sum){if(v[l][r]>=sum)return;v[l][r]=sum;if(l>r)//这就是dp答案{

2025年25届计算机毕业设计:如何实现高校实验室Java SpringBoot教学管理系统

✍✍计算机毕业编程指导师** ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、Python、微信小程序、大数据实战项目集 ⚡⚡文末获取源码 文章目录 ⚡⚡文末获取源码高校实验室教学管理系统-研究背景高校实验室教学管理系