2022年团体程序设计天梯赛-总决赛——L1

2024-04-09 05:04

本文主要是介绍2022年团体程序设计天梯赛-总决赛——L1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:L1-1 今天我要赢

2018 年我们曾经出过一题,是输出“2018 我们要赢”。今年是 2022 年,你要输出的句子变成了“我要赢!就在今天!”然后以比赛当天的日期落款。

输入格式:

本题没有输入。

输出格式:

输出分 2 行。在第一行中输出 I'm gonna win! Today!,在第二行中用 年年年年-月月-日日 的格式输出比赛当天的日期。已知比赛的前一天是 2022-04-22

输入样例:

输出样例(第二行的内容要你自己想一想,这里不给出):

I'm gonna win! Today!
这一行的内容我不告诉你…… 你要自己输出正确的日期呀~

要求:

解析:

思路:

签到题,直接输出即可。

代码:
#include<iostream>
using namespace std;
int main()
{cout<<"I'm gonna win! Today!"<<endl;cout<<"2022-04-23"<<endl;return 0;
}
结果:

题目:L1-2 种钻石

d.jpg

2019年10月29日,中央电视台专题报道,中国科学院在培育钻石领域,取得科技突破。科学家们用金刚石的籽晶片作为种子,利用甲烷气体在能量作用下形成碳的等离子体,慢慢地沉积到钻石种子上,一周“种”出了一颗 1 克拉大小的钻石。

本题给出钻石的需求量和人工培育钻石的速度,请你计算出货需要的时间。

输入格式:

输入在一行中给出钻石的需求量 N(不超过 107 的正整数,以微克拉为单位)和人工培育钻石的速度 v(1≤v≤200,以微克拉/天为单位的整数)。

输出格式:

在一行中输出培育 N 微克拉钻石需要的整数天数。不到一天的时间不算在内。

输入样例:

102000 130

输出样例:

784

要求:

解析:

思路:

本体相当于直接告诉你速度和总量,让你求其天数。此题只要求得到整数,因此对精度没有要求,直接整除即可。     

代码:
#include<iostream>
using namespace std;
int main()
{int N,v;cin>>N>>v;cout<<N/v;return 0;
}
结果:

题目:L1-3 谁能进图书馆

为了保障安静的阅读环境,有些公共图书馆对儿童入馆做出了限制。例如“12 岁以下儿童禁止入馆,除非有 18 岁以上(包括 18 岁)的成人陪同”。现在有两位小/大朋友跑来问你,他们能不能进去?请你写个程序自动给他们一个回复。

输入格式:

输入在一行中给出 4 个整数:

禁入年龄线 陪同年龄线 询问者1的年龄 询问者2的年龄

这里的禁入年龄线是指严格小于该年龄的儿童禁止入馆;陪同年龄线是指大于等于该年龄的人士可以陪同儿童入馆。默认两个询问者的编号依次分别为 1 和 2;年龄和年龄线都是 [1, 200] 区间内的整数,并且保证 陪同年龄线 严格大于 禁入年龄线

输出格式:

在一行中输出对两位询问者的回答,如果可以进就输出 年龄-Y,否则输出 年龄-N,中间空 1 格,行首尾不得有多余空格。

在第二行根据两个询问者的情况输出一句话:

  • 如果两个人必须一起进,则输出 qing X zhao gu hao Y,其中 X 是陪同人的编号, Y 是小孩子的编号;
  • 如果两个人都可以进但不是必须一起的,则输出 huan ying ru guan
  • 如果两个人都进不去,则输出 zhang da zai lai ba
  • 如果一个人能进一个不能,则输出 X: huan ying ru guan,其中 X 是可以入馆的那个人的编号。

输入样例 1:

12 18 18 8

输出样例 1:

18-Y 8-Y
qing 1 zhao gu hao 2

输入样例 2:

12 18 10 15

输出样例 2:

10-N 15-Y
2: huan ying ru guan

要求:

解析:

思路:

本题直接根据题目逐条判断就可以了。

代码:
#include<iostream>
using namespace std;
int jin, pei, age1, age2;
//0   不可以   1    可以
int cnt1_jin = 0, cnt2_jin = 0;
int cnt1_pei = 0, cnt2_pei = 0;
int main()
{cin >> jin >> pei >> age1 >> age2;//记录是否可以进入图书馆if (age1 >= jin) cnt1_jin = 1;if (age2 >= jin) cnt2_jin = 1;//记录是否可以陪伴别人进入图书馆if (age1 >= pei) cnt1_pei = 1;if (age2 >= pei) cnt2_pei = 1;//在一行中输出对两位询问者的回答(有大人陪伴也算可以进入)if ((cnt1_jin == 1) || (cnt1_jin == 0 && cnt2_pei == 1)) cout << age1 << "-Y ";else cout << age1 << "-N ";if ((cnt2_jin == 1) || (cnt2_jin == 0 && cnt1_pei == 1)) cout << age2 << "-Y" << endl;else cout << age2 << "-N" << endl;//如果两个人必须一起进,则输出 qing X zhao gu hao Y,其中 X 是陪同人的编号, Y 是小孩子的编号;if (cnt1_jin == 1 && cnt1_pei == 1 && cnt2_jin == 0) cout << "qing 1 zhao gu hao 2";if (cnt2_jin == 1 && cnt2_pei == 1 && cnt1_jin == 0) cout << "qing 2 zhao gu hao 1";//如果两个人都可以进但不是必须一起的,则输出 huan ying ru guan;if (cnt1_jin == 1 && cnt2_jin == 1) cout << "huan ying ru guan";//如果两个人都进不去,则输出 zhang da zai lai ba;if (cnt1_jin == 0 && cnt2_jin == 0) cout << "zhang da zai lai ba";//如果一个人能进一个不能,则输出 X: huan ying ru guan,其中 X 是可以入馆的那个人的编号。if (cnt1_jin == 1 && cnt1_pei == 0 && cnt2_jin == 0) cout << "1: huan ying ru guan";if (cnt2_jin == 1 && cnt2_pei == 0 && cnt1_jin == 0) cout << "2: huan ying ru guan";return 0;
}
结果:

总结:

本题的判断条件较多,建议画一个简易的流程提来理解题目。

题目:L1-4 拯救外星人

T.jpg

你的外星人朋友不认得地球上的加减乘除符号,但是会算阶乘 —— 正整数 N 的阶乘记为 “N!”,是从 1 到 N 的连乘积。所以当他不知道“5+7”等于多少时,如果你告诉他等于“12!”,他就写出了“479001600”这个答案。

本题就请你写程序模仿外星人的行为。

输入格式:

输入在一行中给出两个正整数 A 和 B。

输出格式:

在一行中输出 (A+B) 的阶乘。题目保证 (A+B) 的值小于 12。

输入样例:

3 6

输出样例:

362880

要求:

解析:

思路:

本题只需要两数相加,然后求阶乘即可。

代码:
#include<iostream>
using namespace std;
int main()
{int A, B;long int ans = 1;cin >> A >> B;for (int i = 2; i <= A + B; i++) {ans *= i;}cout << ans;return 0;
}
结果:

总结:

本题目数据较小,如果数据大的话,我认为需要利用高精度的思想来解题。

题目:L1-5 试试手气

sz.png

我们知道一个骰子有 6 个面,分别刻了 1 到 6 个点。下面给你 6 个骰子的初始状态,即它们朝上一面的点数,让你一把抓起摇出另一套结果。假设你摇骰子的手段特别精妙,每次摇出的结果都满足以下两个条件:

  • 1、每个骰子摇出的点数都跟它之前任何一次出现的点数不同;
  • 2、在满足条件 1 的前提下,每次都能让每个骰子得到可能得到的最大点数。

那么你应该可以预知自己第 n 次(1≤n≤5)摇出的结果。

输入格式:

输入第一行给出 6 个骰子的初始点数,即 [1,6] 之间的整数,数字间以空格分隔;第二行给出摇的次数 n(1≤n≤5)。

输出格式:

在一行中顺序列出第 n 次摇出的每个骰子的点数。数字间必须以 1 个空格分隔,行首位不得有多余空格。

输入样例:

3 6 5 4 1 4
3

输出样例:

4 3 3 3 4 3

样例解释:

这 3 次摇出的结果依次为:

6 5 6 6 6 6
5 4 4 5 5 5
4 3 3 3 4 3

要求:

解析:

思路:

条件1:每个骰子摇出的点数都跟它之前任何一次出现的点数不同;

条件2:在满足条件 1 的前提下,每次都能让每个骰子得到可能得到的最大点数。

条件1启示我们要标记各个骰子的出现值,条件2启示我们要在其中选出最大的值。

我们可以实时更新max的值,也可以将未出现的值放入set当中,去最后一个值。

代码:
max版:
#include<iostream>
#include<set>
using namespace std;
int cnt[7][7], map[7][7];
//第一个记录每次骰子的对应值,第二个记录第几个骰子所记录过的值
//从1开始
int N;
int search(int ci, int num) {int max;for (int i = 1; i <= 6; i++) {if (map[num][i] == 0) max = i;}return max;
}
int main()
{//记录初始状态for (int i = 1; i <= 6; i++) cin >> cnt[0][i];for (int i = 1; i <= 6; i++) map[i][cnt[0][i]] = 1;cin >> N;for (int i = 1; i <= N; i++) {for (int j = 1; j <= 6; j++) {cnt[i][j] = search(i, j);map[j][cnt[i][j]] = 1;}}for (int i = 1; i < 6; i++) cout << cnt[N][i] << " ";cout << cnt[N][6];return 0;
}
set版:
#include<iostream>
#include<set>
using namespace std;
int cnt[7][7], map[7][7];
//第一个记录每次骰子的对应值,第二个记录第几个骰子所记录过的值
//从1开始
int N;
int search(int ci, int num) {set<int> q;for (int i = 1; i <= 6; i++) {if (map[num][i] == 0) q.insert(i);}return *q.rbegin();
}
int main()
{//记录初始状态for (int i = 1; i <= 6; i++) cin >> cnt[0][i];for (int i = 1; i <= 6; i++) map[i][cnt[0][i]] = 1;cin >> N;for (int i = 1; i <= N; i++) {for (int j = 1; j <= 6; j++) {cnt[i][j] = search(i, j);map[j][cnt[i][j]] = 1;}}for (int i = 1; i < 6; i++) cout << cnt[N][i] << " ";cout << cnt[N][6];return 0;
}
结果:

总结:

set函数的好处在于其可以自动排序。

题目:L1-6 斯德哥尔摩火车上的题

tt.png

上图是新浪微博上的一则趣闻,是瑞典斯德哥尔摩火车上的一道题,看上去是段伪代码:

s = ''
a = '1112031584'
for (i = 1; i < length(a); i++) {if (a[i] % 2 == a[i-1] % 2) {s += max(a[i], a[i-1])}
}
goto_url('www.multisoft.se/' + s)

其中字符串的 + 操作是连接两个字符串的意思。所以这道题其实是让大家访问网站 www.multisoft.se/112358注意:比赛中千万不要访问这个网址!!!)。

当然,能通过上述算法得到 112358 的原始字符串 a 是不唯一的。本题就请你判断,两个给定的原始字符串,能否通过上述算法得到相同的输出?

输入格式:

输入为两行仅由数字组成的非空字符串,长度均不超过 104,以回车结束。

输出格式:

对两个字符串分别采用上述斯德哥尔摩火车上的算法进行处理。如果两个结果是一样的,则在一行中输出那个结果;否则分别输出各自对应的处理结果,每个占一行。题目保证输出结果不为空。

输入样例 1:

1112031584
011102315849

输出样例 1:

112358

输入样例 2:

111203158412334
12341112031584

输出样例 2:

1123583
112358

要求:

解析:

思路:

本题只要按照纸条上的敲入代码,分别存入两个string字符中,在经过条件判断输出即可。

代码:
#include<iostream>
#include<set>
using namespace std;
int cnt[7][7], map[7][7];
//第一个记录每次骰子的对应值,第二个记录第几个骰子所记录过的值
//从1开始
int N;
int search(int ci, int num) {int max;for (int i = 1; i <= 6; i++) {if (map[num][i] == 0) max = i;}return max;
}
int main()
{//记录初始状态for (int i = 1; i <= 6; i++) cin >> cnt[0][i];for (int i = 1; i <= 6; i++) map[i][cnt[0][i]] = 1;cin >> N;for (int i = 1; i <= N; i++) {for (int j = 1; j <= 6; j++) {cnt[i][j] = search(i, j);map[j][cnt[i][j]] = 1;}}for (int i = 1; i < 6; i++) cout << cnt[N][i] << " ";cout << cnt[N][6];return 0;
}
结果:

总结:

本题似乎很简单,甚至答案直接写在了题目的图片当中了,但由于我对字符串的理解人不到位,导致自己浪费了很多时间。

题目:L1-7 机工士姆斯塔迪奥

在 MMORPG《最终幻想14》的副本“乐欲之所瓯博讷修道院”里,BOSS 机工士姆斯塔迪奥将会接受玩家的挑战。

你需要处理这个副本其中的一个机制:N×M 大小的地图被拆分为了 N×M 个 1×1 的格子,BOSS 会选择若干行或/及若干列释放技能,玩家不能站在释放技能的方格上,否则就会被击中而失败。

给定 BOSS 所有释放技能的行或列信息,请你计算出最后有多少个格子是安全的。

输入格式:

输入第一行是三个整数 N,M,Q (1≤N×M≤105,0≤Q≤1000),表示地图为 N 行 M 列大小以及选择的行/列数量。

接下来 Q 行,每行两个数 Ti​,Ci​,其中 Ti​=0 表示 BOSS 选择的是一整行,Ti​=1 表示选择的是一整列,Ci​ 为选择的行号/列号。行和列的编号均从 1 开始。

输出格式:

输出一个数,表示安全格子的数量。

输入样例:

5 5 3
0 2
0 4
1 3

输出样例:

12

要求:

解析:

思路:

本题只要分别讨论行和列即可。

代码:
#include<iostream>
using namespace std;
const int MAX = 1e6 + 1;
int h[MAX], l[MAX];
int main()
{int N, M, Q;long long ans = 0;cin >> N >> M >> Q;while (Q--) {int T, C;cin >> T >> C;if (T == 0) h[C] = 1;else l[C] = 1;}for (int i = 1; i <= M; i++) {if (l[i] == 0)for (int j = 1; j <= N; j++)if (h[j] == 0) ans++;}cout << ans;return 0;
}
结果:

总结:

本体一开始想得过于简单了,没注意到数据量,导致直接使用二维数组去统计,出现了数组溢出的现象。当出现此现象时,可以通过将二维数组拆分为两个一维数组即可。

题目:L1-8 静静的推荐

天梯赛结束后,某企业的人力资源部希望组委会能推荐一批优秀的学生,这个整理推荐名单的任务就由静静姐负责。企业接受推荐的流程是这样的:

  • 只考虑得分不低于 175 分的学生;
  • 一共接受 K 批次的推荐名单;
  • 同一批推荐名单上的学生的成绩原则上应严格递增;
  • 如果有的学生天梯赛成绩虽然与前一个人相同,但其参加过 PAT 考试,且成绩达到了该企业的面试分数线,则也可以接受。

给定全体参赛学生的成绩和他们的 PAT 考试成绩,请你帮静静姐算一算,她最多能向企业推荐多少学生?

输入格式:

输入第一行给出 3 个正整数:N(≤105)为参赛学生人数,K(≤5×103)为企业接受的推荐批次,S(≤100)为该企业的 PAT 面试分数线。

随后 N 行,每行给出两个分数,依次为一位学生的天梯赛分数(最高分 290)和 PAT 分数(最高分 100)。

输出格式:

在一行中输出静静姐最多能向企业推荐的学生人数。

输入样例:

10 2 90
203 0
169 91
175 88
175 0
175 90
189 0
189 0
189 95
189 89
256 100

输出样例:

8

样例解释:

第一批可以选择 175、189、203、256 这四个分数的学生各一名,此外 175 分 PAT 分数达到 90 分的学生和 189 分 PAT 分数达到 95 分的学生可以额外进入名单。第二批就只剩下 175、189 两个分数的学生各一名可以进入名单了。最终一共 8 人进入推荐名单。

要求:

解析:

思路:

本题要求的批次可以直接边记录边进行答案的解析操作,当录入一个数据时候,首先判断其天梯的分数是否达标,如果达标则继续进行筛选,反之则直接淘汰。在帅选的过程中,如果这个人通过PAT则可以直接被录用,无需与他人竞争,所以我们不需要记录这个人,反之则需要与他人参与竞争,参与竞争的人与企业录取人的批次有关,所以我们用map数组来记录这些同一级别的人数,并判断是否在批次内。

代码:
#include<iostream>
using namespace std;
const int MAX = 1e5 + 5;
int map[300];
int cnt[MAX][2];
int main()
{int N, K, S,ans=0;cin >> N >> K >> S;for (int i = 0; i < N; i++) {cin >> cnt[i][0]>>cnt[i][1];if (cnt[i][0] >= 175) {if (cnt[i][1] >= S) ans++;else {if (map[cnt[i][0]] < K) {ans++;map[cnt[i][0]]++;}}}}cout << ans;return 0;
}
结果:

总结:

本题虽然很简单,但是我耗时很长,原因在于对于题目的理解不到位,没有注意到通过PAT考试的可以直接通过,无需与其他人竞争。

网上某大佬的解析确实讲得很到位:点此处进行查阅icon-default.png?t=N7T8http://t.csdnimg.cn/uXqSj

这篇关于2022年团体程序设计天梯赛-总决赛——L1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/887235

相关文章

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符

智能工厂程序设计 之1 智能工厂都本俱的方面(Facet,Aspect和Respect)即智能依赖的基底Substrate 之1

Q1、昨天分别给出了三个智能工厂的 “面face”(里面inter-face,外面outer-face和表面surface) 以及每个“面face” 各自使用的“方”(StringProcessor,CaseFilter和ModeAdapter)  。今天我们将继续说说三个智能工厂的“方面” 。在展开之前先看一下三个单词:面向facing,取向oriented,朝向toword。理解这三个词 和

C语言程序设计 笔记代码梳理 重制版

前言 本篇以笔记为主的C语言详解,全篇一共十章内容,会持续更新基础内容,争取做到更详细。多一句没有,少一句不行!  形而上学者谓之道,形而下学者谓之器 形而上学者谓之道,形而下学者谓之器 第1章 C语言的流程 1.C程序经历的六个阶段 编辑(Edit)预处理(Preprocess)编译(Compile)汇编(Assemble)链接(Link)执行(Execute)  2.

ACM东北地区程序设计大赛

不得不说随着参赛级别的提高,题目真的是越来越难啊,不过队长真是给力啊,在我们三个共同努力之下拿下了地区赛三等奖,哈哈我们可是大一唯一一只获奖队,终于在这次比赛打败了田大神。。。大神是失手了,俺和他差距还是挺大的。。。队友陈彤马上要去服兵役了,他说这是我们送给他最好的离别礼物,希望那家伙在部队好好干,以后谁干揍我!!!东北地区赛结束后,今年已经估计没机会参加亚洲区比赛了,赶紧补高数和线数啊!!别挂了

上海大学《2022年836+915自动控制原理真题及答案》 (完整版)

Part1:2022年上海大学真题题目 学硕836 专硕915 Part2:2022年上海大学真题答案 学硕836 专硕915

pta-2024年秋面向对象程序设计实验一-java

文章申明:作者也为初学者,解答仅供参考,不一定是最优解; 一:7-1 sdut-sel-2 汽车超速罚款(选择结构) 答案: import java.util.Scanner;         public class Main { public static void main(String[] arg){         Scanner sc=new Scanner(System

【机器学习 sklearn】模型正则化L1-Lasso,L2-Ridge

#coding:utf-8from __future__ import divisionimport sysreload(sys)sys.setdefaultencoding('utf-8')import timestart_time = time.time()import pandas as pd# 输入训练样本的特征以及目标值,分别存储在变量X_train与y_train之中。

C语言程序设计(算法的概念及其表示)

一、算法的概念 一个程序应包括两个方面的内容: 对数据的描述:数据结构 对操作的描述:算法 著名计算机科学家沃思提出一个公式: 数据结构 +算法 =程序 完整的程序设计应该是: 数据结构+算法+程序设计方法+语言工具 广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。 对同一个问题,可有不同的解题方法和步骤。为了有效地进行解题,不仅需要保证算法正确,还要考虑算

【算法 2022】高效有用的机器学习算法和 Python 库

2022年已经到来,在此祝大家虎年大吉!2022年,下面几种机器学习算法和 Python 库将在未来更受欢迎!让我们花个几分钟一起来了解下: 一、CatBoost CatBoost 可能是最新的算法,因为它随着越来越流行而不断更新。这个机器学习算法对于处理分类数据的数据科学家特别有用。您可以考虑 Random Forest 和 XGBoost 算法的优点,CatBoost 具有它们的大部分优点