您当前的位置: 首页 > 

MangataTS

暂无认证

  • 5浏览

    0关注

    423博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

2021第六届GPLT 团体程序设计天梯赛CCCC 个人题解

MangataTS 发布时间:2021-04-26 13:53:00 ,浏览量:5

目录

  • L1-1 人与神
    • Code
  • L1-2 两小时学完C语言
    • Code
  • L1-3 强迫症
    • 思路
    • Code
  • L1-4 降价提醒机器人
    • Code
  • L1-5 大笨钟的心情
    • 思路
    • Code
  • L1-6 吉老师的回归
    • 解题思路
    • Code
  • L1-7 天梯赛的善良
    • 解题思路
    • Code
  • L1-8 乘法口诀数列
    • 解题思路
    • Code
  • L2-1 包装机
    • 解题思路
    • Code
  • L2-2 病毒溯源
    • 解题思路
    • Code
  • L2-3 清点代码库
    • 解题思路
    • Code
  • L2-4 哲哲打游戏
    • 解题思路
    • Code
  • L3-2 还原文件
    • 解题思路
    • Code
  • 最后
L1-1 人与神 Code
#include
using namespace std;
#define ll long long

const int N = 10005;

int main()
{
	puts("To iterate is human, to recurse divine.");
	return 0;
}
L1-2 两小时学完C语言 Code
#include
using namespace std;
#define ll long long

int main()
{
	ll n,k,m;
    cin>>n>>k>>m;
    if(k * m >= n) puts("0");
    else printf("%lld\n",n-k*m);
	return 0;
}
L1-3 强迫症 思路

输入就两种可能,1.长度为4  2.长度为6,分类讨论一下就好了

Code
#include
using namespace std;
#define ll long long
int main()
{
	string ch;
	cin>>ch;
	if(ch.size() ==  6) {
		for(int i = 0;i < 4; ++i) {
			putchar(ch[i]);
		}
		putchar('-');
		putchar(ch[4]);
		putchar(ch[5]);
	}
	else {
		int k = (ch[0]-'0')*10 + (ch[1]-'0');
		if(k < 22) {
			printf("20");
			
		}
		else
			printf("19");
		putchar(ch[0]);
			putchar(ch[1]);
			putchar('-');
			putchar(ch[2]);
			putchar(ch[3]);
	}
	return 0;
}
L1-4 降价提醒机器人 Code
#include
using namespace std;
#define ll long long

const int N = 10005;

int main()
{
	int n;
	double m,k;
	scanf("%d%lf",&n,&m);
	for(int i = 1;i  23)
			break;
		if(a[k] > 50) {
			printf("%d Yes\n",a[k]);
		}
		else
			printf("%d No\n",a[k]);
	}
	return 0;
}
L1-6 吉老师的回归 解题思路

注意的是这里吉老师遇到qiandao或者easy的话是不算作吉老师当前完成的题目里面去的,我们先将吉老师做完的题目数进行消耗,然后后面出来输入的第一个不包含easy或者qiandao的字符串就是吉老师当前做的题目,但是如果题目数已经用完了,那就说明吉老师AK了

Code
#include
using namespace std;

char *str[2]={"easy","qiandao"};


bool find(string ch) {//暴力匹配
	int len = ch.size();
	for(int i = 0;i < len; ++i) {
		bool fg = true;
		if(ch[i] == 'e' && i + 3 < len) {
			for(int j = 0;j < 4; ++j) {
				if(str[0][j] != ch[i+j]) {
					fg = false;
					break;
				}
			}
			if(fg)
			return fg;
		}
		else if(ch[i] == 'q' && i + 6 < len) {
			for(int j = 0;j < 7; ++j) {
				if(str[1][j] != ch[i+j]) {
					fg = false;
					break;
				}
			}
			if(fg)
			return fg;
		}
	}
	return false;
}

int main()
{
	string ch;
	int n,m;
	cin>>n>>m;
	getchar();
	int loc = 0;
	while(m && loc < n) {
		getline(cin,ch);
		loc++;
		if(find(ch)) continue;
		m--;
	}
	
	while(loc < n) {
		getline(cin,ch);
		loc++;
		if(find(ch)) continue;
		string temp;
		while(loc < n)  getline(cin,temp),loc++;//将未输入完的字符串先输入
		coutm>>s;
	string ch;
	getchar();
	for(int i = 1;i >k) {
		if(k < -1 || k > n) continue;
		if(k == - 1) {
			for(int i = 0;i < ans.size(); ++i) {
				putchar(ans[i]);
			}
			putchar('\n');
			break;
		}
		if(k == 0) {
			if(S.size()) {
				ans.push_back(S.top());
				S.pop();
			}
		}
		else {
			if(que[k].size()) {
				if(S.size() >= s) {
					ans.push_back(S.top());
					S.pop();
				}
				S.push(que[k].front());
				que[k].pop();
			}
		}
	}
	
	return 0;
}
L2-2 病毒溯源 解题思路

一个母体病毒株能变异出k个子病毒,这不就是我们熟悉的树形结构嘛,然后题目问病毒的最长变异链,如果相同则输出序列小的那一种,我们很明显能想到并查集这种数据结构,(注意不要压缩路径),我们完成建树后,先找到最长变异链的长度,然后将所有最长变异链放在vector[]里面,最后再对这个vector进行排序输出vector[0]的变异链即可

Code
#include
using namespace std;
#define ll long long
int n,m,s;

const int N = 100005;

int fa[N];
int cnt[N];

vector V[N];

void init(int n) {
	for(int i = 1;i >n;
	init(n);
	int k;
	for(int i = 1;i >k;
		int t;
		for(int j = 0;j < k; ++j) {
			cin>>t;
			t++;
			merge(i,t);
		}
	}
	int len = 1;
	for(int i = 1;i             
关注
打赏
1665836431
查看更多评论
0.1745s