PTA 520钻石争霸赛 2023 补题

520-1 520无尽爱 

分数 5                                                       作者 陈越                                                单位 浙江大学

《I Love You 1000 Times》是 The Platters 于 2019 年演唱的歌曲。在 520 这个日子里,拼题 A 请你实现一个小功能,把 1000 这个数字换成用户输入的任意一个数字,然后仿照歌名的句式输出表白。当然,这里用中文 520 替换英文 I Love You。

输入格式:

输入在一行中给出一个不小于 100 且不超过 10 000 的正整数 N,是用户想要输出的一个数字。

输出格式:

在一行中按以下格式输出表白:

520 N Times!

输入样例:

6666

输出样例:

520 6666 Times!

AC:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n;
	cin >> n;
	printf("520 %d Times!\n", n);
	return 0;
}

520-2 心动指数

分数 10                                                        作者 陈越                                                单位 浙江大学

一个人对另一个人的“心动指数”是一个 [−100,100] 区间内的整数,越大就表示越喜欢。当 A 对 B 的心动指数达到或超过了给定阈值 T 的时候,就称 A 对 B “动心”了。
本题要求你根据你对某人的心动指数和 ta 对你的心动指数,判断你们两人之间的关系,而这个关系用一个表情符号来体现。规则如下:

  • 如果你对 ta 动心,且 ta 也对你动心,则输出 *^_^*
  • 如果你对 ta 动心,但 ta 没对你动心,则输出 T_T
  • 如果你没对 ta 动心,但 ta 对你动心,则输出 -_-#
  • 如果你没对 ta 动心,且 ta 也没对你动心,则输出 -_-

输入格式:

输入在一行中给出三个 [−100,100] 区间内的整数,依次为给定阈值 T、你对 ta 的心动指数、ta 对你的心动指数。

输出格式:

在一行输出对应的表情符号。

输入样例:

60 80 70

输出样例:

*^_^*

 AC:

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a, b, t;
	cin >> t >> a >> b;
	if(a < t && b < t){
		puts("-_-");
	}else if(a < t && b >= t){
		puts("-_-#");
	}else if(a >= t && b < t){
		puts("T_T");
	}else if(a >= t && b >= t){
		puts("*^_^*");
	}
    
    return 0;
}

520-3 不要怕,爱!

分数 10                                                        作者 陈越                                                单位 浙江大学

古代少女有了心上人时,会悄悄折一条树枝,揪那枝上的叶子,揪一片叶子念一句“爱我”,再揪一片念一句“不爱我”…… 这样揪落最后一片叶子的时候,看看是停在“爱”还是“不爱”。

本题就请你根据枝条上叶子的片数,告诉你的用户应该从“爱”还是“不爱”开始,最后一定停在“爱”上。

输入格式:

输入在第一行中给出正整数 N(≤30),是来咨询的用户数。随后 N 行,每行给出一个不超过 100 的正整数,是用户手里枝条上叶子的片数。

输出格式:

对用户的每个询问,在一行中输出你的建议:如果建议从“爱”开始,就输出 Love!,否则输出 !Love

输入样例:

2
18
9

输出样例:

!Love
Love!

AC:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n; cin >> n;
	while (n--) {
		int x; cin >> x;
		if (x % 2 == 0) puts("!Love");
		else puts("Love!");
	}
	return 0;
}

520-4 天生一对

分数 15                                                        作者 陈越                                                单位 浙江大学

网上查到 12 生肖婚姻最佳配对表如下:
  1、属鼠:与鼠宜配的生肖有龙、猴、牛;而生肖马、兔、羊则不宜与之合婚配对。
  2、属牛: 与牛宜配的生肖有鼠、蛇、鸡;而生肖羊、马、狗则不宜与之合婚配对。
  3、属虎: 与虎宜配的生肖有马、狗;而生肖猴、蛇则不宜与之合婚配对。
  4、属兔: 与兔宜配的生肖有羊、狗、猪;而生肖鸡、鼠则不宜与之合婚配对。
  5、属龙: 与龙宜配的生肖有鼠、猴、鸡;而生肖狗则不宜与之合婚配对。
  6、属蛇: 与蛇宜配的生肖有牛、鸡;而生肖猪、虎则不宜与之合婚配对。
  7、属马: 与马宜配的生肖有虎、羊、狗;而生肖鼠、牛则不宜与之合婚配对。
  8、属羊: 与羊宜配的生肖有兔、马、猪;而生肖牛、狗则不宜与之合婚配对。
  9、属猴: 与猴宜配的生肖有鼠、龙;而生肖虎、猪则不宜与之合婚配对。
  10、属鸡: 与鸡宜配的生肖有牛、龙、蛇;而生肖兔则不宜与之合婚配对。
  11、属狗: 与狗宜配的生肖虎、兔、猪;而生肖龙、牛则不宜与之合婚配对。
  12、属猪: 与猪宜配的生肖有兔、龙、猪;而生肖蛇、猴则不宜与之合婚配对。
本题请你实现一个赛博算命先生,为前来咨询的恋人们判断一下,他们是否属相相合。

注意:上面的宜配关系是不完全对称的,但是无妨,我们这里默认 A 与 B 宜配,则 B 一定与 A 宜配。

输入格式:

为方便起见,我们按 12 生肖的顺序(即:鼠牛虎兔龙蛇马羊猴鸡狗猪)将它们从 1 到 12 编号。输入首先给出每个生肖相合和不合的生肖对应关系。格式如下:

生肖编号
相合生肖数n 生肖1 ... 生肖n
不合生肖数m 生肖1 ... 生肖m

题目保证给出的对应关系与题面中一致。
随后一行中给出正整数 N(≤60),是来咨询的用户数。随后 N 行,每行给出一对恋人的属相。两个属相之间用空格分隔。

输出格式:

对用户的每个询问,在一行中输出你的建议:如果属相相合,就输出 Yes;如果属相不合,就输出 No;如果没有明确合还是不合,则输出 NA(Not Available 的意思)。

输入样例:

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

输出样例:

Yes
No
NA

 AC:

#include<bits/stdc++.h>
using namespace std;
vector<int> v[13];
int main(){
	int t, n, m, x;
	for(int i = 1; i <= 12; ++i){
		cin >> t;
		cin >> n;
		while(n--){
			cin >> x;
			v[t].emplace_back(x);
		}
		cin >> m;
		while(m--){
			cin >> x;
			v[t].emplace_back(-1 * x);
		}
	}
	cin >> n;
	while(n--){
		int a, b, fg = 0;
		cin >> a >> b;
		for(int i = 0; i < v[a].size(); ++i){
			if(v[a][i] == b){
				fg = 1;
				break;
			}else if(v[a][i] == -b){
				fg = 2;
				break;
			}
		}
		if(fg == 0){
			for(int i = 0; i < v[b].size(); ++i){
				if(v[b][i] == a){
					fg = 1;
					break;
				}else if(v[b][i] == -a){
					fg = 2;
					break;
				}
			}
		}
		if(fg == 1) puts("Yes");
		else if(fg == 2) puts("No");
		else if(fg == 0) puts("NA");
	}
    
    return 0;
}

520-5 翻倒数

分数 15                                                        作者 陈越                                                单位 浙江大学

我们看到,把数字 0-9 翻倒,有的数字就认不出来了,比如 2、3、4、5、7;有的数字看上去没什么大的变化,比如 0、1、8;还有的数字变成了另一个数,比如 6 变成 9,9 变成 6。

给定一堆数字,请你判别每个数有没有可能是另一个数字翻倒形成的。

输入格式:

输入在第一行中给出一个正整数 n(≤20),随后 n 行,每行给出一个不超过 100 位的数字。

输出格式:

对每个给定的数字,如果它可能是由另一个数字翻倒得来的,就输出那个翻倒前的原始数字;如果不可能,就输出 bu ke neng

输入样例:

4
10086
233
9999
17456

输出样例:

10089
bu ke neng
6666
bu ke neng

 PA:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n; cin >> n;
	while (n--) {
		int fg = 0;
		string s, tmp; cin >> s;
		for (int i = 0; s[i]; ++i) {
			if (s[i] == '0' || s[i] == '1' || s[i] == '8') {
				tmp += s[i];
				fg = 1;
			}
			else if (s[i] == '6') {
				tmp += '9';
				fg = 1;
			}
			else if (s[i] == '9') {
				tmp += '6';
				fg = 1;
			}
			else if(s[i] == '2' || s[i] == '3' || s[i] == '4' || s[i] == '5' || s[i] == '7') {
				fg = 0;
				break;
			}
		}
		if(fg == 1) cout << tmp << endl;
		if(fg == 0) puts("bu ke neng");
	}

	return 0;
}

 原因:不知道哪里错了,奇奇怪怪滴,改了个fg就AC了

AC:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n; cin >> n;
	while (n--) {
		int fg = 1;
		string s, tmp; cin >> s;
		for (int i = 0; s[i]; ++i) {
			if (s[i] == '0' || s[i] == '1' || s[i] == '8') {
				tmp += s[i];
			}
			else if (s[i] == '6') {
				tmp += '9';
			}
			else if (s[i] == '9') {
				tmp += '6';
			}
			else if (s[i] == '2' || s[i] == '3' || s[i] == '4' || s[i] == '5' || s[i] == '7') {
				fg = 0;
				break;
			}
		}
		if (fg == 1) cout << tmp << endl;
		if (fg == 0) puts("bu ke neng");
	}

	return 0;
}

520-6 情侣数

分数 20                                                        作者 陈越                                                单位 浙江大学

要凑出一个“情侣数”可不太容易。这个数字需要满足以下几个条件:

  • 情侣数必须是一个正整数,并且有偶数位;
  • 将这个数分为位数相同的前一半 A 和后一半 B,则 A 的各位数字从左到右是非递增的,B 的各位数字从左到右是非递减的;
  • 将 A 和 B 的各位数字分别加起来得到对应的 SA​ 和 SB​,则 SA​ 和 SB​ 的奇偶性是相反的。

例如 98762234 就是一个情侣数,因为它是一个 8 位正整数;前一半 9876 的各位数字是严格递减的,后一半 2234 的各位数字是非递减的;SA​=9+8+7+6=30 是偶数,SB​=2+2+3+4=11 是奇数。
本题就请你找出给定的一系列数字中最大的那个情侣数。

输入格式:

输入第一行首先给出一个正整数 N(≤104),随后 N 行,每行给出一个绝对值小于 108 的整数。

输出格式:

在第一行中输出 N 个给定数字中共有几个情侣数,第二行输出最大的那个情侣数。题目保证这个数字一定存在。

输入样例:

5
-2157
6621138
99123199
3112
98762234

输出样例:

2
98762234

样例说明:

样例输入中前 3 个数字都不是情侣数。最后 2 个情侣数中,最后一个数字比较大,所以被输出。

思路:其实so easy这一题,but I have no time!  /(ㄒoㄒ)/~~

AC:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n, ct = 0; cin >> n;
	string mx = "";
	while (n--) {
		string s; cin >> s;
		if (s[0] == '-') continue;
		if (s.length() % 2 == 1) continue;
		int fg = 1, m = s.length() / 2, sa = 0, sb = 0;
		for (int i = 0; i + 1 < m; ++i) {
			if (s[i] < s[i + 1]) {
				fg = 0;
				break;
			}
		}
		if (fg) {
			for (int i = m; i + 1 < s.length(); ++i) {
				if (s[i] > s[i + 1]) {
					fg = 0;
					break;
				}
			}
		}
		if (fg) {
			for (int i = 0; i < m; ++i) {
				sa += s[i] - '0';
			}
			for (int i = m; i < s.length(); ++i) {
				sb += s[i] - '0';
			}
		}
		if (fg) {
			if (sa % 2 == sb % 2)
				fg = 0;
		}
		if (fg) {
			ct++;
			if (mx < s) mx = s;
		}
	}
	cout << ct << endl << mx;
	return 0;
}

520-7 撒狗粮

分数 20                                                        作者 陈越                                                单位 浙江大学

网络上称一对情侣秀恩爱为“撒狗粮”,因为单身人士统称为“单身狗”。
在一个大型聚会上,所有宾客被安排坐在一张长条宴会桌边。如果一对情侣坐在一起,那么他们两人身边的单身狗就会被撒一脸狗粮;如果他们没有坐在一起,那么所有被夹在他们两人之间的单身狗都会被撒一脸狗粮。
本题就请你找出被撒狗粮最多(以“脸”为单位)的那位单身人士。

输入格式:

输入第一行给出一个正整数 N(≤ 50 000),是已知情侣的对数;随后 N 行,每行给出一对情侣——为方便起见,每人对应一个 ID 号,为 5 位数字(从 00000 到 99999),ID 间以空格分隔;之后给出一个正整数 M(≤ 80 000),为参加派对的总人数;随后一行按座位从左到右的顺序给出这 M 位客人的 ID,以空格分隔。题目保证无人脚踩两条船。

输出格式:

在一行中输出被撒狗粮最多的单身人士。如果不唯一,按 ID 递增顺序列出。ID 间用 1 个空格分隔,行的首尾不得有多余空格。
题目保证至少有一个输出。

输入样例:

4
11111 22222
33333 44444
55555 66666
77777 88888
10
11111 33333 88888 22222 23333 55555 66666 10000 44444 12345

输出样例:

10000 23333 88888

注意:88888 虽然有伴侣,但在聚会上是单身。

思路:关于区间和之类的,暴力会超时,当时比赛1小时拼手速,本人老年人手速,没时间看这题。正解应用map映射,然后做差分,考后时光机AC。

AC:

#include<bits/stdc++.h>
using namespace std;
const int M = 80005;
map<string, string> mp;//id->对象id
map<string, int> id;//id->下标
vector<string> ans;
int a[M];//差分数组
bool fg[M];//有伴侣
int mx;
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n; cin >> n;
	for (int i = 0; i < n; ++i) {
		string a, b;
		cin >> a >> b;
		mp[a] = b; mp[b] = a;
	}
	int m; cin >> m;
	vector<string> v(m + 1);
	for (int i = 1; i <= m; ++i) {
		cin >> v[i];
		id[v[i]] = i;
	}
	for (int i = 1; i <= m; ++i) {
		int j = id[mp[v[i]]];
		if (j != 0) {//有对象且对象来了
			fg[i] = fg[j] = 1;
			if (i + 1 == j) {//坐在一起
				if (j != m) {
					a[j + 1] += 1;
					a[j + 1 + 1] -= 1;
				}
				if (i != 1) {
					a[i - 1] += 1;
					a[i] -= 1;
				}
			}
			else if (i < j) {
				a[i + 1] += 1;
				a[j] -= 1;
			}
		}
	}
	for (int i = 1; i <= m; ++i)
		a[i] += a[i - 1];
	for (int i = 1; i <= m; ++i) {
		if (fg[i]) continue;
		if (a[i] > mx) {
			mx = a[i];
			ans.clear();
			ans.emplace_back(v[i]);
		}
		else if (a[i] == mx) ans.emplace_back(v[i]);
	}
	sort(ans.begin(), ans.end());
	for (int i = 0; i < ans.size(); ++i) {
		if (i) cout << ' ' << ans[i];
		else cout << ans[i];
	}
	return 0;
}

520-8 相亲大会

分数 25                                                        作者 陈越                                                单位 浙江大学

某婚恋网站组织了一场相亲大会。组织者手里有一份签到表,按座位号的顺序列出前来参会的客人。但客人们要根据这份表找到自己的座位编号就很麻烦了。本题就要求你编写程序,帮助来参会的客人们快速找到他们的座位号。

输入格式:

输入第一行给出一个不超过 103 的正整数 N,是相亲大会的注册人数。以下 N 行,第 i 行给出座位号为 i 的客人的注册号(i=1,⋯,N)。注册号是一个不超过8位、完全由数字组成的字符串。输入保证每位客人只分配一个座位。
接下来一行给出一个不超过 105 的正整数 M,是待查询的客人数。以下 M 行,每行给出一个待查询的客人的注册号。

输出格式:

对每一位待查询的客人,如果他在会场里有座位,则在一行中输出其座位号;否则输出 Sorry,表示座位号不存在。

输入样例:

5
100013
200233
100001
520077
886759
4
520077
000000
100013
999999

输出样例:

4
Sorry
1
Sorry

思路:就判断这个id的人是否有座位号map一下就好了,注意①用unordered_map查询,避免超时;②用scanf读入,避免超时。(不过用int数组比unordered_map快哟~)

 AC:

#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
unordered_map<int, int> mp;
int main() {
	int n, m;
	scanf("%d", &n);
	for (int i = 1; i <= n; ++i) {
		int x; scanf("%d", &x);
		mp[x] = i;
	}
	scanf("%d", &m);
	while (m--) {
		int x; scanf("%d", &x);
		if (mp[x] == 0) puts("Sorry");
		else cout << mp[x] << endl;
	}
	return 0;
}
经过网络搜索,以下是关于PTA 520钻石及相关产品信息的整理: --- ### 关于PTA 520钻石的相关背景 PTA通常指精对苯二甲酸(Pure Terephthalic Acid),是一种重要的化工原料。而“520”可能是指特定日期(例如5月20日)或者某种特殊型号的产品名称。“钻石”则可能是品牌名或营销概念的一部分。结合这些关键词,“PTA 520钻石”可能涉及纪念品、收藏品或其他定制化礼品。 --- ### 可能的产品类别与特点 #### 1. 定制类珠宝产品 一些商家会推出以“520”为主题的钻戒、吊坠等珠宝产品,寓意“我爱你”。这类产品可能会采用高品质钻石,并搭配个性化设计服务。 - **材料**:天然钻石、K金、铂金等贵金属材质。 - **工艺**:3D硬金技术、微镶工艺等现代加工方式。 - **购买渠道**:知名珠宝品牌的线下门店或电商平台旗舰店(如周大福、老凤祥)。 #### 2. 化工行业联名款礼盒 由于PTA属于化工领域的重要原材料,在某些企业活动中,可能会推出带有“520”主题的限量版礼盒作为促销手段或员工福利。此类礼盒可能包括小型饰品模型以及相关宣传资料。 #### 3. 投资级钻石证书配套产品 对于关注投资价值的人群来说,市场上存在附带国际权威机构认证书的投资级别裸钻。这种类型的钻石适合长期保值增值需求。具体参数如下所示: | 参数 | 描述 | |------------|----------------------------------------------------------------------| | 净度 (Clarity) | VVS1 / VS2 | | 切工 (Cut) | Excellent | | 色泽 (Color) | D-E | | 克拉数 (Carat Weight)| ≥1克拉 | --- ### 如何选择合适的PTA 520钻石产品? 根据个人用途不同可以选择相应款式:如果是用于表白求婚,则建议挑选经典简约风格;若是为了资产配置考虑,则需注重GIA/HRD/AIG等第三方检测报告的真实性与完整性。 --- ### 注意事项 消费者在选购过程中应注意辨别真伪以防上当受骗。正规途径获取的商品不仅质量更有保障而且售后服务也相对完善。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值