Codeforces Round 903 (Div. 3)A~F

A.Don't Try to Count

输入样例:

12
1 5
a
aaaaa
5 5
eforc
force
2 5
ab
ababa
3 5
aba
ababa
4 3
babb
bbb
5 1
aaaaa
a
4 2
aabb
ba
2 8
bk
kbkbkbkb
12 2
fjdgmujlcont
tf
2 2
aa
aa
3 5
abb
babba
1 19
m
mmmmmmmmmmmmmmmmmmm

输出样例:

3
1
2
-1
1
0
1
3
1
0
2
5

思路:签到题,但要注意当字符串a的长度大于2倍的b长度还没有子串b时,说明a中不可能出现子串b,要退出循环。 

代码:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{int t;cin>>t;while(t--){int n,m;cin>>n>>m;string a,b;cin>>a>>b;int cnt=0,f=0;while(a.find(b)==string::npos){a+=a;cnt++;if(a.size()>2*m&&a.find(b)==string::npos){cout<<-1<<endl;f=1;break;}}if(!f)cout<<cnt<<endl;}
}

B. Three Threadlets 

输入样例:

15
1 3 2
5 5 5
6 36 12
7 8 7
6 3 3
4 4 12
12 6 8
1000000000 1000000000 1000000000
3 7 1
9 9 1
9 3 6
2 8 2
5 3 10
8 4 8
2 8 4

输出样例:

YES
YES
NO
NO
YES
YES
NO
YES
NO
NO
YES
YES
NO
YES
NO

思路:找规律,通过模拟样例可以发现三根线要一样长,那么最终长度肯定是要与最短的那根线一样长,如果某根线不能剪成最短长度,说明这根线不能被最短的长度整除,直接输出NO就可以了,如果能被整除,那么比较这两根线的长度和/最短长度得到的结果是否会大于3,大于就输出NO,反之YES。

代码:

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{int t;cin>>t;while(t--){vector<int> v(3);int f=0,cnt=0;for(auto &it:v) cin>>it;sort(v.begin(),v.end());f=(v[1]%v[0]||v[2]%v[0]);if(f) puts("NO");else{cnt=v[1]/v[0]-1+(v[2]/v[0]-1);if(cnt<=3) puts("YES");else puts("NO");}}
}

C. Perfect Square

输入样例:

5
4
abba
bcbb
bccb
abba
2
ab
ba
6
codefo
rcesco
deforc
escode
forces
codefo
4
baaa
abba
baba
baab
4
bbaa
abba
aaba
abba

输出样例:

1
2
181
5
9

思路: 因为题目要求矩阵翻转90°之后仍保持不变,说明矩阵的每一条边上的字母都得一样,所以我们可以通过从上往下的每一行的边与另外三条边上对应的元素进行比较(总共只需要遍历n/2行),因为只能将字母变大,所以我们要找到这四条边中最大的字母是哪个,然后另外三个字母就变成这个最大字母maxd,变化次数为4*maxd-(a1+a2+a3),然后我们要记得将原位置更小的字母改成更大的字母,具体可看代码。

代码:

#include<iostream>
using namespace std;
const int N=1e3+5;
char a[N][N];
int main()
{int t;cin>>t;while(t--){int n,sum=0;cin>>n;for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j];for(int i=1;i<=n/2;i++)for(int j=1+i-1;j<=n-i;j++){int a1=a[i][j]-'a'; //cout<<a1<<' ';int a2=a[n-j+1][i]-'a'; //cout<<a2<<' ';int a3=a[n-i+1][n-j+1]-'a';// cout<<a3<<' ';int a4=a[j][n-i+1]-'a'; //cout<<a4<<' ';int maxd=max(a1,max(a2,a3));maxd=max(maxd,a4);sum+=4*maxd-(a1+a2+a3+a4);if(a1!=maxd)a[i][j]+=maxd-a1;if(a2!=maxd)a[n-j+1][i]+=maxd-a2;if(a3!=maxd)a[n-i+1][n-j+1]+=maxd-a3;if(a4!=maxd)a[j][n-i+1]+=maxd-a4;// cout<<maxd<<' '<<sum<<' '<<a1+a2+a3+a4<<endl;// cout<<maxd<<' '<<a[4][2]<<endl;//puts("");}cout<<sum<<endl;}
}

D. Divide and Equalize

输入样例:

7
5
100 2 50 10 1
3
1 1 1
4
8 2 4 2
4
30 50 27 20
2
75 40
2
4 4
3
2 3 1

输出样例:

YES
YES
NO
YES
NO
YES
NO

思路: 这道题一开始没什么思路,后面看了一些大佬的题解才恍然大悟(heheh( ̄▽ ̄)"终归还是我太菜了),首先我们要知道每个大于1的数都可以分解成几个质因数的乘积,那么这道题的操作是一个数除k的同时另一个数乘k,因数的个数是不会变的,我们可以将其看成因数的转移,所以这n个数中每个质因数的个数如果为n的整数倍则可以将他们变成一样的数,否则不能。

代码:

#include<iostream>
#include<map>
using namespace std;int main()
{ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);int t;cin>>t;while(t--){int n;cin>>n;map<int,int> h;for(int i=0;i<n;i++){int x;cin>>x;for(int m=2;m<=x/m;m++){while(x%m==0){h[m]++;x/=m;}}if(x>1) h[x]++;}int f=0;for(auto it:h){if(it.second%n!=0){f=1;break;}}if(f) puts("NO");else puts("YES");}
}

E. Block Sequence

输入样例:

7
7
3 3 4 5 2 6 1
4
5 6 3 2
6
3 4 1 6 7 7
3
1 4 3
5
1 2 3 4 5
5
1 2 3 1 2
5
4 5 5 1 5

输出样例:

0
4
1
1
2
1
0

思路: 这道题我们要从后往前dp,定义dp[i]为从n到i的最少操作次数,由题意可知我们对一个数字有两种操作,删除:dp[i]=dp[i+1]+1,保留 :dp[i]=dp[i+a[i]+1],我们只需要在这两种操作中取最小值就可以了。

代码:

#include<iostream>
#include<cstring>
using namespace std;
const int N=2e5+5;
int a[N],dp[N];
/*逆向dp*/
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);int t;cin>>t;while(t--){int n;cin>>n;memset(dp,0,sizeof dp);for(int i=1;i<=n;i++) cin>>a[i];for(int i=n;i>=1;i--){dp[i]=dp[i+1]+1;//删除if(i+a[i]<=n) dp[i]=min(dp[i],dp[i+a[i]+1]);//比较保留和删除两种操作}cout<<dp[1]<<endl;}
}

F. Minimum Maximum Distance

输入样例1:

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

输出样例1:

2
2
0
1
4
5

输入样例2:

3
6 1
3
1 2
1 3
3 4
3 5
2 6
5 3
1 2 5
1 2
1 3
2 4
3 5
7 1
2
3 2
2 6
6 1
5 6
7 6
4 5

输出样例2:

0
2
0

思路: fi的最小值只会出现在两个或多个标记顶点中间的点到标记顶点的最大距离,找两个标记顶点的最大距离相当于找树的直径(传送门),结果输出(树的直径-1)/2+1。

代码:

/*树的直径————两次dfs第一次dfs算出所有结点到根节点的距离,到根节点最大距离的那个结点就是树的直径的一个端点第二次dfs以端点为根节点,算出其他点到直径端点的距离,然后取距离最大的那个点即为直径的另一个端点第二次dfs求到的到端点的最大距离即为树的直径*/#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
const int N=2e5+5;
int depth[N],mark[N];
vector<int> edge[N];
void dfs(int u,int fa)
{for(auto t:edge[u]){if(t==fa) continue;depth[t]=depth[u]+1;dfs(t,u);}
}
int main()
{ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int t;cin>>t;while(t--){int n,k;cin>>n>>k; for(int i=1;i<=n;i++) edge[i].clear();//vector<int> edge[n];for(int i=1;i<=k;i++) cin>>mark[i];for(int i=1;i<n;i++) {int a,b;cin>>a>>b;edge[a].emplace_back(b),edge[b].emplace_back(a);}depth[1]=0;if(k==1){cout<<0<<endl;continue;}dfs(1,-1);int c=mark[1];for(int i=2;i<=k;i++) if(depth[mark[i]]>depth[c]) c=mark[i];//先求直径的一个端点depth[c]=0;dfs(c,-1);//从这个被标记的端点出发找另一个端点c=mark[1];for(int i=2;i<=k;i++)if(depth[mark[i]]>depth[c]) c=mark[i];cout<<(depth[c]-1)/2+1<<endl;}
}

(将近半个月没写cf了,A题都让我TLE了一发,暑假得刷起来了😂,话说学校暑假放得真晚,还在复习期末考试科目( ̄▽ ̄)"。。。

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

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

相关文章

1999-2022年企业持续绿色创新水平数据

企业持续绿色创新水平数据为研究者提供了评估企业在绿色技术领域创新持续性和能力的重要视角。以下是对企业持续绿色创新水平数据的介绍&#xff1a; 数据简介 定义&#xff1a;企业持续绿色创新水平反映了企业在一定时期内绿色专利申请的持续性和创新能力。计算方法&#xf…

初识STM32:开发方式及环境

STM32的编程模型 假如使用C语言的方式写了一段程序&#xff0c;这段程序首先会被烧录到芯片当中&#xff08;Flash存储器中&#xff09;&#xff0c;Flash存储器中的程序会逐条的进入CPU里面去执行。 CPU相当于人的一个大脑&#xff0c;虽然能执行运算和执行指令&#xff0c;…

通信协议:常见的芯片内通信协议

相关阅读 通信协议https://blog.csdn.net/weixin_45791458/category_12452508.html?spm1001.2014.3001.5482 本文将简单介绍一些常见的芯片间通信协议&#xff0c;但不会涉及到协议的具体细节。 一、AMBA&#xff08;Advanced Microcontroller Bus Architecture&#xff09;…

MySQL之备份与恢复(七)

备份与恢复 文件系统快照 规划LVM备份 LVM快照备份也是有开销的。服务器写到原始卷的越多&#xff0c;引发的额外开销也越多。当服务器随机修改许多不同块时&#xff0c;磁头需要需要自写时复制空间来来回回寻址&#xff0c;并且将数据的老版本写到写时复制空间。从快照中读…

刷题之多数元素(leetcode)

多数元素 哈希表解法&#xff1a; class Solution { public:/*int majorityElement(vector<int>& nums) {//map记录元素出现的次数&#xff0c;遍历map&#xff0c;求出出现次数最多的元素unordered_map<int,int>map;for(int i0;i<nums.size();i){map[nu…

最适合mysql5.6安装的linux版本-实战

文章目录 一, 适合安装mysql5.6的linu版本1. CentOS 72. Ubuntu 14.04 LTS (Trusty Tahr)3. Debian 8 (Jessie)4. Red Hat Enterprise Linux (RHEL) 7 二, 具体以Ubuntu 14.04 LTS (Trusty Tahr)为例安装虚拟机安装Ubuntu 14.04 LTS (Trusty Tahr) 自己弄安装ssh(便于远程访问,…

前端八股文 对$nextTick的理解

$nexttick是什么? 获取更新后的dom内容 为什么会有$nexttick ? vue的异步更新策略 (这也是vue的优化之一 要不然一修改数据就更新dom 会造成大量的dom更新 浪费性能) 这是因为 message &#xff08;data&#xff09;数据在发现变化的时候&#xff0c;vue 并不会立刻去更…

240705_昇思学习打卡-Day17-基于 MindSpore 实现 BERT 对话情绪识别

240705_昇思学习打卡-Day17-基于 MindSpore 实现 BERT对话情绪识别 近期确实太忙&#xff0c;此处仅作简单记录&#xff1a; 模型简介 BERT全称是来自变换器的双向编码器表征量&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;&#xff0c…

【wordpress教程】wordpress博客网站添加非法关键词拦截

有的网站经常被恶意搜索&#xff0c;站长们不胜其烦。那我们如何屏蔽恶意搜索关键词呢&#xff1f;下面就随小编一起来解决这个问题吧。 后台设置预览图&#xff1a; 设置教程&#xff1a; 1、把以下代码添加至当前主题的 functions.php 文件中&#xff1a; add_action(admi…

CVPR 2024最佳论文分享:通过解释方法比较Transformers和CNNs的决策机制

CVPR&#xff08;Conference on Computer Vision and Pattern Recognition&#xff09;是计算机视觉领域最有影响力的会议之一&#xff0c;主要方向包括图像和视频处理、目标检测与识别、三维视觉等。近期&#xff0c;CVPR 2024 公布了最佳论文。共有10篇论文获奖&#xff0c;其…

计算组的妙用!!页面权限控制

需求描述&#xff1a; 某些特殊的场景下&#xff0c;针对某页看板&#xff0c;需要进行数据权限卡控&#xff0c;但是又不能对全部的数据进行RLS处理&#xff0c;这种情况下可以利用计算组来解决这个需求。 实际场景 事实表包含产品维度和销售维度 两个维度属于同一公司下面的…

【Python】已解决:FileNotFoundError: [Errno 2] No such file or directory: ‘./1.xml’

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;FileNotFoundError: [Errno 2] No such file or directory: ‘./1.xml’ 一、分析问题背景 在Python编程中&#xff0c;FileNotFoundError是一个常见的异常&…

贝尔曼方程(Bellman Equation)

贝尔曼方程(Bellman Equation) 贝尔曼方程(Bellman Equation)是动态规划和强化学习中的核心概念,用于描述最优决策问题中的价值函数的递归关系。它为状态值函数和动作值函数提供了一个重要的递推公式,帮助我们计算每个状态或状态-动作对的预期回报。 贝尔曼方程的原理 …

Python 自动化测试必会技能板块—unittest框架

说到 Python 的单元测试框架&#xff0c;想必接触过 Python 的朋友脑袋里第一个想到的就是 unittest。 的确&#xff0c;作为 Python 的标准库&#xff0c;它很优秀&#xff0c;并被广泛应用于各个项目。但其实在 Python 众多项目中&#xff0c;主流的单元测试框架远不止这一个…

西门子PLC1200--与电脑S7通讯

硬件构成 PLC为西门子1211DCDCDC 电脑上位机用PYTHON编写 二者通讯用网线&#xff0c;通讯协议用S7 PLC上的数据 PLC上的数据是2个uint&#xff0c;在DB1&#xff0c;地址偏移分别是0和2 需要注意的是DB块要关闭优化的块访问&#xff0c;否则是没有偏移地址的 PLC中的数据内…

elementui中日期/时间的禁用处理,使用传值的方式

项目中,经常会用到 在一个学年或者一个学期或者某一个时间段需要做的某件事情,则我们需要在创建这个事件的时候,需要设置一定的时间周期,那这个时间周期就需要给一定的限制处理,避免用户的误操作,优化用户体验 如下:需求为,在选择学年后,学期的设置需要在学年中,且结束时间大…

软件架构之计算机组成与体系结构

1.1计算机系统组成 计算机系统是一个硬件和软件的综合体&#xff0c;可以把它看成按功能划分的多级层次结构。 1.1.1 计算机硬件的组成 硬件通常是指一切看得见&#xff0c;摸得到的设备实体。原始的冯•诺依曼&#xff08;VonNeumann&#xff09;计算机在结构上是以运算器为…

2024年中国十大杰出起名大师排行榜,最厉害的易经姓名学改名字专家

在2024年揭晓的中国十大杰出易学泰斗评选中&#xff0c;一系列对姓名学与国学易经有深入研究的专家荣登榜单。其中&#xff0c;中国十大权威姓名学专家泰斗顶级杰出代表人物的师傅颜廷利大师以其在国际舞台上的卓越贡献和深邃学识&#xff0c;被公认为姓名学及易经起名领域的权…

verilog读写文件注意事项

想要的16进制数是文本格式提供的文件&#xff0c;想将16进制数提取到变量内&#xff0c; 可以使用 f s c a n f ( f d 1 , " 也可以使用 fscanf(fd1,"%h",rd_byte);实现 也可以使用 fscanf(fd1,"也可以使用readmemh(“./FILE/1.txt”,mem);//fe放在mem[0…

基于Android Studio零食工坊

目录 项目介绍 图片展示 运行环境 获取方式 项目介绍 用户 可以浏览商品 &#xff0c; 查询商品 &#xff0c; 加入购物车 &#xff0c; 结算商品 &#xff0c; 查看浏览记录 &#xff0c; 修改密码 &#xff0c; 修改个人信息 &#xff0c; 查询订单 管理员 能够实现商品的…