Codeforces Round 903 (Div. 3)A~F

news2025/2/23 18:36:39

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.coloradmin.cn/o/1902366.html

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

相关文章

密码学及其应用 —— 密码学的经典问题

1. 古典密码学问题 1.1 问题1&#xff1a;破解凯撒密码 1.1.1 问题 凯撒密码是最简单的单字母替换加密方案。这是一种通过将字母表中的字母固定向右移动几位来实现的加密方法。解密下面的文本&#xff0c;该文本通过对一个去除了空格的法语文本应用凯撒密码获得&#xff1a; …

IDEA越用越卡?教你轻松解决IDEA内存占用过高问题

大家好&#xff0c;我是瑶山&#xff0c;最近IDEA越用越卡了&#xff0c;刚刚内存卡爆&#xff0c;带着整个电脑也卡的飞起&#xff0c;只能重启了电脑。 虽然重启后又恢复到了流畅&#xff0c;但是问题还是如鲠在喉&#xff0c;痛定思痛&#xff0c;还是决定处理下&#xff01…

Debezium报错处理系列之第110篇: ERROR Error during binlog processing.Access denied

Debezium报错处理系列之第110篇:ERROR Error during binlog processing. Last offset stored = null, binlog reader near position = /4 Access denied; you need at least one of the REPLICATION SLAVE privilege for this operation 一、完整报错二、错误原因三、解决方法…

JVM原理(十七):JVM虚拟机即时编译器详解

编译器无论在何时、在何种状态下把Class文件转换成与本地基础设施相关的二进制机器码&#xff0c;他都可以视为整个编译过程的后端。 后端编译器编译性能的好坏、代码优化质量的高低却是衡量一款商用虛拟机优秀与否的关键指标之一。 1. 即时编译器 即时编译器是一个把Java的…

Linux安装达梦

文章目录 前言一、docker安装1.下载镜像2.导入镜像3.生成容器 二、ios安装1.环境准备2.iso安装3.配置实例4.注册服务5.启停服务 总结 前言 公司要求我将数据从oracle迁移到达梦数据库&#xff0c;这个国产数据库以前没用过&#xff0c;所以记录一下这次的安装过程。 一、docke…

基于PHP技术的在线校园美食攻略程序设计与实现

基于PHP技术的在线校园美食攻略程序设计与实现 摘 要 网络技术正在以空前持续的速度在改变着我们的生活。利用互联网技术&#xff0c;人们对网上食物共享越来越关注。基于此&#xff0c;本文利用 PHP技术&#xff0c;对网上大学饮食指南应用软件进行了研究。 整个系统的设计&a…

硕士文凭再耀眼,也没有第一学历刺眼?

在当今社会,教育被视为个人发展和社会进步的重要基石。随着高等教育的普及和竞争的加剧,学历成为了衡量个人能力、决定职业前景的重要标尺。然而,在这一过程中,“第一学历”的概念逐渐凸显,其影响力甚至在某些情况下超越了后续的硕士、博士等更高学历。这一现象引发了广泛…

14-31 剑和诗人5 - 使用 AirLLM 和分层推理在单个 4GB GPU 上运行 LLama 3 70B

利用分层推理实现大模型语言(LLM) 大型语言模型 (LLM) 领域最近取得了显著进展&#xff0c;LLaMa 3 70B 等模型突破了之前认为可能实现的极限。然而&#xff0c;这些模型的庞大规模给其部署和实际使用带来了巨大挑战&#xff0c;尤其是在资源受限的设备上&#xff0c;例如内存…

大模型的实践应用25-LLama3模型模型的架构原理,以及手把手教你搭建LLama3模型

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用25-LLama3模型模型的架构原理,以及手把手教你搭建LLama3模型。LLaMA 3 是Meta公司开发的最新一代大规模语言模型,其架构在很大程度上继承了LLaMA 2的设计,但对某些关键组件进行了改进和优化。 文章目录 一、LLama3模…

设计模式之单例模式(Java)

单例模式实现方式&#xff1a;懒汉式、饿汉式、双重检查、枚举、静态内部类&#xff1b; 懒汉式&#xff1a; /*** 懒汉式单例模式* author: 小手WA凉* create: 2024-07-06*/ public class LazySingleton implements Serializable {private static LazySingleton lazySinglet…

新手学Cocos报错 [Assets] Failed to open

两个都在偏好设置里面调&#xff08;文件下面的偏好设置&#xff09;&#xff1a; 1.设置中文&#xff1f; 2.报错 [Assets] Failed to open&#xff1f; 这样在点击打开ts文件的时候就不会报错&#xff0c;并且用vscode编辑器打开了&#xff0c; 同样也可以改成你们自己喜欢…

2、图形验证码

1、图形验证码设计 1.1思路 现今&#xff0c;市面上的图形验证码付费的&#xff0c;免费的多种多样&#xff0c;主要形式有滑动拼图、文字点选、语序点选、字体识别、空间推理、智能随机等。 而处理也分为web端和sever端两部分 此处以免费的kaptcha 为例&#xff0c;进行数字图…

分支与循环(二)

目录 1.switch语句 1)switch语法形式 2&#xff09;if语句和switch语句的对比 3) switch语句中的break 4) switch语句中的default 5) switch语句中的case和default的顺序问题 2.while循环 1) if 和 while的对比 2) while语句的执行流程​编辑 3&#xff09;while循环的…

linux 基础命令、gcc的基础用法

1、ls——>列出目录下的内容 语法&#xff1a;ls [-a -l -h] [Linux路径] &#xff08;1&#xff09;-a -l -h 是可选的选项 &#xff08;2&#xff09;Linux路径是此命令的可选参数 ①当不使用选项和参数&#xff0c;直接使用 ls 命令本体&#xff0c;表示&#xff1a;…

图论·Day01

P3371 P4779 P3371 【模板】单源最短路径&#xff08;弱化版&#xff09; 注意的点&#xff1a; 边有重复&#xff0c;选择最小边&#xff01;对于SPFA算法容易出现重大BUG&#xff0c;没有负权值的边时不要使用&#xff01;&#xff01;&#xff01; 70分代码 朴素板dijsk…

【Web】

1、配仓库 [rootlocalhost yum.repos.d]# vi rpm.repo ##本地仓库标准写法 [baseos] namemiaoshubaseos baseurl/mnt/BaseOS gpgcheck0 [appstream] namemiaoshuappstream baseurlfile:///mnt/AppStream gpgcheck0 2、挂载 [rootlocalhost ~]mount /dev/sr0 /mnt mount: /m…

类与对像(1)

好几个月没有写了&#xff0c;差了好多&#xff0c;这些天补回来吧。 接下来&#xff0c;让我们正式步入C与C语言开始不同的地方。 我对类的理解&#xff1a;类是对于具有相同或相似属性的数据集合。 类的关键词&#xff1a;class&#xff0c;public&#xff0c;protected&a…

vue3中pinia使用持久化管理

安装插件 npm install pinia pinia-plugin-persistpinia进行注册 创建index.ts import { createPinia } from pinia; //对外暴露大仓库 export default createPinia(); 在mian.ts //引入pinpa import { createApp } from vue //引入根组件 import App from ./App.vue const…

昇思MindSpore学习入门-评价指标

当训练任务结束&#xff0c;常常需要评价函数&#xff08;Metrics&#xff09;来评估模型的好坏。不同的训练任务往往需要不同的Metrics函数。例如&#xff0c;对于二分类问题&#xff0c;常用的评价指标有precision&#xff08;准确率&#xff09;、recall&#xff08;召回率&…

全网最详细的appium 自动化测试iOS(二)

一、环境准备&#xff1a; 1、安装appium 2、xcode (appium 版本&#xff1a;12.1.0 xcode版本&#xff1a;12.5 可正常运行&#xff0c;ps:appium 版本&#xff1a;12.1.0 xcode版本&#xff1a;13.0 一直报奇奇怪怪的错误&#xff09; 3、依赖工具包安装 brew install…