【2023团体程序设计天梯赛CCCC】GPLT2023,L1~L2部分(PTA,L1-089~L1-096,L2-045~L2-048)题解代码&复盘

这篇具有很好参考价值的文章主要介绍了【2023团体程序设计天梯赛CCCC】GPLT2023,L1~L2部分(PTA,L1-089~L1-096,L2-045~L2-048)题解代码&复盘。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概要

L1部分:L1-089~L1-096
L2部分:L2-045~L2-048
L3部分:L3-033~L3-036

L1-089 最好的文档 5
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"Good code is its own best documentation.\n";
	return 0;
}

L1-090 什么是机器学习 5
#include<bits/stdc++.h>
using namespace std;
int main(){
	int a, b;  cin>>a>>b;
	int c = a+b;
	cout<<c-16<<"\n"<<c-3<<"\n"<<c-1<<"\n"<<c<<"\n";
	return 0;
}
L1-091 程序员买包子 10
#include<bits/stdc++.h>
using namespace std;
int main(){
	int n, m, k;  string x; 
	cin>>n>>x>>m>>k;
	if(k==n){
		cout<<"mei you mai "<<x<<" de\n";
	}else if(k==m){
		cout<<"kan dao le mai "<<x<<" de\n";
	}else{
		cout<<"wang le zhao mai "<<x<<" de"<<"\n";
	}
	return 0;
}

L1-092 进化论 10
#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;  cin>>n;
	for(int i = 1; i <= n; i++){
		int a, b, c;  cin>>a>>b>>c;
		if(c==a*b){
			cout<<"Lv Yan\n";
		}else if(c==a+b){
			cout<<"Tu Dou\n";
		}else{
			cout<<"zhe du shi sha ya!\n";
		}
	}
	return 0;
}

L1-093 猜帽子游戏 15
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1010;
int a[maxn];
int main(){
	int n;  cin>>n;
	for(int i = 1; i <= n; i++){
		cin>>a[i];
	}
	int k;  cin>>k;
	while(k--){
		int ok = 0, ok2 = 1;
		for(int i = 1; i <= n; i++){
			int x;  cin>>x;
			if(x==0)continue;
			else if(x==a[i]){
				ok = 1;
			}else{
				ok2 = 0;
			}
		}
		if(ok2==1 && ok==1){
			cout<<"Da Jiang!!!\n";
		}else{
			cout<<"Ai Ya\n";
		}
	}
	return 0;
}

L1-094 剪切粘贴 15
#include<bits/stdc++.h>
using namespace std;
int main(){
	string s;  cin>>s;
	int T;  cin>>T;
	while(T--){
		int x, y;  string a, b;  cin>>x>>y>>a>>b;
		string t = s.substr(x-1, y-x+1);
		s.erase(x-1,y-x+1);
		int cur = 0;
		int ok = 1;
		while(s.find(a,cur) != s.npos && cur < s.size()){
			int p = s.find(a,cur);
			string tt = s.substr(p+a.size(),b.size());
			if(tt == b){
				s.insert(p+a.size(),t);
				ok = 0;
				break;
			}else{
				cur++;
			}
		}
		if(s.find(a, cur) == s.npos && ok == 1){
			s.insert(s.size(), t);
		}
	}
	cout<<s<<"\n";
	return 0;
}
L1-095 分寝室 20
#include<bits/stdc++.h>
using namespace std;
int main(){
	int x, y, n;  cin>>x>>y>>n;
	int xx = -1, yy = -1, rs = 1e5+10;
	int zx = 0, zy = 0;
	for(int i = 1; i < n; i++){
		int j = n-i;
		if(x%i!=0 || y%j!=0)continue;
		int xi = x/i, yj = y/j;
		if(xi==1 || yj==1)continue;
		if(abs(xi-yj) < rs){
			xx = xi;
			yy = yj;
			zx = i;
			zy = j;
			rs = abs(xi-yj);
		}
	}
	if(xx!=-1)cout<<zx<<" "<<zy<<"\n";
	else cout<<"No Solution\n";
	return 0;
}

L1-096 谁管谁叫爹 20
#include<bits/stdc++.h>
using namespace std;
int get(int x){
	int res = 0;
	while(x){
		res += x%10;
		x /= 10;
	}
	return res;
}
int main(){
	int n;  cin>>n;
	while(n--){
		int na, nb;  cin>>na>>nb;
		int sa = get(na), sb = get(nb);
		if(na%sb==0&&nb%sa==0){
			if(na > nb){
				cout<<"A\n";
			}else{
				cout<<"B\n";
			}
		}
		else if(na%sb==0)cout<<"A\n";
		else if(nb%sa==0)cout<<"B\n";
		else if(na > nb){
			cout<<"A\n";
		}else{
			cout<<"B\n";
		}
	}
	return 0;
}

L2-045 堆宝塔 25
//思路:
//看到堆盘子想到水杯/栈 /(汉诺塔/递归,并没有)之类的东西,按题意无脑模拟即可
#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;  cin>>n;
	stack<int>a, b;
	int cnt = 0, mx = 0;
	while(n--){
		int x;  cin>>x;
		if(a.empty() || x<a.top()){
			a.push(x);
		}else{
			if(b.empty() || x>b.top()){
				b.push(x);
			}else{
				mx = max(mx, (int)a.size());
				while(!a.empty())a.pop();
				cnt++;
				while(!b.empty() && b.top()>x){
					a.push(b.top());
					b.pop();
				}
				a.push(x);
			}
		}
	}
	if(a.size()!= 0)cnt++;
	if(b.size()!= 0)cnt++;
	mx = max(mx, (int)a.size());
	cout<<cnt<<" "<<mx<<"\n";
	return 0;
}

L2-046 天梯赛的赛场安排
//思路:
//按题意模拟即可,注意细节点比较多,每一轮对当前未安排的人数最多的学校进行处理,只处理一个考场,然后剩余人数是要放回去的。
//最开始的找人数最多可以重载优先队列,找编号最小的和新开考场其实注意到数组范围不大,其实可以开个数组for。
//好久没写代码了,一下子没想到开数组,也忘记怎么打重载了,所以就乱搞了一波,强行暴力多for了一下。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 5050;
string sc[maxn];
int num[maxn], rs[maxn];
int main(){
	int n, c;  cin>>n>>c;
	priority_queue<pair<int,int>>q2;
	for(int i = 1; i <= n; i++){
		cin>>sc[i]>>num[i];
		q2.push({num[i], i});
	}
	int cnt = 0;
	int tot = 0;
	priority_queue<pair<int,int>>q;
	int xxx = 0;
	while(q2.size()){
		int nm = q2.top().first;
		int id = q2.top().second;  q2.pop();
		if(nm > c){
			rs[id]++;
			cnt++;
			nm -= c;
			q2.push({nm,id});
			continue;
		}
		if(nm != 0){
			if(!q.empty() && q.top().first >= nm){
				vector<pair<int,int>>vc;
				while(!q.empty() && q.top().first >= nm){
					vc.push_back(q.top()); q.pop();
				}
				int t = vc.back().first; 
				int id2 = vc.back().second;
				t -= nm;
				rs[id]++;
				if(t != 0)q.push({t, id});
				for(int i = 0; i < vc.size()-1; i++){
					q.push(vc[i]);
				}
			}else{
				q.push({c-nm, ++tot});
				rs[id]++;
				cnt++;
			}
		}
    }
	for(int i = 1; i <= n; i++){
		cout<<sc[i]<<" "<<rs[i]<<"\n";
	}
	cout<<cnt<<"\n";
	return 0;
}


L2-047 锦标赛 25

【2023团体程序设计天梯赛CCCC】GPLT2023,L1~L2部分(PTA,L1-089~L1-096,L2-045~L2-048)题解代码&复盘

//题意:2^k个人两两比赛,最后剩1个。给出第i轮第j场的失败者,求最开始的所有人顺序。
//思路:完美二叉树,底层一半的值确定了,然后往上走一层,如果当前值比前一层对应位置的某个值大,那么就可以加入答案中,否则加无解了。
//数组维护上一层每个节点在答案中的位置(尚未被填入值的),然后从底往上走依次把值填进去即可。
#include<bits/stdc++.h>
using namespace std;
#define lch (j<<1)
#define rch (j<<1|1)

const int maxv = 50, maxn = (1<<20);
int a[maxv][maxn], o[maxv][maxn]; //第i层第j个的能力,以及兄弟节点在答案中的位置
int res[maxn];

int main(){
    int k;  cin>>k;
    int ok = 1;
    for(int i = 1; i <= k; i++){
        int n = 1<<(k-i);
        for(int j = 0; j < n; j++){  //枚举每一层
            cin>>a[i][j];
            if(i==1){
                res[lch] = a[i][j];  o[i][j] = rch;
                continue;
            }
            int mx = max(a[i][j], max(a[i-1][lch], a[i-1][rch]));
            if(a[i][j] < a[i-1][lch] && a[i][j] < a[i-1][rch]){
                ok = 0;
                break;
            }else if(a[i][j] >= a[i-1][lch]){ //如果当前是胜者, 就放到另一个位置
                res[o[i-1][lch]] = a[i][j];
                o[i][j] = o[i-1][rch]; 
            }else{
                res[o[i-1][rch]] = a[i][j];
                o[i][j] = o[i-1][lch];
            }  
            a[i][j] = mx;  //记录子树最大值
        }
    }
    int w;   cin>>w;
    if(a[k][0] <= w) res[o[k][0]] = w; else ok = 0;
    if(ok==0){ cout<<"No Solution\n"; return 0; }
    for(int i = 0; i < (1<<k); i++){
        cout<<res[i]<<" \n"[i==(1<<k)];
    }
    return 0;
}

L2-048 寻宝图 25
//题意:Floodfill 例题,找联通块。
//岛屿的个数:dfs找有多少个联通块即可,注意1e5x1e5开不下bool/int数组和判重,可以用变长string,然后走过一个点就直接改掉
//宝藏岛屿:注意特判刚进去的那个点是不是宝藏,没判断的话是15分
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+10;
int n, m;
string a[maxn];
int dx[] = {0, 0, -1, 1};
int dy[] = {1, -1, 0, 0};
int ok = 0;
void dfs(int x, int y){
	if(a[x][y]!='0' && a[x][y] != '1')ok = 1;
	for(int i = 0; i < 4; i++){
		int nx = x+dx[i], ny = y+dy[i];
		if(nx<=0||nx>n || ny<=0 || ny > m)continue;
		if(a[nx][ny]=='0')continue;
		if(a[nx][ny]!='1')ok = 1;
		a[nx][ny] = '0';
		dfs(nx, ny);
	}
}
int main(){
	cin>>n>>m;
	for(int i = 1; i <= n; i++) {
		cin>>a[i];
		a[i] = "0"+a[i];
	}
	int cnt = 0, res = 0;
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= m; j++){
			if(a[i][j]!='0'){
				ok = 0;
				dfs(i,j);
				cnt++;
				if(ok==1)res++;
			}
		}
	}
	cout<<cnt<<" "<<res<<"\n";
	return 0;
}
L3-035 完美树(骗分16)
//骗分:最后只输出一个数字,暴力从1开始枚举看看能不能骗分
//发现0有1分,20有15分。 然后试试限一下n的范围把两个点都骗进去。
#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;  cin>>n;
    if(n<10)cout<<"0";//1分
    else cout<<"20";   //15分
    return 0;
}
参考资料

官方题解:链接文章来源地址https://www.toymoban.com/news/detail-428615.html

到了这里,关于【2023团体程序设计天梯赛CCCC】GPLT2023,L1~L2部分(PTA,L1-089~L1-096,L2-045~L2-048)题解代码&复盘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2019年 团体程序设计天梯赛——题解集

    前言: Hello各位童学大家好!😊😊,茫茫题海你我相遇即是缘分呐,或许日复一日的刷题已经让你感到疲惫甚至厌倦了,但是我们真的真的已经达到了我们自身极限了吗?少一点自我感动,没有结果前别太松懈,请相信 ”一万小时定理“ 。当你迷茫时抬头看看远方回想当初

    2023年04月17日
    浏览(82)
  • 2020年 团体程序设计天梯赛——题解集

    Hello各位童学大家好!😊😊,茫茫题海你我相遇即是缘分呐,或许日复一日的刷题已经让你感到疲惫甚至厌倦了,但是我们真的真的已经达到了我们自身极限了吗?少一点自我感动,没有结果前别太松懈,请相信 ”一万小时定理“ 。当你迷茫时抬头看看远方回想当初那个稚

    2023年04月12日
    浏览(45)
  • 2017年 团体程序设计天梯赛——题解集

    前言: Hello各位童学大家好!😊😊,茫茫题海你我相遇即是缘分呐,或许日复一日的刷题已经让你感到疲惫甚至厌倦了,但是我们真的真的已经达到了我们自身极限了吗?少一点自我感动,没有结果前别太松懈,请相信 ”一万小时定理“ 。当你迷茫时抬头看看远方回想当初

    2024年02月01日
    浏览(85)
  • 2018年 团体程序设计天梯赛——题解集

    前言: Hello各位童学大家好!😊😊,茫茫题海你我相遇即是缘分呐,或许日复一日的刷题已经让你感到疲惫甚至厌倦了,但是我们真的真的已经达到了我们自身极限了吗?少一点自我感动,没有结果前别太松懈,请相信 ”一万小时定理“ 。当你迷茫时抬头看看远方回想当初

    2023年04月09日
    浏览(94)
  • 【团体程序设计天梯赛】L2-052 吉利矩阵

    思路: 直接回溯枚举每一个位置填的数,二维肯定是不方便的,我们转成一维,下标x从0到n*n-1。二维数组下标从0到n-1,在一维中下标为x的点在二维中对应行是x/n,列是x%n。 每个数最小能填的是0,最大肯定就是l了,时间复杂度的上限是n的2l次幂,4的18大概是1e11这样。 我们

    2024年04月27日
    浏览(45)
  • 团体程序设计天梯赛-练习集L2篇⑦

    🚀欢迎来到本文🚀 🍉个人简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的普通人。 🏀个人主页:@陈童学哦`CSDN 💡所属专栏:PTA 🎁希望各位→点赞👍 + 收藏⭐️ + 留言📝 ​ ⛱️刷题的当下应是享受的!望与诸君共勉!🏄‍♂️ 下面是PTA的OJ平台 PTA的

    2024年02月11日
    浏览(91)
  • 团体程序设计天梯赛 L2-013 红色警报(连通分量)

    分数 25 战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出

    2024年03月13日
    浏览(52)
  • 2023 PTA天梯赛补题(L1 & L2)

    输入输出题 输入输出题 k == n 和 k == m 分别输出,题目怎么说就怎么做 判断一下c 等于a + b还是a*b或者都不是,分别按要求输出 针对每一群玩游戏的宝宝,枚举判断一下就好了 写的有点烦,基本就是一步一步模拟,思路在注释里写了 枚举分配方案,代码中a代表女生寝室的数

    2024年02月03日
    浏览(41)
  • PTA——L1-023 输出GPLT(c语言)

    给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 GPLTGPLT.... 这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 GPLT 的顺序打印,直到所有字符都被输

    2024年02月13日
    浏览(37)
  • 剪切粘贴(pta团体天梯题)c++超简单详细刨析版

    使用计算机进行文本编辑时常见的功能是剪切功能(快捷键:Ctrl + X)。请实现一个简单的具有剪切和粘贴功能的文本编辑工具。 工具需要完成一系列剪切后粘贴的操作,每次操作分为两步: 剪切:给定需操作的起始位置和结束位置,将当前字符串中起始位置到结束位置部分

    2024年03月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包