2023团队程序设计天梯赛选拔赛

article/2025/5/23 3:18:26

1.Ltree的数据结构

T322022 Ltree的数据结构 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

 

主次关键字的排序

用结构体

比赛过程中,其它都很顺利,问题出在了名次上,一直找不到错误点,满分25分,只对了一个测试点,拿了两分,其它都是RE

比赛代码(错误):

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
typedef long long LL;
const int N=10010;
LL n,m,k;
struct Stu{string s;int x;bool operator<(const Stu &W)const{if(x!=W.x) return x>W.x;return s<W.s;}
}q[N];
int idx[N];
LL sum;
int p;
int main()
{cin>>n>>m>>k;for(int i=0;i<n;i++){cin>>q[i].s>>q[i].x;if(q[i].x>=60&&q[i].x<m) sum+=20;if(q[i].x>=m&&q[i].x<=100) sum+=50;}sort(q,q+n);idx[0]=1;LL cnt=1;for(int i=1;;i++){cnt++;if(q[i].x==q[i-1].x){idx[i]=idx[i-1];}else{idx[i]=cnt;}if(idx[i]==k){p=i;break;}}LL cnt2=0;for(int i=p+1;;i++){if(q[i].x==q[p].x){idx[i]=k;}else break;cnt2++;}printf("%lld\n",sum);for(int i=0;i<=p+cnt2;i++){cout<<idx[i]<<" "<<q[i].s<<" "<<q[i].x<<endl;}return 0;
}

当时想的是用idx[i]记录i的名次,然后先一直算到名次为k的i,后面再加上分数与名次为k的相同的

问题一:尽量不要在循环的括号里写;;,尽量有个范围,虽然后面满足某条件时可以break,但是如果没有考虑周全,漏掉了某些情况,那么就会死循环

问题二:idx不一定能等于k,如找名次前二的,90 90 80 名次为1 1 3,就没有名次二

总之漏洞很多

赛后进行一个修改:算名次的那个循环就专门算名次,把n个数的名次都算出来,不做其它事情

另外一个循环,就算名次小于等于k的有几个

这样,分工明确,思路清晰

一个循环只做一件事情,不容易出错

AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
typedef long long LL;
const int N=10010;
LL n,m,k;
struct Stu{string s;int x;bool operator<(const Stu &W)const{if(x!=W.x) return x>W.x;return s<W.s;}
}q[N];
int idx[N];
LL sum;
int p;
int main()
{cin>>n>>m>>k;for(int i=0;i<n;i++){cin>>q[i].s>>q[i].x;if(q[i].x>=60&&q[i].x<m) sum+=20;if(q[i].x>=m&&q[i].x<=100) sum+=50;}sort(q,q+n);idx[0]=1;LL cnt=1;for(int i=1;i<n;i++){cnt++;if(q[i].x==q[i-1].x) idx[i]=idx[i-1];else idx[i]=cnt;}int p=0;for(int i=0;i<n;i++){p++;if(idx[i]>k&&idx[i-1]<=k){break;}}printf("%lld\n",sum);for(int i=0;i<p-1;i++){cout<<idx[i]<<" "<<q[i].s<<" "<<q[i].x<<endl;}return 0;
}

2.乘法口诀 

T322026 乘法口诀 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 

 比赛代码(20分拿了14分)

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int N=1010;
int a[N];
int n;
int main()
{int cnt=2;cin>>a[1]>>a[2];cin>>n;int cnt3=cnt;
//    printf("%d %d %d\n",a[1],a[2],a[3]);while(cnt3<=n){int x=a[cnt]*a[cnt-1];
//        printf("%d\n",x);int cnt1=0;int t=x;while(t){t/=10;cnt1++;}
//        printf("%d\n",cnt1);int cnt2=cnt1;
//        printf("%d ",cnt2);while(x){int y=x%10;a[cnt3+cnt2]=y;
//            printf("%d %d \n",cnt+cnt2,y);cnt2--;x/=10;}cnt3=cnt3+cnt1;cnt++;}
//    printf("%d %d %d\n",a[1],a[2],a[3]);for(int i=1;i<=n;i++) printf("%d ",a[i]);return 0;
}

加了很多注释是因为当时有点小错误,找不到,就输出数来检验,另外,用纸笔模拟全过程也不失为一种检验的好方法

问题一:题目中数列最后两个数相乘得到一个新数,最后两个指的是

1 2,2 3,3 4,4 5,以此类推,根据样例才搞懂题意

问题二:每一位都成为数列的一项,那么数列的每一项只能是0到9,所以相乘最多是两位数,也就是说只要讨论两种情况,相乘是一位数或者两位数,比赛中我用while计算有多少位,使得题目更复杂了

AC代码: 

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int N=1010;
int a[N];
int n;
int main()
{int cnt=2;cin>>a[1]>>a[2];cin>>n;int cnt1=cnt;while(cnt1<=n){int x=a[cnt]*a[cnt-1];if(x<10){a[++cnt1]=x;}else{int y=x%10;x/=10;a[++cnt1]=x;a[++cnt1]=y;}cnt++;}for(int i=1;i<=n;i++) printf("%d ",a[i]);return 0;
}

3.双人成行中的小游戏 

T322070 双人成行中的小游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 

记录每一行每一列的反转次数,遍历所有灯泡,该灯泡所在行列反转次数之和为奇数则亮

题目中H*W<=5*1e6,这样的话不知道行列具体数,可能行5*1e6,列为1,也可能行为1,列为5*1e6,这样定义二维数组都不好定义,要么用动态数组

但是反转的话,转过去又转回来,往返,那么就与奇数次偶数次有关了

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long LL;
const int N=5e6+10;
int a[N],b[N];//a[i]记录i行反转的次数,b[j]记录j列反转的次数
int main()
{int h,w,k;cin>>h>>w>>k;while(k--){int n,m;cin>>n>>m;if(n==1){a[m]++;}else b[m]++;}LL res=0;for(int i=1;i<=h;i++){for(int j=1;j<=w;j++){if((a[i]+b[j])%2==1) res++;}}cout<<res<<endl;return 0;
}

4.顶级理解 

 

 

错误代码(25分拿了8分): 

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1010;
int a[N];
int sum;
int main()
{int u,v,n;cin>>u>>v>>n;int cnt=1;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++){sum+=a[i];if(sum-u>=0){cout<<"Yes "<<v<<endl;break;}if(sum/100==cnt&&i>=3){v-=(a[i]+a[i-1]+a[i-2]);cnt++;}if(sum/100==cnt&&i==2){v-=(a[2]+a[1]);cnt++;}if(v<=0){cout<<"gg "<<u-sum<<endl;break;}}if(v>0&&u-sum>0) cout<<"No "<<u-sum<<endl;return 0;
}

注意,boss会遗忘三次招式,也就意味这三次招式要出栈

AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<stack>
using namespace std;
const int N=1010;
int a[N];
int sum;
int main()
{int u,v,n;cin>>u>>v>>n;int cnt=1;stack<int>q;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++){q.push(a[i]);sum+=a[i];if(sum-u>=0){cout<<"Yes "<<v<<endl;break;}if(sum/100==cnt){if(q.size()){v-=q.top();q.pop();}if(q.size()){v-=q.top();q.pop();}if(q.size()){v-=q.top();q.pop();}cnt++;}if(v<=0){cout<<"gg "<<u-sum<<endl;break;}}if(v>0&&u-sum>0) cout<<"No "<<u-sum<<endl;return 0;
}

5.wyb爱旅行 

 

思路:初看题目,想到最短路,但是题目多加了一个条件,就是在途中要打一次codeforces,这样的话,原本路径最短的加上了一次网费,就不一定是最小的了

做法是用两次最短路,求从1到其它点的最短路以及从n到其它点的最短路。枚举每个城市,从1到该城市的最短距离加上该城市到n的最短距离,再加上该城市的网费,取最小的

错误代码(只对了一个样例):

#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
typedef pair<int,int>PII;
typedef long long LL;
const int N=100010,M=2*N;
int p[N];
int n,m;
int h[N],e[M],w[M],ne[M],idx;
int dist[N],d[N];
bool st[N],s[N];
void add(int a,int b,int c){e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}
void dijkstra(){
memset(dist,0x3f,sizeof dist);
dist[1]=0;
priority_queue<PII,vector<PII>,greater<PII>>heap;
heap.push({0,1});
while(heap.size()){
auto t=heap.top();
heap.pop();
int ver=t.second,distance=t.first;
if(st[ver]) continue;
st[ver]=true;
for(int i=h[ver];i!=-1;i=ne[i]){
int j=e[i];
if(dist[j]>distance+w[i]){
dist[j]=distance+w[i];
heap.push({dist[j],j});
}
}
}
}
void dijkstra1(){
memset(d,0x3f,sizeof d);
d[n]=0;
priority_queue<PII,vector<PII>,greater<PII>>q;
q.push({0,n});
while(q.size()){
auto t=q.top();
q.pop();
int ver=t.second,distance=t.first;
if(s[ver]) continue;
s[ver]=true;
for(int i=h[ver];i!=-1;i=ne[i]){
int j=e[i];
if(d[j]>distance+w[i]){
d[j]=distance+w[i];
q.push({d[j],j});
}
}
}
}
int main()
{cin>>n;memset(h,-1,sizeof h);for(int i=1;i<=n;i++) cin>>p[i];cin>>m;while(m--){int u,v,c;cin>>u>>v>>c;add(u,v,c);add(v,u,c);}dijkstra();dijkstra1();int min1=dist[1]+d[1]+p[1];for(int i=2;i<=n;i++){min1=min(min1,dist[i]+d[i]+p[i]);}cout<<min1<<endl;return 0;
}

错误原因是要建两个图,直接改无向边可能会有更短的路出现 

AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
typedef pair<int,int>PII;
typedef long long LL;
const int N=100010,M=2*N;
int p[N];
int n,m;
int h[N],e[M],w[M],ne[M],idx;
int h1[N],e1[M],w1[M],ne1[M],idx1;
int dist[N],d[N];
bool st[N],s[N];
void add(int a,int b,int c){
e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}
void add1(int a,int b,int c){
e1[idx1]=b,w1[idx1]=c,ne1[idx1]=h1[a],h1[a]=idx1++;
}
void dijkstra(){
memset(dist,0x3f,sizeof dist);
dist[1]=0;
priority_queue<PII,vector<PII>,greater<PII>>heap;
heap.push({0,1});
while(heap.size()){
auto t=heap.top();
heap.pop();
int ver=t.second,distance=t.first;
if(st[ver]) continue;
st[ver]=true;
for(int i=h[ver];i!=-1;i=ne[i]){
int j=e[i];
if(dist[j]>distance+w[i]){
dist[j]=distance+w[i];
heap.push({dist[j],j});
}
}
}
}
void dijkstra1(){
memset(d,0x3f,sizeof d);
d[n]=0;
priority_queue<PII,vector<PII>,greater<PII>>q;
q.push({0,n});
while(q.size()){
auto t=q.top();
q.pop();
int ver=t.second,distance=t.first;
if(s[ver]) continue;
s[ver]=true;
for(int i=h1[ver];i!=-1;i=ne1[i]){
int j=e1[i];
if(d[j]>distance+w1[i]){
d[j]=distance+w1[i];
q.push({d[j],j});
}
}
}
}
int main()
{
memset(h,-1,sizeof h);
memset(h1,-1,sizeof h1);
cin>>n;
for(int i=1;i<=n;i++) cin>>p[i];
cin>>m;
while(m--){
int u,v,c;
cin>>u>>v>>c;
add(u,v,c);
add1(v,u,c);
}
dijkstra();
dijkstra1();
int min1=dist[1]+d[1]+p[1];
for(int i=2;i<=n;i++){
min1=min(min1,dist[i]+d[i]+p[i]);
}
cout<<min1<<endl;
return 0;
}

 

 

 

 

 

 

 

 

 

 


http://chatgpt.dhexx.cn/article/W9i4CM5N.shtml

相关文章

GPLT团队程序设计天梯赛

List item CSDN话题挑战赛第1期 活动详情地址&#xff1a;https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f 参赛话题&#xff1a;大学生竞赛指南 话题描述&#xff1a;本话题聚焦于大学生竞赛心得体会分享&#xff0c;对于计算机众多领域每年都有很多都会举…

2021年中国高校计算机大赛团体程序设计天梯赛

2021年中国高校计算机大赛团体程序设计天梯赛 L1-1 人与神 (5 分)L1-2 两小时学完C语言 (5 分)L1-3 强迫症 (10 分)L1-4 降价提醒机器人 (10 分)L1-5 大笨钟的心情 (15 分)L1-6 吉老师的回归 (15 分)L1-7 天梯赛的善良 (20 分)L1-8 乘法口诀数列 (20 分)L2-1 包装机 (25 分)L2-…

团体程序设计天梯赛练习集题解整合

网上介绍 团体程序设计天梯赛练习集 的文章已经很多了&#xff0c; 我的这篇文章是对练习集题解的整合&#xff0c;方便每一位备战 团体程序设计天梯赛 的同学使用。 一年一度的 团体程序设计天梯赛 即将开始&#xff0c;PTA的练习集是必不可少的备赛必刷题单&#xff0c;这里为…

【2022团体程序设计天梯赛】赛后的一些个人碎碎念

仅是一些个人感想的碎碎念&#xff0c;没有对比赛的题目分析和看法。 终于是打完了2022年的天梯赛&#xff0c;个人成绩一般般&#xff0c;没有超常的发挥&#xff0c;也算不上失常&#xff0c;说得上是中规中矩吧。对我来说&#xff0c;天梯赛有着特殊的意义&#xff0c;心里自…

2022天梯赛正式赛(附天梯赛题目链接)

文章目录 L1-1 今天我要赢 (5 分)L1-2 种钻石 (5 分)L1-3 谁能进图书馆 (10 分)L1-4 拯救外星人 (10 分)L1-5 试试手气 (15 分)L1-6 斯德哥尔摩火车上的题 (15 分)L1-7 机工士姆斯塔迪奥 (20 分)L1-8 静静的推荐 (20 分)L2-1 插松枝 (25 分)(过不完&#xff0c;待补)L2-2 老板的…

PTA 程序设计天梯赛(121~140题)

文章目录 121、高速公路超速处罚 (15 分)122、抓老鼠啊~亏了还是赚了&#xff1f; (20 分)123、用天平找小球 (10 分)124、求符合给定条件的整数集 (15 分)125、用扑克牌计算24点 (25 分)126、近似求PI (15 分)127、两个数的简单计算器 (10 分)128、算术入门之加减乘除 (10 分)…

PTA 程序设计天梯赛(161~180题)

文章目录 161、单词长度 (15 分)162、表格输出 (5 分)163、装箱问题 (20 分)164、求交错序列前N项和 (15 分)165、求集合数据的均方差 (15 分)166、币值转换 (20 分)167、求矩阵的局部极大值 (15 分)168、查询水果价格 (15 分)169、混合类型数据格式化输入 (5 分)170、BCD解密 …

名帖129 成亲王 楷书《赵孟頫大士赞卷》

《中国书法名帖目录》 永瑆(1752-1823)&#xff0c;清乾隆皇帝十一子&#xff0c;封成亲王&#xff0c;清代书法家。永瑆作为皇族&#xff0c;其书法的成就也得益于眼界宽、收藏广。 清代成亲王《永瑆楷书赵孟頫大士赞卷》纸本。故宫博物院藏。 【释文】 秉般若。剑推黑暗尽…

名帖311 成亲王 行书《杜甫秋兴诗》

《中国书法名帖目录》 成亲王永瑆行书《杜甫秋兴诗》&#xff0c;此本墨迹藏钱抚棠少宰家&#xff0c;吴门翻刻。 【释文】秋兴 玉树凋伤枫树林&#xff0c;巫山巫峡气萧森。江间波浪兼天涌&#xff0c;塞上风云接地阴。 丛菊两开他日泪&#xff0c;孤舟一系故园心。寒衣处处…

名帖39 席夔 隶书《千字文》

《中国书法名帖目录》 【释文】 天地玄黄 宇宙洪荒 日月盈昃 辰宿列张 寒来暑往 秋收冬藏 闰余成岁 律吕调阳 云腾致雨 露结为霜 金生丽水 玉出昆冈 剑号巨阙 珠称夜光 果珍李柰 菜重芥姜 海咸河淡 鳞潜羽翔 龙师火帝 鸟官人皇 始制文字 乃服衣裳 推位让国 有虞陶唐 吊民…

春秋·左丘明-《左传·成公八年》

《左传》原名《左氏春秋》&#xff0c;到西汉班固时才改称《春秋左氏传》。相传为鲁国史官左丘明所著&#xff0c;大约成书于战国初期。全书六十卷&#xff0c;以《春秋》为纲&#xff0c;并仿照春秋体例&#xff0c;按照鲁国君主的次序&#xff0c;记载了自鲁隐公元年至鲁悼公…

天津巨富八大家——天成号韩家

韩家是靠海运发的家。 津的海运发展&#xff0c;可以追溯到元代。13世纪元朝统一中国后&#xff0c;把都城设在了北京。皇上在哪&#xff0c;资源就得往哪折腾&#xff0c;这道理在简单不过了&#xff0c;所以那时对南粮北运的需求开始增大。而隋唐时期开挖的大运河通济渠段已…

谢良辅

状江南仲春 唐代&#xff1a;谢良辅江南仲春天&#xff0c;细雨色如烟。丝为武昌柳&#xff0c;布作石门泉。 仲春&#xff1a;农历二月&#xff1b; 孟春&#xff1a;农历正月&#xff1b;暮春&#xff1a;农历三月&#xff1b; 暮春三月 状江南孟冬 唐代&#xff1a;谢良辅江…

有文事者,必有武备

28 iOS 图像渲染原理 https://www.jianshu.com/p/a81d48e0e44a 27 HTTP1.0、HTTP1.1 和 HTTP2.0 的区别 https://www.cnblogs.com/heluan/p/8620312.html https://www.jianshu.com/p/25b762d58e66 26 十大经典算法 http://www.runoob.com/w3cnote/ten-sorting-algorithm.h…

计算机网络八股文(2022最新整理)

网络分层结构 计算机网络体系大致分为三种&#xff0c;OSI七层模型、TCP/IP四层模型和五层模型。一般面试的时候考察比较多的是五层模型。 五层模型&#xff1a;应用层、传输层、网络层、数据链路层、物理层。 应用层&#xff1a;为应用程序提供交互服务。在互联网中的应用层…

名帖246 唐寅 行书《自书集贤宾等词卷》

《中国书法名帖目录》 唐寅书《自书“集贤宾”等词卷》&#xff0c;纸本&#xff0c;行书。北京故宫博物院藏 此为唐寅所作词并自书&#xff0c;分《集贤宾》、《锦衣公子》、《山坡羊》三组曲牌&#xff0c;共24首。 唐寅博学多能&#xff0c;吟诗作曲&#xff0c;能书善画。…

猿创征文|从mysql 到kingbase(人大金仓)

一、背景介绍 公司主要做toG 的项目&#xff0c;经常服务于各个地方政府。之前某省会城市下属区县项目&#xff0c;需要将已交付的项目中所使用到的各类中间件全部替换为国产&#xff0c;其中就包括了数据库的替换。项目中一直使用的是mysql数据库&#xff0c;后经商务调研及选…

如何评价唐卫国公李靖的战功、军事才能、政治才能?

link 一鞭直渡清河洛 Research and no development 已关注 470 人赞同了该回答 个人以为&#xff0c;在军事上&#xff0c;李靖是当之无愧的唐朝第一名将&#xff0c;他用兵如神&#xff0c;精于谋略&#xff0c;无论是在实际的军事指挥上&#xff0c;还是军事理论上&#xff0…

PHP汉字取拼音缩写

<?php class ChineseSpell { /** * var array $chineseSpellList 拼音编码对应表 * access private */ private $chineseSpellList array( a>-20319, ai>-20317, an>-20304, ang>-20295, ao>-20292, ba>-20283, bai>-20265, ban>-20257, bang>…

js获取汉字拼音首字母

使用pinyin-pro这个npm包 github: https://github.com/zh-lx/pinyin-pro 特色功能 支持汉字、词语、句子多种格式输入获取获取拼音获取声母获取韵母获取拼音首字母获取音调获取多音字的多种拼音支持字符串和数组两种输出形式 版本更新 当前版本&#xff1a; 3.0.7 -> 3.…