尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

PTA团体程序设计天梯赛L1真题讲解L1-085-088

PTA团体程序设计天梯赛L1真题讲解L1-085-088 官网https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7文章目录L1-085 试试手气L1-086 斯德哥尔摩火车上的题L1-087 机工士姆斯塔迪奥L1-088 静静的推荐L1-085 试试手气题目大意给定6个骰子的初始朝上点数每次摇骰子需满足两条规则每个骰子的点数不能和自身之前出现过的任何点数重复在满足第一条规则的前提下每个骰子都取当前可行的最大点数。求第k次摇出的6个骰子的点数结果。核心思路6个骰子的点数变化相互独立可逐个单独计算。对于单个骰子初始点数为第0次的状态后续每次都从剩余未出现的点数中选择最大值因此每个初始点数对应的后续序列是固定的排除初始点数后将1~6从大到小排列依次对应第1、2、3、4、5次的结果。例如初始点数为3时排除3后剩余点数降序为6、5、4、2、1对应第1次结果为6第2次为5第3次为4以此类推。正解代码#includeiostream#includevectorusingnamespacestd;intsz(intx,inty){inta1[]{1,6,5,4,3,2},a2[]{2,6,5,4,3,1},a3[]{3,6,5,4,2,1},a6[]{6,5,4,3,2,1},a5[]{5,6,4,3,2,1},a4[]{4,6,5,3,2,1};if(xa1[0])returna1[y];elseif(xa2[0])returna2[y];elseif(xa3[0])returna3[y];elseif(xa4[0])returna4[y];elseif(xa5[0])returna5[y];elseif(xa6[0])returna6[y];}intmain(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);vectorintb(6);for(inti0;i6;i)cinb[i];inty;ciny;for(inti0;i6;i){if(i!5)coutsz(b[i],y) ;elsecoutsz(b[i],y);}return0;}代码实现要点预处理6种初始点数对应的结果数组数组下标对应摇的次数通过查表直接获取结果。输入6个初始点数和次数k遍历每个骰子查表按格式输出结果。L1-086 斯德哥尔摩火车上的题题目大意给定两个数字字符串按照指定算法处理字符串从第二个字符开始遍历若当前字符与前一个字符的奇偶性相同则将两个字符中较大的字符拼接到结果字符串末尾。比较两个字符串的处理结果相同则输出该结果不同则分别输出两个结果。核心思路封装独立的字符串处理函数输入原始数字字符串按规则生成结果字符串再将两个输入字符串分别处理后对比输出即可。由于数字字符的ASCII码奇偶性与对应数字的奇偶性一致数字d的ASCII值为48d48为偶数因此奇偶性与d相同可直接对字符做取模运算判断奇偶同时字符的ASCII大小顺序与数字大小顺序一致直接使用max比较字符即可。正解代码#includebits/stdc.husingnamespacestd;stringres(string s){string ans;for(inti1;is.size();i){if(s[i]%2s[i-1]%2){ansmax(s[i],s[i-1]);}}returnans;}intmain(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);string s1,s2;cins1s2;if(res(s1)res(s2))coutres(s1);elsecoutres(s1)endlres(s2);return0;}代码实现要点封装处理函数提升代码复用性函数内从下标1开始遍历字符串。逐位判断相邻两个字符的奇偶性符合条件则拼接较大字符。对比两个处理结果按题目要求格式输出。L1-087 机工士姆斯塔迪奥题目大意给定n行m列的网格共q次操作每次操作标记一整行或一整列为危险区域。求最终安全格子的总数安全格子指所在行和所在列均未被标记的格子。核心思路安全格子的数量计算公式为未被标记的行数 × 未被标记的列数。重复标记同一行/列不会产生额外效果因此需要统计去重后的被标记行数与列数。未被标记行数 总行数n - 不同的被标记行数未被标记列数 总列数m - 不同的被标记列数二者相乘即为最终答案。例如样例中5行5列共标记2个不同行、1个不同列安全格子数为(5-2) × (5-1) 12。正解代码#includebits/stdc.husingnamespacestd;constintN1e59;boola[2][N];intmain(){intn,m,q;cinnmq;while(q--){intl,r;cinlr;if(l0!a[0][r]){a[0][r]1;n--;}if(l1!a[1][r]){a[1][r]1;m--;}}coutn*m;return0;}代码实现要点使用两个布尔数组分别记录行、列的标记状态避免重复计数。遍历所有操作遇到未标记的行/列则打上标记并将对应剩余行数/列数减1。最终输出剩余行数与剩余列数的乘积。L1-088 静静的推荐题目大意从参赛学生中选拔推荐名单规则如下仅考虑天梯赛分数不低于175分的学生共可推荐k批次同一批次内学生成绩原则上严格递增若学生天梯赛成绩与同批前一人相同但PAT成绩达到企业面试分数线则也可加入该批次。求最多可推荐的学生总人数。核心思路为最大化推荐人数采用最优分配策略PAT达标学生所有天梯赛≥175且PAT达标的学生均可被推荐。同分的PAT达标学生不受严格递增限制可全部放入对应批次不占用普通学生的批次名额。普通学生PAT未达标每个分数的普通学生最多每批次推荐1人共k批次因此每个分数最多推荐min(该分数普通学生人数, k)人。总推荐人数 天梯赛≥175且PAT达标的人数 每个分数普通学生人数取min(人数, k)的总和。正解代码#includebits/stdc.husingnamespacestd;intmain(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);intn,k,s,cnt0,ans0;cinnks;mapint,intmp;for(inti0;in;i){intx,y;cinxy;if(x175){if(y90)cnt;elsemp[x];}}anscnt;for(autoi:mp)ansmin(i.second,k);coutans;return0;}代码实现要点遍历所有学生筛选出天梯赛分数≥175的学生。若学生PAT成绩达到输入的分数线s直接计入达标总数否则用map或数组统计每个分数的普通学生人数。遍历所有分数的普通学生人数累加min(人数, k)再加上达标总数得到最终答案。
返回列表