大学生团体天梯赛(第七届)

这篇文章包含了一系列编程题目,涉及算法如天梯赛的计算,字符串翻转和排列,数学问题求解,以及逻辑判断。主要使用C++语言实现,包括栈、队列等数据结构的运用,字符串处理,以及数学和逻辑运算。
摘要由CSDN通过智能技术生成

题目地址:天梯赛在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
const int N = 105;
int n, check, cnt, t_cnt;
int a[N];
queue<int> q[N];
int main() {
	cin >> n, check = n;
	for(int i = 1; i <= n; ++i) {
		cin >> a[i], a[i] *= 10;
	}
	while(check != 1) {
		for(int i = 1; i <= n && check != 1; ++i) {
			if(!a[i]) continue;
			--a[i], q[i].push(++cnt);
			if(!a[i]) --check;
		}
	}
	for(int i = 1; i <= n; ++i) {
		if(a[i]) {
			q[i].push(++cnt);
			for(int j = 1; j < a[i]; ++j) {
				q[i].push(cnt += 2);
			}
		}
		printf("#%d\n", i);
		t_cnt = 0;
		while(!q[i].empty()) {
			cout << q[i].front(), q[i].pop();
			++t_cnt % 10 ? putchar(' ') : putchar('\n');
		}
		if(t_cnt % 10) putchar('\n');
	}
	return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
long long l, n;
stack<int> st;
int main() {
	cin >> l >> n;
	n = pow(26, l) - n;
	while(n) {
		st.push(n % 26);
		n /= 26;
	}
	if(st.size() < l) {
		for(int i = 0; i < l - st.size(); ++i) {
			putchar('a');
		}
	}
	while(!st.empty()) {
		putchar('a' + st.top()), st.pop();
	}
	return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
double a, b;
int main() {
	cin >> a >> b;
	printf("%.2f",a * b / 10);
	return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int main() {
	puts("2018\nwo3 men2 yao4 ying2 !");
	return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int a, b;
int main() {
	cin >> a >> b;
	for(int i = 0; i < a + b; ++i) {
		cout << "Wang!";
	}
	return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
char c;
int n, flag;
char a[105][105], b[105][105];
int main() {
	cin >> c >> n;
	getchar();
	for(int i = 0; i < n; ++i) {
		for(int j = 0; j < n; ++j) {
			b[n - i - 1][n - j - 1] = a[i][j] = getchar();
		} 
		getchar();
	}
	for(int i = 0; i < n; ++i) {
		for(int j = 0; j < n; ++j) {
			if(a[i][j] != b[i][j]) {
				flag = 1;
				break;
			}
		}
	}
	if(!flag) {
		puts("bu yong dao le");
	}
	for(int i = 0; i < n; ++i) {
		for(int j = 0; j < n; ++j) {
			b[i][j] == ' ' ? putchar(' ') : putchar(c);
		}
		putchar('\n');
	}
	return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int pa, pb, cnt, x;
int main() {
	cin >> pa >> pb;
	for(int i = 0; i < 3; ++i) {
		cin >> x, cnt += x;
	}
	if(cnt == 3) printf("The winner is b: %d + 3", pb);
	else if(!cnt) printf("The winner is a: %d + 3", pa);
	else {
		if(pa > pb) printf("The winner is a: %d + %d", pa, 3 - cnt);
		else printf("The winner is b: %d + %d", pb, cnt);
	}
	return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
const int N = 1e4 + 5;
int n, cnt, flag;
pair<string, int> a[N];
int main() {
	cin >> n;
	for(int i = 0; i < n; ++i) {
		cin >> a[i].first >> a[i].second;
		cnt += a[i].second;
	}
	for(int i = 0; i < n; ++i) {
		if(fabs(a[i].second * n * 2 - cnt) < fabs(a[flag].second * n * 2 - cnt)) {
			flag = i;
		}
	}
	cout << cnt / n / 2 << " " << a[flag].first;
	return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
const int N = 10005;
int n, m, u, v;
vector<int> road[N];
bool distory[N];
bool check() {
	for(int i = 1; i <= n; ++i) {
		if(!distory[i]) {
			for(int j = 0; j < road[i].size(); ++j) {
				if(!distory[road[i][j]]) return false;
			}
		}
	}
	return true;
}
int main() {
	cin >> n >> m;
	while(m--) {
		cin >> u >> v;
		road[u].push_back(v), road[v].push_back(u);
	}
	cin >> m;
	while(m--) {
		memset(distory, false, sizeof(distory));
		cin >> u;
		for(int i = 0; i < u; ++i) {
			cin >> v, distory[v] = true;
		}
		cout << (check() ? "YES" : "NO") << endl;
	}
    return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
const int N = 100005;
int n, x, flag;
vector<int> relationship[N];
struct P{
	int id, b;
} p[N];
void dfs(int x, int b) {
	p[x].b = b;
	for(int i = 0; i < relationship[x].size(); ++i) {
		dfs(relationship[x][i], b + 1);
	}
}
int main() {
	cin >> n;
	for(int i = 1; i <= n; ++i) {
		cin >> x, p[i].id = i;
		if(x == -1) flag = i;
		else relationship[x].push_back(i);
	} 
	dfs(flag, 1);
	sort(p + 1, p + n + 1, [](P A, P B){
		return A.b > B.b || A.b == B.b && A.id < B.id;
	});
	cout << p[1].b << endl;
	for(int i = 1; i <= n; ++i) {
		if(p[i].b == p[1].b) cout << (i == 1 ? "" : " ") << p[i].id;
		else break;
	}
    return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
const int N = 10005;
int n, g, k, cnt;
struct P{
	string name;
	int score;
	bool operator < (const P A) const {
		return score > A.score || score == A.score && name < A.name;
	}
}p[N];
int main() {
	cin >> n >> g >> k;
	for(int i = 0; i < n; ++i) {
		cin >> p[i].name >> p[i].score;
		if(p[i].score >= g) cnt += 50;
		else if(p[i].score >= 60) cnt += 20;
	}
	cout << cnt << endl;
	sort(p, p + n);
	for(int i = 0, num = 1; i < n; ++i) {
		if(i != 0 && p[i].score != p[i - 1].score) num = i + 1;
		if(num > k) break;
		cout << num << " " << p[i].name << " " << p[i].score << endl;
	}
    return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int n, m, k, x, a, b;
string s;
double relationship[1005][1005], max_a, max_b;
int photo[505];
vector<int> sex(1005, -1);
vector<int> ans_a, ans_b;
int main(){
	scanf("%d%d", &n, &m);
    while(m--) {
		scanf("%d", &k);
		for(int i = 0; i < k; ++i) {
			cin >> s;
			x = fabs(stoi(s)), sex[x] = (s[0] == '-' ? 1 : 0), photo[i] = x;
		}
		for(int i = 0; i < k; ++i) {
			for(int j = i + 1; j < k; ++j) {
				if(sex[photo[i]] ^ sex[photo[j]]) {
					relationship[photo[i]][photo[j]] = relationship[photo[j]][photo[i]] += 1.0 / k; 
				}
			}
		}
	}
	scanf("%d%d", &a, &b);
	int na = fabs(a), nb = fabs(b);
	for(int i = 0; i < n; ++i) {
		if(relationship[na][i] > max_a) {
			ans_a.clear();
            ans_a.emplace_back(i); 
            max_a = relationship[na][i];
		} else if(relationship[na][i] == max_a) {
			ans_a.emplace_back(i);
		}
		if(relationship[nb][i] > max_b) {
			ans_b.clear();
			ans_b.emplace_back(i); 
            max_b = relationship[nb][i];
		} else if(relationship[nb][i] == max_b) {
			ans_b.emplace_back(i);
		}
	}
 	if(relationship[na][nb] == max_a && relationship[na][nb] == max_b) {
        if(sex[na]) printf("-");
        printf("%d ", na);
        if(sex[nb]) printf("-");
        printf("%d", nb);
	} else {
		for(auto& x : ans_a) {
			if(sex[na]) printf("-");
			printf("%d ", na);
			if(sex[x]) printf("-");
			printf("%d\n", x);
		}
		for(auto& x : ans_b) {
			if(sex[nb]) printf("-");
			printf("%d ", nb);
			if(sex[x]) printf("-");
			printf("%d\n", x);
		}
	}
	return 0;
}

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
int point, space = 2, mark, tp, cnt, use, temp;
string s;
int Function(int c) {
	if (c == 0) while (s[point] == ' ') point++;
	else if (c == 1) for (int i = 0; i < space; i++) cout << ' ';
	else if (c == 2) {
		if (s.substr(point, 2) == "if" && (s[point + 2] == '(' || s[point + 2] == ' ')) return 2;
		else if (s.substr(point, 3) == "for" && (s[point + 3] == '(' || s[point + 3] == ' ')) return 3;
		else if (s.substr(point, 4) == "else" && (s[point + 4] == '(' || s[point + 4] == ' ')) return 4;
		else if (s.substr(point, 5) == "while" && (s[point + 5] == '(' || s[point + 5] == ' ')) return 5;
	} else if (c == 3) {
		Function(0);
		if (Function(2) == 4) return 0;
		while (mark) {
			space -= 2;
			Function(1);
			cout << "}\n";
            mark--;
		} 
	}
	return 0;
}
int main() {
	getline(cin, s);
	Function(0);
	for (int i = point; s[i] != ')'; ++i) cout << s[i];
	cout << ")\n{\n";
	point = s.find('{') + 1;
	while (true) {
		Function(0);
		temp = Function(2);
		if (s[point] == '{') {
			Function(1);
			cout << "{\n";
			space += 2;
			point++;
		} else if (s[point] == '}') {
			space -= 2;
			Function(1);
			cout << "}\n";
			if (space == 0) return 0;
			Function(3);
			point++;
		} else if (temp) {
			Function(1);
			cout << s.substr(point, temp);
			point += temp;
			if (temp != 4) {
				Function(0);
				tp = point;
				cnt = 0;
				while(tp < s.size()) {
					if (s[tp] == '(') cnt++;
					else if (s[tp] == ')') cnt--;
					tp++;
					if (cnt == 0) break;
				}
				cout << ' ' << s.substr(point, tp - point);
				point = tp;
			}
			cout <<  " {\n";
			space += 2;
			Function(0);
			if (s[point] != '{') {
				use = 1;
				mark++;
			} else {
				use = 0;
				point++;
			}
		} else {
			Function(1);
			cnt = s.find(';', point);
			cout << s.substr(point, cnt - point + 1) << '\n';
			point = cnt + 1;
			if (use && mark) {
				space -= 2;
				Function(1);
				cout << "}\n";
				mark--;
				Function(3);
			}
		}
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东大21计科小萌新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值