AtCoder Beginner Contest 198 A~E题解

AtCoder Beginner Contest 198 (A ~ F)题解 目录A. DivB. Palindrome with leading zerosC. Compass WalkingD. Send More MoneyE. Unique ColorF. Cube A. Div Problem Solution 签到 第一反应隔板法,把 nnn 个物品用一个板子隔开,不能为空,答案就是 Cn−2+2−1 2−1=Cn−1 1=n−1C_{n-2+2-1}^{\ 2-1}=C_{n-1}^{\ 1}=n-1Cn−2+2−1 2−1​=Cn−1& 阅读详情

A - Div

题目大意

两个男孩要分 N N N颗糖。问一共有几种分法(每个男孩都必须分到糖)?

1 ≤ N ≤ 15 1\le N\le 15 1≤N≤15

输入格式

N N N

输出格式

将答案输出为一个整数。

样例

N N N输出
2 2 2 1 1 1
1 1 1 0 0 0
3 3 3 2 2 2

分析

这题说白了就是将 N N N分成 A A A和 B B B两个正整数的和( A + B A+B A+B和 B + A B+A B+A是两种分法),所以列表如下:

A A A B B B
1 1 1 N − 1 N-1 N−1
2 2 2 N − 2 N-2 N−2
… \dots … … \dots …
N − 1 N-1 N−1 1 1 1
这个表一共有 N − 1 N-1 N−1项,所以我们直接输出 N − 1 N-1 N−1即可。

代码

#include <cstdio>
using namespace std;

int main()
{
	int n;
	scanf("%d", &n);
	printf("%d\n", n - 1);
	return 0;
}

B - Palindrome with leading zeros

题目大意

给定一个整数 N N N。
是否可以在 N N N的十进制表示的前面填上任意(可以为 0 0 0)个0,使得 N N N变成一个回文数?

0 ≤ N ≤ 1 0 9 0\le N\le 10^9 0≤N≤109

输入格式

N N N

输出格式

输出Yes或者No。

样例

N N N输出
1210 1210 1210Yes
777 777 777Yes
123456789 123456789 123456789No

分析

如果能在 N N N的前面加上一些0使得 N N N变成一个回文数,那么将 N N N去掉末尾的所有0后也一定能得到一个回文数。所以,我们只需将 N N N末尾的0去掉后,再判断它是不是一个回文数即可。

代码

#include <cstdio>
using namespace std;

char s[10];

int main()
{
	char c;
	int len = 0;
	while((c = getchar()) != '\n')
		s[len++] = c;
	while(len > 0 && s[--len] == '0');
	for(int i=0; i<=len; i++)
		if(s[i] != s[len - i])
		{
			puts("No");
			return 0;
		}
	puts("Yes");
	return 0;
}

C - Compass Walking

题目大意

在一个二维的平面上,一个人每一步都只能走正好 R R R个距离单位。
这个人从 ( 0 , 0 ) (0,0) (0,0)走到 ( X , Y ) (X,Y) (X,Y)至少需要多少步?
注意:在二维平面上,两个点 ( x 1 , y 1 ) (x_1, y_1) (x1​,y1​)和 ( x 2 , y 2 ) (x_2,y_2) (x2​,y2​)的距离是 ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 \sqrt{(x_1-x_2)^2+(y_1-y_2)^2} (x1​−x2​)2+(y1​−y2​)2 ​。

1 ≤ R ≤ 1 0 5 1\le R\le 10^5 1≤R≤105
0 ≤ X , Y ≤ 1 0 5 0\le X,Y\le 10^5 0≤X,Y≤105
( X , Y ) ≠ ( 0 , 0 ) (X,Y)\ne(0,0) (X,Y)=(0,0)

输入格式

R   X   Y R~X~Y R X Y

输出格式

输出一行,即最少需要的步数。

样例

R R R X X X Y Y Y输出
5 5 5 15 15 15 0 0 0 3 3 3
5 5 5 11 11 11 0 0 0 3 3 3
3 3 3 4 4 4 4 4 4 2 2 2

分析

我们可以先定义 d = X 2 + Y 2 d=\sqrt{X^2+Y^2} d=X2+Y2 ​,即 ( X , Y ) (X,Y) (X,Y)到 ( 0 , 0 ) (0,0) (0,0)的距离,则有如下解法:

  • 如果 d = R d=R d=R,则总共只需要 1 1 1步。
  • 如果 d < R d<R d<R,则总共需要 2 2 2步。
  • 如果 d > R d>R d>R,总共需要 ⌈ d r ⌉ \lceil\frac d r\rceil ⌈rd​⌉步。

这样,我们就可以写代码了。

代码

这题很容易出现精度问题,但我用long double居然卡过去了……

#include <cstdio>
#include <cmath>
using namespace std;

int main()
{
	int r, x, y;
	scanf("%d%d%d", &r, &x, &y);
	long double dist = hypotl(x, y);
	if(dist == r) puts("1");
	else if(dist < r) puts("2");
	else printf("%d\n", int(ceill(dist / r)));
	return 0;
}

D - Send More Money

注意:本题的时间限制是 5 5 5秒。

题目大意

给定三个由小写字母组成的字符串 S 1 , S 2 , S 3 S_1,S_2,S_3 S1​,S2​,S3​。
在这里,相同的字母表示相同的数字,不同的字母表示不同的数字。
我们要找到一种每个字母对应的数字,并将它们分别填入 S 1 , S 2 , S 3 S_1,S_2,S_3 S1​,S2​,S3​,变成三个无前导 0 0 0的正整数 N 1 , N 2 , N 3 N_1,N_2,N_3 N1​,N2​,N3​,使得 N 1 + N 2 = N 3 N_1+N_2=N_3 N1​+N2​=N3​。如果有多组解,找到任意一组即可。

1 ≤ ∣ S 1 ∣ , ∣ S 2 ∣ , ∣ S 3 ∣ ≤ 10 1\le |S_1|,|S_2|,|S_3|\le 10 1≤∣S1​∣,∣S2​∣,∣S3​∣≤10

输入格式

S 1 S_1 S1​
S 2 S_2 S2​
S 3 S_3 S3​

输出格式

如果有解,输出三行,即 N 1 , N 2 N_1,N_2 N1​,N2​和 N 3 N_3 N3​;如果无解,输出UNSOLVABLE。

样例

| S 1 S_1 S1​| S 2 S_2 S2​| S 3 S_3 S3​|输出|
|–|–|–|–|–|–|
|a|b|c|1 2 3|
|x|x|y|1 1 2|
|p|q|p|UNSOLVABLE|

分析

很容易想到,因为每位能填的数字只有 0 0 0到 9 9 9(一共 10 10 10个),所以如果 S 1 , S 2 S_1,S_2 S1​,S2​和 S 3 S_3 S3​中总共不同的字母个数超过 10 10 10个,我们就可以直接认为这个等式无解。
现在,由于这道题时间限制较长,我们就可以暴力枚举每一种字母对应的数字(一共最多有 10 ! = 3628800 10!=3628800 10!=3628800种可能),再逐个填入并验证即可。

代码

这里的枚举我是用全排列做的,当然也可以用回溯法等,方法不限。

#include <cstdio>
#include <set>
#include <algorithm>
#define maxl 15
using namespace std;

using LL = long long;

char s1[maxl], s2[maxl], s3[maxl], ch[maxl];

set<char> chars;
int pos[26], num[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

#define N (num[pos[str[i] - 'a']])
inline LL parse(const char* str)
{
	LL res = 0LL;
	for(int i=0; str[i]; i++)
		res = res * 10LL + N;
	return res;
}

inline void print(const char* str)
{
	for(int i=0; str[i]; i++)
		putchar(N + '0');
	putchar('\n');
}
#undef N

inline void add(const char* str)
{
	for(int i=0; str[i]; i++)
		chars.insert(str[i]);
}

inline bool isok(const char* str)
{
	return num[pos[str[0] - 'a']] != 0;
}

int main()
{
	scanf("%s%s%s", s1, s2, s3);
	add(s1), add(s2), add(s3);
	if(chars.size() > 11)
	{
		puts("UNSOLVABLE");
		return 0;
	}
	int cnt = 0;
	for(char x: chars)
		pos[x - 'a'] = cnt++;
	do
	{
		if(isok(s1) && isok(s2) && isok(s3) && (parse(s1) + parse(s2) == parse(s3)))
		{
			print(s1);
			print(s2);
			print(s3);
			return 0;
		}
	} while(next_permutation(num, num + 10));
	puts("UNSOLVABLE");
	return 0;
}

P.S. 这段代码的运行速度不可思议的快…… 居然只花了 109 109 109ms……


E - Unique Color

题目大意

给你一棵由编号为 1 , 2 ,   … , N 1,2,~\dots,N 1,2, …,N的 N N N个顶点组成的树。其中,第 i i i条边连接着顶点 A i A_i Ai​和 B i B_i Bi​。第 i i i个顶点的颜色是 C i C_i Ci​(在这里,颜色用一个整数表示)。
我们定义一个顶点 x x x是好的,仅当如下条件成立:

  • 从顶点 1 1 1到顶点 x x x的最短路径上,没有与顶点 x x x颜色相同的点(顶点 x x x本身除外)。

找到所有的好的顶点。

2 ≤ N ≤ 1 0 5 2\le N\le 10^5 2≤N≤105
1 ≤ C i ≤ 1 0 5 1\le C_i\le 10^5 1≤Ci​≤105
1 ≤ A i , B i ≤ 1 0 5 1\le A_i,B_i\le 10^5 1≤Ai​,Bi​≤105

输入格式

N N N
C 1   …   C N C_1~\dots~C_N C1​ … CN​
A 1   B 1 A_1~B_1 A1​ B1​
⋮ \vdots ⋮
A N − 1   B N − 1 A_{N-1}~B_{N-1} AN−1​ BN−1​

输出格式

输出所有的好的顶点,按升序排序,每行一个。

样例

略,请自行前往AtCoder查看

分析

其实这题用最朴素的 DFS \text{DFS} DFS算法就能解决。
我们在搜索的同时,维护一个 used \text{used} used数组,记录每个颜色在路径上是否已经用过。这样,我们就能 O ( 1 ) \mathcal O(1) O(1)地判断每个点是否是一个好的点,最后排序并输出即可。

代码

#include <cstdio>
#include <vector>
#include <set>
#define maxn 100005
using namespace std;

vector<int> G[maxn];
bool used[maxn];
int color[maxn];

set<int> res;

void dfs(int v, int par)
{
	if(used[color[v]])
	{
		for(int u: G[v])
			if(u != par)
				dfs(u, v);
		return;
	}
	used[color[v]] = true;
	res.insert(v);
	for(int u: G[v])
		if(u != par)
			dfs(u, v);
	used[color[v]] = false;
}

int main()
{
	int n;
	scanf("%d", &n);
	for(int i=1; i<=n; i++)
		scanf("%d", color + i);
	while(--n)
	{
		int x, y;
		scanf("%d%d", &x, &y);
		G[x].push_back(y);
		G[y].push_back(x);
	}
	dfs(1, -1);
	for(int v: res)
		printf("%d\n", v);
	return 0;
}
基于deepseek+dify+达梦实现自然语言查询数据库 自然语言查询数据库信息 阅读详情

相关推荐

从Applied Intelligence被拒到The Visual Computer录用:我的计算机视觉论文投稿时间线全记录(含详细修改意见)

本文详细记录了作者从Applied Intelligence被拒到The Visual Computer成功发表计算机视觉论文的全过程,重点分享了如何将模糊的拒稿理由转化为具体改进方案。文章包含技术改进细节、写作调整策略以及期刊选择经验,为计算机视觉领域的研究者提供了实用的投稿指南。

weixin_30872499的博客 467

Atcoder Beginner Contest 198

A-E还蛮简单的,本彩笔就来水水题解 A-Div #include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; cout<<n-1<<endl; } B - Palindrome with leading zeros 思路:添几个0看有无满足条件的即可。 #include<bits/stdc++.h> using namespace std; bo

kurisu0725的博客 484

uniapp+uniCloud实现微信小程序一键登录

(用户唯一标识),用户登录成功后,开发者服务器可以将openid和session_key保存,生成一个自定义登录态的token令牌响应给微信小程序,通过token可以查询openid和session_key,小程序下次请求只要携带着token就可以证明已经登录。这个API就是获取用户信息,每次请求都会弹出授权窗口(这个可能会不弹,这个要看你的版本,根据版本来定,不懂的可以留下评论),用户同意后会返回。到这里就可以实现微信一键登录了,快去试试吧,有问题可以在评论区留言,我看见会尽我知道的为你解答。

lb2917的博客 2577

AtCoder Beginner Contest 198

AtCoder Beginner Contest 198 A Div #pragma GCC optimize(2) #pragma GCC optimize(3,"Ofast","inline") #include <bits/stdc++.h> #define inf 0x7fffffff #define ll long long #define int long long //#define double long double #define eps 1e-8 //#define mo

lcl1234567890lcl的博客 169

Java 多线程(1)---- 初识线程

前言 多线程想必大家都不会陌生。因为在日常使用和开发中,多线程的使用实在是太常见了。我们都知道,发明多线程的目的是为了更好的利用计算机的 CPU 资源。比如在一个进程中如果只有一个线程(也叫主线程),那么如果当这个线程因为某种原因阻塞(等待用户输入数据等情况)的时候,那么相对应的这个进程也让出了 CPU 资源并暂停执行了。试想一下,如果我们在一个进程中添加多个线程,那么当这个进程中某个线程阻塞的...

指点 1544

3D缺陷检测实战:从点云处理到工业质检优化

本文深入探讨了3D缺陷检测在工业质检中的实战应用,详细阐述了从点云处理到深度学习模型部署的完整技术链路。文章通过PCB焊点检测等实际案例,分析了3D视觉相比2D检测在识别深度、形状等缺陷方面的优势,并分享了点云滤波、分割、特征提取以及利用YOLOv5等模型进行高效检测的优化心得与落地挑战。

weixin_28358083的博客 338

[AtCoder ABC-198D] Send More Money(map用法)题解

D - Send More Money Time Limit: 5 sec / Memory Limit: 1024 MB Problem Statement Given stringsS1,S2,S3S1,S2,S3consisting of lowercase English letters, solve the alphameticS1+S2=S3S1+S2=S3. Formally, determine whether there is a triple ofpositiveint...

黄佳俊的博客 720

从零复刻平衡小车(基于STM32F1)

平衡小车(基于STM32F1)

Legendyyy的博客 5041

AtCoder Beginner Contest 150

AtCoder Beginner Contest 150

青少年趣味编程 969

【有啥问啥】智能座舱CPD技术:毫米波雷达如何守护儿童安全?

本文深入探讨了智能座舱中CPD(Child Presence Detection)技术如何通过毫米波雷达保障儿童安全。毫米波雷达凭借其穿透性检测、微动感知等优势,成为儿童遗留车内的有效解决方案。文章详细解析了技术原理、系统集成方案及安装指南,为智能座舱安全技术提供了实用参考。

weixin_29193259的博客 358

SAP 销售订单BOM使用场景简介

通常在MTO的生产场景中,我们会根据已创建的SO去展开BOM去驱动生产,如果我们生产地产品BOM是通用性的通常我们用标准BOM的方式就可以实现,但是实际在生产过程中往往不会这样,不同的客户对某些物料的规格就不相同,就会涉及产生不同的BOM,但是该客户的产品又不存在通用性,这个时候就会引入概念就是销售订单BOM,先有销售订单然后根据销售订单+行项目创建BOM。销售BOM:根据销售订单号+行项目号创建的BOM,是根据特定的销售订单或者可以理解为特定的客户创建的BOM。

我小时候很黑的博客 4220

AtCoder Beginner Contest 176

AtCoder Beginner Contest 176

青少年趣味编程 1080

大模型技术全景与核心概念解析:从基础原理到AI智能体架构(实时更新中)

本文系统解析了大模型技术的核心概念与架构。首先介绍了LLM(大语言模型)、LLMOps(模型运维)、AIGC(生成内容)、AGI(通用AI)等基础概念,重点阐述了大模型的工作原理,包括预处理、推理和后处理三个阶段。深入讲解了Token分词、FLOPs计算、Embedding向量表示等关键技术,并分析了LoRA微调、MoE架构等前沿方法。文章还探讨了AI智能体的发展前景,为理解大模型技术提供了全景视角。

算法工程师 1238

Atcoder Beginner Contest 151

Atcoder Beginner Contest 151

青少年趣味编程 925

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

AtCoder Beginner Contest 181

AtCoder Beginner Contest 181

青少年趣味编程 995

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

AtCoder Beginner Contest 167-200

AtCoder Beginner Contest 167-200

青少年趣味编程 900

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

AtCoder Beginner Contest 189

AtCoder Beginner Contest 189

青少年趣味编程 1038

AtCoder Beginner Contest 435

AtCoder Beginner Contest 435吸引了众多选手参与,多个平台发布了比赛题解和复盘视频。B站上有多个解说视频,包括赛时5题和6题的解法分析。优快云和知乎等平台也提供了详细的题解(ABCDEF),其中一篇博客还分享了生日参赛获得773名排名的经历。此外,还有对435和436两场比赛的金牌视角全解析。相关资源覆盖了从基础题解到高级分析,为参赛者提供了全面的学习参考。

青少年趣味编程 675

AtCoder Beginner Contest 434

AtCoder Beginner Contest 434(ABC434)是一场面向初学者的编程竞赛,包含A-F六个题目。比赛实况录像和题解已在B站、知乎、优快云等平台发布,涵盖A-E题目的详细解析。参赛选手在比赛中排名1912位,表现分1171,解决了4道题目。相关资源还包括往届ABC191-ABC200比赛的题解资料,为编程竞赛学习者提供参考。

青少年趣味编程 489

AtCoder Beginner Contest 181-200

本文摘要整理了多个技术竞赛和学习的相关资源,包括AtCoder、Codeforces等编程竞赛题解,以及NOI、CSP等信奥赛的备考资料。内容涵盖数学、物理、英语学习资源,微积分入门书籍,以及信息学竞赛的省选真题和题单推荐。同时提供了考研保研、前沿科技研究的相关信息,适合编程竞赛选手和STEM学习者参考使用。

青少年趣味编程 38

AtCoder题解——Beginner Contest 169——C - Multiplication 3

题目相关 题目链接 AtCoder Beginner Contest 169 C题,https://atcoder.jp/contests/abc169/tasks/abc169_c。 Problem Statement ComputeA×B, truncate its fractional part, and print the result as an integer. Input Input is given from Standard Input in the following fo.

努力中的老周的专栏 1066

AtCoder Beginner Contest 169—ABCD题

文章目录A - Multiplication 1AC代码:B - Multiplication 2思路:AC代码:C - Multiplication 3思路:AC代码1:AC代码2: A - Multiplication 1 传送门:A - Multiplication 1 AC代码: #include<iostream> #include<string> using namespace std; int main() { int a,b; cin>>a>&

Lucas9的博客 622

AtCoder Beginner Contest 189 F. Sugoroku2

链接 https://atcoder.jp/contests/abc189/tasks/abc189_f 题意 需要从 000 走到 nnn,有一个转盘,转盘上有 1∼m1\sim m1∼m,转到哪个数走几步 当你走到 aia_iai​,你要退回到 000,总共有 kkk 个这样的点 问到达 nnn 或超过 nnn 的期望步数 思路 dpi={0i>=ndp0i∈a1+∑j=1mdpi+jmelsedp_i= \begin{cases} 0 & {i>=n} \\ dp_0 &

c4Lnn 的 优快云 博客 213

AtCoder Beginner Contest 169 C Multiplication 3 浮点数扩大100倍后成整数,竟然还有误差

AtCoder Beginner Contest 169 比赛人数11374 比赛开始后15分钟看到A题,在比赛开始后第20分钟看到所有题 AtCoder Beginner Contest 169 C Multiplication 3 浮点数扩大100倍后成整数,竟然还有误差 总目录详见https://blog.youkuaiyun.com/mrcrack/article/details/104454762 在线测评地址https://atcoder.jp/contests/abc169/task...

mrcrack的博客 612
上一篇: AtCoder Beginner Contest 196 A~E题解
下一篇: Mynavi Programming Contest 2021 (AtCoder Beginner Contest 201) A~E 题解
GoodCoder666
博客等级 码龄7年 2320粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值