Codeforces 903 div3 A-F

A

题目分析

数据范围很小,暴力枚举即可,然后给字符串x的长度设置一个上限,我设了50,因为n*m<25,多一倍够用了

C++代码

#include<iostream>
using namespace std;
void solve(){int n,m;string x,s;cin>>n>>m>>x>>s;int cnt=0;while(x.size()<50){for(int i=0;i<x.size();i++)if(x[i]==s[0]&&x.size()-i>=m){if(x.substr(i,m)==s){cout<<cnt<<endl;return;}}cnt++;x+=x;}cout<<-1<<endl;
}
int main(){int t;cin>>t;while(t--){solve();}return 0;
}

B

题目分析

找三个数中的最小数,然后判断其他两个数是否是他的倍数,如果不是,直接输出no

否则直接判断要切多少次,次数大于三就不可以

C++代码

#include<iostream>
using namespace std;
int main(){int t;cin>>t;while(t--){int a,b,c;cin>>a>>b>>c;int minn=min(min(a,b),c);if(a%minn||b%minn||c%minn)puts("NO");else{int cnt=a/minn-1+b/minn-1+c/minn-1;if(cnt>3)puts("NO");else puts("YES");}}return 0;
}

题目分析

 旋转90度与原来相同,可以发现,旋转的过程中,每个数都与另外三个数相关联,如图(i,j)

与他相关联的三个位置也标出来了,直接把四个字母都变成其中最大的一个字母就可以了,然后操作数直接加上它们与最大的字母的差距

C++代码

#include<iostream>
using namespace std;
const int N=1010;
char g[N][N];
char rev[N][N];
int n;
void solve(){cin>>n;for(int i=1;i<=n;i++)scanf("%s",g[i]+1);int cnt=0;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){char &v1=g[i][j],&v2=g[j][n-i+1],&v3=g[n-i+1][n-j+1],&v4=g[n-j+1][i];int maxx=max(max(v1,v2),max(v3,v4));cnt+=maxx-v1;}cout<<cnt<<endl;
}
int main(){int t;cin>>t;while(t--){solve();}return 0;
}

D

题目分析

每次找a[i]、a[j]、x,使得a[i]=a[i]/x,a[j]=a[j]*x

由此可见,相当于将a[i]的一个因数分给a[j]

每个数是由若干个质数的乘积组成,所以可以对每个a[i]分解质因数,然后判断每个质数出现的次数是否是n的倍数,如果是,则可以让所有数相等,否则不能

拿样例举例:

100=(2^2)*(5^2)

2=(2^1)

50=(2^1)*(5^2)

10=(2^1)*(5^1)

1无法分解质因数,不过不影响

可以发现,2一共有5次幂,5也一共有5次幂,都是n=5的倍数,每个数只需得到一个2一个5即可,即每个数都可以变成10

C++代码

#include<iostream>
#include<map>
using namespace std;
const int N=10010;
int a[N];
int n;
void solve(){cin>>n;for(int i=1;i<=n;i++)cin>>a[i];map<int,int> cnt;for(int i=1;i<=n;i++){int s=a[i];for(int j=2;j<=s/j;j++){//分解质因数if(s%j==0){while(s%j==0){cnt[j]++;//j的次数+1s/=j;}}}if(s>1)cnt[s]++;}for(auto t:cnt){if(t.second%n!=0){puts("No");return;}}puts("Yes");
}
int main(){int t;cin>>t;while(t--){solve();}return 0;
}

题目分析

dp[i]:从n到i最少需要删除几个数才可以变成优美序列

从后往前做一遍DP,每次遍历到一个数,有两种情况:

1、不选择该数开头的一串序列

dp[i]=dp[i+1]+1

2、选择该数开头的一串序列,即下标为i~i+a[i]的数都不能删

dp[i]=min(dp[i],dp[i+a[i]+1])

记得初始化

dp[n]=1;//只有一个数的时候只能删掉,因为a[i]至少为1,后面最少要跟着一个数

dp[n+1]=0;

C++代码

#include<iostream>
using namespace std;
const int N=200010;
int dp[N],a[N];
int n;
void solve(){cin>>n;for(int i=1;i<=n;i++)cin>>a[i];//dp[i]表示从n~i最少删除几个数 dp[n+1]=0; dp[n]=1;//最后一个数不可能选,因为它后面没有数了 for(int i=n;i>=1;i--){//不选以a[i]为起点的一串数字,就要删掉a[i]dp[i]=dp[i+1]+1;//选以a[i]为起点的一串数字,前提是i+a[i]要小于等于nif(i+a[i]<=n)dp[i]=min(dp[i],dp[i+a[i]+1]); }cout<<dp[1]<<endl;
}
int main(){int t;cin>>t;while(t--){solve();}return 0;
}

题目分析

换根DP

设置一个数组f[N][2]

f[i][0]:以i为根节点到任意一个被标记的点的最大距离

f[i][1]:以i为根节点到任意一个被标记的点的次大距离

dfs1(u,fa)函数由子节点更新父节点的信息

假设j是u的儿子节点,状态转移方程为:

1、f[j][0]+1>=f[u][0]:f[u][1]=f[u][0],f[u][0]=f[j][0]+1

2、f[j][0]+1>f[u][1]:f[u][1]=f[j][0]+1

dfs2(u,fa)函数由父节点更新子节点的信息

1、f[fa][0]不是由f[u][0]更新来的,则用f[fa][0]更新u:

      f[fa][0]+1>=f[u][0]:f[u][1]=f[u][0],f[u][0]=f[fa][0]+1

      f[fa][0]+1>f[u][1]:f[u][1]=f[fa][0]+1

2、f[fa][0]是由f[u][0]更新来的,则用f[fa][1]更新u:

      f[fa][1]+1>=f[u][0]:f[u][1]=f[u][0],f[u][0]=f[fa][1]+1

      f[fa][1]+1>f[u][1]:f[u][1]=f[fa][1]+1

两次dfs传入的第一个参数必须相同(1~n中的任何一个数),不然会打乱父子关系

C++代码

#include<iostream>
using namespace std;
const int N=200010,M=N*2,INF=0x3f3f3f3f;
int h[N],e[M],ne[M],idx;
int f[N][2];//f[u][0]存储以节点u为根节点的到其他点的最大值,f[u][1]存储次大值 
int n,k,ans;
void add(int a,int b){e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void dfs1(int u,int fa){//子节点更新父节点 //由于初始化f为负无穷(被标记的点除外)//所以此时求到的最大和次大的距离就是到每个标记的点的距离for(int i=h[u];i!=-1;i=ne[i]){int j=e[i];if(j==fa)continue;dfs1(j,u);if(f[j][0]+1>=f[u][0])f[u][1]=f[u][0],f[u][0]=f[j][0]+1;else if(f[j][0]+1>f[u][1])f[u][1]=f[j][0]+1;}
}
void dfs2(int u,int fa){//父节点更新子节点 if(fa!=-1){int t=f[fa][0]+1;//t为父节点的最大值+1 //如果父节点的最大值刚好就是由u过来的,则t更新为次大值+1 if(f[fa][0]==f[u][0]+1)t=f[fa][1]+1;//父节点信息更新字节点信息if(t>=f[u][0])f[u][1]=f[u][0],f[u][0]=t;else if(t>f[u][1])f[u][1]=t;}//更新u的所有儿子for(int i=h[u];i!=-1;i=ne[i]){int j=e[i];if(j==fa)continue;dfs2(j,u);}ans=min(ans,f[u][0]);
}
void solve(){cin>>n>>k;idx=0,ans=INF;for(int i=1;i<=n;i++)f[i][0]=f[i][1]=-INF,h[i]=-1;for(int i=1;i<=k;i++){int x;cin>>x;f[x][0]=f[x][1]=0;}for(int i=1;i<n;i++){int a,b;cin>>a>>b;add(a,b),add(b,a);}//注意:dfs1和dfs2中的参数必须相同,不能上面传1下面传2,不然两次dfs的父子关系就不一样dfs1(1,-1);
//	for(int i=1;i<=n;i++)
//		cout<<"i="<<i<<" "<<f[i][0]<<" "<<f[i][1]<<endl;dfs2(1,-1);
//	for(int i=1;i<=n;i++)
//		cout<<"i="<<i<<" "<<f[i][0]<<" "<<f[i][1]<<endl;cout<<ans<<endl;
}
int main(){int t;cin>>t;while(t--){solve();}
}

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

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

相关文章

尚硅谷vue全家桶(vue2+vue3)笔记

Vue2 一、Vue核心 01_简介 1.特点 采用组件化模式&#xff0c;提高代码复用率、且让代码更好维护。声明式编码&#xff0c;让编程人员无需直接操作DOM&#xff08;命令式编码&#xff09;&#xff0c;提高开发效率。使用虚拟DOM优秀的Diff算法&#xff0c;尽量复用DOM节点。…

Java 面试相关问题(下)——JVM相关问题GC相关问题

1. 类加载1.1 类的生命周期说一下&#xff1f;1.2 介绍下生命周期中的加载&#xff1f;1.3 介绍下生命周期中的验证&#xff1f;1.4 介绍下生命周期中的准备&#xff1f;1.5 介绍下生命周期中的解析&#xff1f;1.6 介绍下生命周期中的初始化&#xff1f;1.7 介绍下生命周期中的…

科研绘图系列:R语言组合堆积图(stacked barplot with multiple groups)

介绍 通常堆积图的X轴表示样本,样本可能会存在较多的分组信息,通过组合堆积图和样本标签分组信息,我们可以得到一张能展示更多信息的可发表图形。 加载R包 knitr::opts_chunk$set(warning = F, message = F) library(tidyverse) library(cowplot) library(patchwork)导入…

富芮坤FR800X系列之按键检测模块设计

FR800X系列按键检测模块 读者对象&#xff1a; 本文档主要适用以下工程师&#xff1a; 嵌入式系统工程师 单片机软件工程师 IOT固件工程师 BLE固件工程师 文章目录 1.概要2.用户如何设计按键检测模块2.1 GPIO初始化2.2按键模块初始化2.3设计中断函数&#xff1a;2.4循环…

Spring循环依赖详解

一、什么是循环依赖 在Spring框架中&#xff0c;循环依赖是指两个或更多的Bean相互间直接或间接地依赖对方的情况。这种依赖关系可能导致Bean的实例化过程中出现问题&#xff0c;但Spring通过其内部的处理机制能够解决某些类型的循环依赖。 简单的说就是A依赖B&#xff0c;B依赖…

数据库安全综合治理方案(可编辑54页PPT)

引言&#xff1a;数据库安全综合治理方案是一个系统性的工作&#xff0c;需要从多个方面入手&#xff0c;综合运用各种技术和管理手段&#xff0c;确保数据库系统的安全稳定运行。 方案介绍&#xff1a; 数据库安全综合治理方案是一个综合性的策略&#xff0c;旨在确保数据库系…

photoshop学习笔记——选区3 选区的变化

选区制作完成之后可以对选区进行变化 主要有&#xff1a; 反选&#xff1a;shift ctrl I 变换 修改&#xff1a; 边界 设置选区的边界大小 类似 CSS中的borderSize平滑 对选区的角进行平滑扩展 向外扩展选区收缩 向内收缩选区羽化 让边界变得过渡透明度 设置…

MySQL作业四

1. 创建数据库mydb15_indexstu 2. 创建表student&#xff0c;course&#xff0c;sc 2.1 创建表student 2.2 创建表course 2.3 创建表sc 3. 处理表 3.1 修改表student中年龄&#xff08;sage&#xff09;字段属性&#xff0c;数据类型由int改变为smallint 3.2 为表course中cno…

【数据结构】栈(基于数组、链表实现 + GIF图解 + 原码)

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;数据结构 &#x1f4da;本系列文章为个人学…

Golang | Leetcode Golang题解之第268题丢失的数字

题目&#xff1a; 题解&#xff1a; func missingNumber(nums []int) int {n : len(nums)total : n * (n 1) / 2arrSum : 0for _, num : range nums {arrSum num}return total - arrSum }

scrapy爬取城市天气数据

scrapy爬取城市天气数据 一、创建scrapy项目二、修改settings,设置UA,开启管道三、编写爬虫文件四、编写items.py五、在weather.py中导入WeatherSpiderItem类六、管道中存入数据,保存至csv文件七、完整代码一、创建scrapy项目 先来看一下爬取的字段情况: 本次爬取城市天…

【中项】系统集成项目管理工程师-第5章 软件工程-5.3软件设计

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…

一文解决 | Linux(Ubuntn)系统安装 | 硬盘挂载 | 用户创建 | 生信分析配置

原文链接&#xff1a;一文解决 | Linux&#xff08;Ubuntn&#xff09;系统安装 | 硬盘挂载 | 用户创建 | 生信分析配置 本期教程 获得本期教程文本文档&#xff0c;在后台回复&#xff1a;20240724。请大家看清楚回复关键词&#xff0c;每天都有很多人回复错误关键词&#xf…

Blackbox AI-跨时代AI产物,你的私人编程助手

1. 引言 随着人工智能技术的飞速发展&#xff0c;我们的生活方式正在经历前所未有的变革。从智能家居到自动驾驶&#xff0c;AI已经渗透到我们生活的方方面面。而在这场科技革命中&#xff0c;Blackbox 网站凭借其先进的技术和全面的功能&#xff0c;成为了众多AI产品中的佼佼者…

不同行情下算法的具体使用!

上一篇我们说到了不同公司算法交易的区分&#xff0c;有朋友提出了不同的行情下的算法交易应该怎么使用&#xff0c;小编今天就带大家了解下&#xff01;当然具体实际状况百出&#xff0c;这种可以实际为准&#xff08;韭菜修养全拼实际探讨交流&#xff09;&#xff01; 我们在…

Redis的使用场景、持久化方式和集群模式

1. Redis的使用场景 热点数据的缓存 热点数据&#xff1a;频繁读取的数据 限时任务的操作。比如短信验证码 完成session共享的问题。因为前后端分离 完成分布式锁 商品的销售量 2. Redis的持久化方式 2.1 什么是持久化 把内存中的数据存储到磁盘的过程。同时也可以把磁盘中…

AI绘画入门实践|Midjourney:使用 --no 去除不想要的物体

在 Midjourney 中&#xff0c;--no 作为反向提示词&#xff0c;告诉 MJ 在生成图像时&#xff0c;不要包含什么。 使用格式&#xff1a;--no 对应物体提示词&#xff08;多个物体之间使用","间隔&#xff09; 使用演示 a web banner, summer holiday --v 6.0 a web b…

【Git多人协作开发】同一分支下的多人协作开发模式

目录 0.前言场景 1.开发者1☞完成准备工作&协作开发 1.1创建dev分支开发 1.2拉取远程dev分支至本地 1.3查看分支情况和分支联系情况 1.4创建本地dev分支且与远程dev分支建立联系 1.5在本地dev分支上开发file.txt 1.6推送push至远程仓库 2.开发者2☞完成准备工作&…

C++第十弹 ---- vector的介绍及使用

目录 前言vector的介绍及使用1. vector的使用1.1 vector的定义1.2 iterator的使用1.3 vector空间增长问题1.4 vector增删查改 2. vector迭代器失效问题(重点) 总结 前言 本文介绍了C中的vector数据结构及其使用方法。 更多好文, 持续关注 ~ 酷酷学!!! 正文开始 vector的介绍…

GPT-4O 的实时语音对话功能在处理多语言客户时有哪些优势?

最强AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量 我瞄了一眼OpenAI春季发布会&#xff0c;这个发布会只有26分钟&#xff0c;你可以说它是一部科幻短片&#xff0c;也可以说它过于“夸夸其谈”&#xff01;关于…