【题解】2023传智杯全国大学生程序设计竞赛-初赛第一场

news/2024/10/10 14:07:45/文章来源:https://www.cnblogs.com/orangecodelog/p/18456203

A.字符串拼接

直接拼接两个字符串即可,注意的是字符串可能包含空格,因此需要使用getline函数进行输入。

#include <bits/stdc++.h>
using namespace std;int main() {string s1, s2;getline(cin, s1);getline(cin, s2);cout << s1 + s2 << endl;return 0;
}

B.差值

注意到,题目需要求出任意两个数的差值的最小值,我们知道,差值最小的情况就是两个数越接近越好,因此我们可以将数组排序,然后求相邻两个数的差值的最小值即可。

#include <bits/stdc++.h>
using namespace std;int main() {int n;cin >> n;vector<int> a(n);for (int i = 0; i < n; i++) {cin >> a[i];}sort(a.begin(), a.end());int ans = INT_MAX;for (int i = 1; i < n; i++) {ans = min(ans, a[i] - a[i - 1]);}cout << ans << endl;
}

C.红色和紫色

可以证明:当且仅当 \(n,m\) 都是奇数时,小红可以获胜。否则一定是紫获胜。

证明如下:

如果 \(n\)\(m\) 都是奇数,那么 \(n*m\) 是奇数,存在一个中心的方格。小红只需要第一步给中间染色,之后紫在任意地方染色,小红只需要在紫染色的方格中心对称的位置染上和紫上次操作相同的颜色即可。这样一定是紫最先无法行动。

如果 \(n\)\(m\) 不全是奇数,说明不存在中心的方格。紫只需要在每次小红染色后,在中心对称的位置上染上和小红上次操作不同的颜色(显然,这样一定是合法的)。如此最后不能操作的一定是小红。

#include <bits/stdc++.h>
using namespace std;int main() {int n, m;cin >> n >> m;if (n % 2 == 1 && m % 2 == 1) {cout << "akai" << endl;} else {cout << "yukari" << endl;}return 0;
}

D.abb

对于每个字符 \(c\),可以先利用后缀和统计出在该字符后有多少个与 \(c\) 不同的字符,那么对于每种不同的字符,\(c\) 能够就从他们中任意选取2个构成一个合法的abb串,那么答案就是 \(C_n^2\),其中 \(n\) 表示该种字符在 \(c\) 后出现的个数,因此当前位置能够构成的答案数量就是 \(\sum C_{n_i}^2\),也就是不同于 \(c\) 的所有字符可以提供的贡献之和。最后枚举每个位置即可得到答案。

#include<bits/stdc++.h>
using namespace std;
// sum(i,j)表示在i位置后j字符的个数
long long sum[101010][26];
int main(){int n,i,j;string s;cin>>n>>s;for(i=n-1;i>=0;i--){for(j=0;j<26;j++)sum[i][j]=sum[i+1][j];sum[i][s[i]-'a']++;}long long res=0;for(i=0;i<n;i++){for(j=0;j<26;j++){// 对于当前位置,枚举每个不等于当前位置的字符,计算能够构成的abb串数量if(j!=s[i]-'a'){// C_n^2 = n*(n-1)/2res+=sum[i+1][j]*(sum[i+1][j]-1)/2;}}}cout<<res;
}

E.kotori和素因子

观察到数据范围很小,因此暴力枚举所有方案即可。

#include<stdio.h>
#define N 1010
int prime[168] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997};
bool st[168];        //第几个素数被用过了
int f[10][100];        //第i个数的质因子有第几个素数
int n,cnt[10];        //第i个数有几个质因子int ans = 0x3f3f3f3f;
void dfs(int num, int sum)
{if(num == n){if(sum < ans)  ans = sum;return;}else{for(int i = 0; i < cnt[num]; i ++){if(!st[f[num][i]]){st[f[num][i]] = true;dfs(num + 1, sum + prime[f[num][i]]);st[f[num][i]] = false;}}}
}
int main()
{scanf("%d",&n);for(int i = 0; i < n; i ++){int a;scanf("%d",&a);for(int j = 0; a != 1; j ++){if(a % prime[j] == 0){f[i][cnt[i]++] = j;        //质因子有第几个素数while(a % prime[j] == 0)a /= prime[j];}}}dfs(0,0);if(ans == 0x3f3f3f3f)  ans = -1;printf("%d",ans);return 0;
}

F. 红和蓝

对于叶子节点来说,他的周围只有一个点,即为他的父节点,因此为了满足条件,他必须要和父亲节点同色,此时,我们将他和他的父亲染上相同的颜色。染色后,我们可以看成被染色的点已经从树上去掉,因此此时会出现新的"叶子节点",重复上述过程,直到所有点都被染色即可,同时,如果染色中间出现了冲突(即一个节点同时被染上两种颜色),则说明无解,同时,如果最后没有点能帮助根节点染色,也无解。最后根据染色情况,计算答案即可。

#include <bits/stdc++.h>
using namespace std;
int n, tot = 0;
int head[100010];
struct ty
{int t, next;
}edge[200010];
int f[100010];
int col[100010];
int cnt = 0;
bool boo = 1;
void addedge(int x, int y)
{edge[++tot].t = y;edge[tot].next = head[x];head[x] = tot;
}
void dfs1(int x, int fa)
{int son  = 0;for (int i = head[x]; i != -1; i= edge[i].next){if (edge[i].t == fa) continue;son++;dfs1(edge[i].t, x);}// 如果是叶子节点if (son == 0 || f[x] == 0){// 如果他的父亲已经被染上颜色,而此时当前节点又要给父亲节点染色,说明发生冲突,无解if (f[fa] != 0) {boo = 0; return ;}// 将他和他的父亲染上相同颜色f[x] = f[fa] = ++cnt;}
}
void dfs2(int x, int fa) //计算答案
{for (int i = head[x]; i != -1; i= edge[i].next){if (edge[i].t == fa) continue;if (f[edge[i].t] == f[x]) col[edge[i].t] = col[x];else col[edge[i].t] = col[x] ^ 1;dfs2(edge[i].t, x);}
}
int main()
{memset(head, -1, sizeof(head));memset(edge, -1, sizeof(edge));scanf("%d", &n);for (int i =1; i < n; i++){int x, y;scanf("%d%d", &x, &y);addedge(x, y);addedge(y, x);}dfs1(1, 0);// 如果之前染色发生冲突或者根节点没有被染色,无解if (f[0] != 0  || boo == 0){printf("-1\n"); return 0;}col[1] = 1;dfs2(1, 0);for (int i = 1; i <= n;i++){if (col[i] == 1) printf("R");else printf("B");}return 0;
}

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

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

相关文章

实验二

任务一 源代码1 #include <stdio.h>2 #include <time.h>3 4 #define N 55 #define N1 3976 #define N2 4767 #define N3 218 int main(){9 10 int random_major,random_no; 11 int cnt; 12 srand(time(NULL)); 13 14 cnt=0; 15 whil…

记录一次本地安装AI ollama大模型数据对话 的经历

浏览器打开 Ollama官网 下载对应的版本,我这里下载的 是对应 windows的版本,下载后直接运行安装安装完成后 打开 dos控制台,win+r,cmd那个,输入ollama 如果显示如下截图内容,就说明安装成功了,接下来就是下载 具体的 大数据库了 安装大模型前,建议先修改环境变量,因…

APP应用分发多个步骤和策略过程,如何进行app应用分发?

进行APP应用分发是一个涉及多个步骤和策略的过程,以下是对该过程的详细解析: 一、前期准备应用程序准备:开发人员需要确保应用程序已经经过完整的测试和质量保证,包括功能测试、用户体验测试、性能测试等,以确保其稳定性和可靠性。 打包应用程序,将开发完成的APP进行编译…

利用 ACME 实现SSL证书自动化配置更新

SSL 证书自动化最近收到腾讯云的通知SSL证书要到期了,本想直接申请的发现现在申请的免费SSL证书有效期只有90天了,顺便了解了一下原因是包括Google在内的国际顶级科技公司一直都有在推进免费证书90天有效期的建议,免费证书加密等级低,难以应对今天日益复杂的网络环境,90天…

arm imx6ull docker启动失败问题查找与解决 内核配置相关

arm imx6ull docker启动失败问题查找与解决 内核配置相关1、增加POSIX Message qeue:could not get initial namespace: no such file or directory CONFIG_POSIX_MQUEUE=y 2、增加namespace failed to set to initial namespace CONFIG_NAMESPACES=y 3、创建网络失败,veth配…

PictureBox实现进入换色,离开换色,点击换色

实现和Word标题栏类似的效果可以看到有三种颜色: 默认时是(243, 243, 243),鼠标进入时是这样(210, 210, 210),鼠标按下的瞬间变为了(177, 177, 177) 4个关键事件:MouseEnter、MouseLeave、MouseDown、MouseUp MouseEnter:在鼠标进入控件的可见部分时发生private void pictu…

Spring事务的1道面试题

每次聊起Spring事务,好像很熟悉,又好像很陌生。本篇通过一道面试题和一些实践,来拆解几个Spring事务的常见坑点。每次聊起Spring事务,好像很熟悉,又好像很陌生。本篇通过一道面试题和一些实践,来拆解几个Spring事务的常见坑点。 原理 Spring事务的原理是:通过AOP切面的方…

安装 Anaconda、PyTorch(GPU 版)库与 PyCharm

Anaconda 是一款巨大的 Python 环境集成平台,里面包含了 Python 解释器、Jupyter Notebook 代码编辑器以及很多的第三方库,所以安装 Anaconda 后我们无需再安装 Python 解释器,非常方便。 一、安装 Anaconda 1.卸载 Anaconda(可选) 如果我们原来的电脑上安装过 Anaconda,…

Ubuntu nginx 安装

1. 下载源码 下载页面:https://nginx.org/en/download.html 下载地址:https://nginx.org/download/nginx-1.27.2.tar.gz curl -O https://nginx.org/download/nginx-1.27.2.tar.gz 2. 依赖配置 sudo apt install gcc make libpcre3-dev zlib1g-dev openssl libssl-dev 3. 编译…

ArgoWorkflow教程(六)---无缝实现步骤间参数传递

之前我们分析了,Workflow、WorkflowTemplate 、template 3 者之间如何传递参数。 本文主要分析同一个 Workflow 中的不同 step 之间实现参数传递,比如将上一个步骤的输出作为下一个步骤的结果进行使用(而非以文件方式传递)。1. 概述 然后就是之前只分析了 Workflow、Workfl…

OOOPS:零样本实现360度开放全景分割,已开源 | ECCV24

全景图像捕捉360的视场(FoV),包含了对场景理解至关重要的全向空间信息。然而,获取足够的训练用密集标注全景图不仅成本高昂,而且在封闭词汇设置下训练模型时也受到应用限制。为了解决这个问题,论文定义了一个新任务,称为开放全景分割(Open Panoramic Segmentation,OPS…

如何将React项目,部署到Web服务器的Tomcat 上

将 React 应用部署到 Tomcat 服务器上通常需要将其构建为静态文件,然后将这些文件放入 Tomcat 的 webapps 目录。以下是具体步骤: 步骤指南 1. 构建 React 应用 首先,你需要在本地构建你的 React 应用。npm run build这会在项目根目录下生成一个 build 文件夹,里面包含了优…