SMU 2024 spring 天梯赛2

7-1 计算指数 - SMU 2024 spring 天梯赛2 (pintia.cn)

#include <bits/stdc++.h>

using namespace std;

using i64 = long long;

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); int n,ans = 1;
cin >> n;
for(int i = 1;i <= n;i ++, ans *= 2);
cout << "2^"<< n<<" = " << ans; return 0;
}

7-2 计算摄氏温度 - SMU 2024 spring 天梯赛2 (pintia.cn)

#include <bits/stdc++.h>

using namespace std;

using i64 = long long;

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); cout << "fahr = 100, celsius = "<<5 * (100-32)/9 ; return 0;
}

7-3 念数字 - SMU 2024 spring 天梯赛2 (pintia.cn)

#include <bits/stdc++.h>

using namespace std;

using i64 = long long;

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); vector<string> a = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
string s;
cin >> s;
if(s[0] == '-') cout << "fu ",s.erase(s.begin()); for(int i = 0;i < s.size();i++)
cout << a[s[i] - '0'] << " \n"[i == s.size() - 1]; return 0;
}

7-4 求阶乘累加和 - SMU 2024 spring 天梯赛2 (pintia.cn)

#include <bits/stdc++.h>

using namespace std;

using i64 = long long;

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); i64 n, ans = 0,a = 1;
cin >> n;
for(int i = 1;i <= n;i ++){
a *= i;
ans += a;
} cout << ans << '\n'; return 0;
}

7-5 6翻了 - SMU 2024 spring 天梯赛2 (pintia.cn)

#include <bits/stdc++.h>

using namespace std;

using i64 = long long;

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); string s;
getline(cin, s);
for (int i = 0; i < s.size();) {
if (s[i] == '6') {
int j = i;
while (j < s.size() && s[j] == '6') j ++;
if (j - i > 9) cout << "27", i = j;
else if (j - i > 3) cout << "9", i = j;
else cout << s[i] , i ++;
} else
cout << s[i], i ++;
} return 0;
}

7-6 福到了 - SMU 2024 spring 天梯赛2 (pintia.cn)

#include <bits/stdc++.h>

using namespace std;

using i64 = long long;

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); char c;
int n;
cin >> c >> n;
vector<string> a(n), b(n);
string s;
getline(cin,s);
for (int i = 0;i < n;i ++) {
getline(cin,s);
b[i] = a[i] = s;
reverse(b[i].begin(), b[i].end());
} reverse(b.begin(), b.end());
if (a == b) cout << "bu yong dao le\n"; for (auto s : b) {
for (auto j : s)
if (j == '@') cout << c;
else cout << j;
cout << '\n';
} return 0;
}

7-7 估值一亿的AI核心代码 - SMU 2024 spring 天梯赛2(补题) (pintia.cn)

很恶心的模拟题,做一遍就不想做第二遍;

#include <bits/stdc++.h>

using namespace std;

using i64 = long long;

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); int n;
cin >> n;
string s;
getline(cin, s); auto biaoDian = [](char c) -> bool{
if (c >= 'A' && c <= 'Z') return false;
if (c >= 'a' && c <= 'z') return false;
if (c >= '0' && c <= '9') return false;
return true;
}; for (int i = 0; i < n; i ++) {
getline(cin, s);
cout << s << '\n';
vector<string> a;
int j = 0, k = 0;
for (int l = 0; l < s.size(); l ++)
if (s[l] == '?') s[l] = '!';
while (k < s.size()) {
if (s[k] == ' ') {
while (k + 1 < s.size() && s[k + 1] == ' ') k ++;
if (a.empty()) {
k ++;
j = k;
continue;
};
a.push_back(" ");
} else if (!biaoDian(s[k])) {
while (k + 1 < s.size() && s[k + 1] != ' ' && !biaoDian(s[k + 1])) k ++;
a.push_back(s.substr(j, k - j + 1));
} else {
string as = "";
as += s[k];
a.push_back(as);
}
k ++;
j = k;
} if (a.size() && a.back() == " ") a.pop_back();
for (j = a.size() - 1; j > 0; j --) {
if (biaoDian(a[j][0])) {
if (a[j - 1] == " ") a.erase(a.begin() + j - 1);
}
} for (j = 0; j < a.size(); j ++) {
for (k = 0; k < a[j].size(); k ++) {
if (a[j][k] >= 'A' && a[j][k] < 'Z' && a[j][k] != 'I')
a[j][k] += 32;
}
} for (j = 0; j < a.size(); j ++) {
if (a[j] == "I" || a[j] == "me") {
a[j] = "you#";
continue;
}
} for (j = 0; j < a.size(); j ++) {
if (j + 2 >= a.size()) continue;
string p = a[j] + a[j + 1] + a[j + 2];
if (p == "can you" || p == "could you") {
a[j + 2] = a[j];
a[j] = "I";
j += 2;
}
} string ans = "";
for (auto p : a)
ans += p;
cout << "AI: ";
for (j = 0; j < ans.size(); j ++)
if (ans[j] == '#') continue;
else cout << ans[j];
cout << '\n'; } return 0;
}

7-8 前世档案 - SMU 2024 spring 天梯赛2(补题) (pintia.cn)

是对照0,否对照1;

按照上述去判断对应问题即结论1为000,结论2为001 \(\dots\) 结论8为111;

很明显可以用递归去判断,结论数即对应的二进制转十进制后加1即可;

#include <bits/stdc++.h>

using namespace std;

using i64 = long long;

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); int n, m;
cin >> n >> m; while (m --) {
string s;
cin >> s;
auto dfs = [&](auto dfs, int now) -> i64{
if (now >= n) return 1;
if (s[now] == 'y')
return dfs(dfs, now + 1);
else
return (1ll << (n - now - 1)) + dfs(dfs, now + 1);
};
cout << dfs(dfs, 0) << '\n';
} return 0;
}

7-9 抢红包 - SMU 2024 spring 天梯赛2(补题) (pintia.cn)

排序,注意最后输出保留两位小数;

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n'; using namespace std;
using i64 = long long; typedef pair<i64, i64> PII; struct people{
int id,num = 0;
double val = 0;
}; int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); int n;
cin >> n;
vector<people> Ke(n + 1);
for(int i = 1;i <= n;i ++){
int k,num = 0;
cin >> k;
Ke[i].id = i;
for(int j = 0;j < k;j ++){
int ni,pi;
cin >> ni >> pi;
num += pi;
Ke[ni].num ++;
Ke[ni].val += pi;
}
Ke[i].val -= num;
} Ke.erase(Ke.begin());
sort(Ke.begin(),Ke.end(),[&](people a,people b){
if(a.val == b.val && a.num == b.num) return a.id < b.id;
if(a.val == b.val) return a.num > b.num;
return a.val > b.val;
}); for(auto [id,num,val] : Ke){
printf("%d %.2lf\n",id, val / 100);
} return 0;
}

7-10 红色警报 - SMU 2024 spring 天梯赛2(补题) (pintia.cn)

并查集;

先统计原来的联通快有多少;

每次去掉一个城市后用并查集统计联通块数与上次是否发生变化;

小于上次是有可能有些单独的点被移除了,但是并不影响其余联通块;

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n'; using namespace std;
using i64 = long long; typedef pair<i64, i64> PII; struct UFS {
vector<int> fa;
int n;
UFS(int n) : n(n) {
fa.resize(n + 1);
for (int i = 0; i <= n; i ++)
fa[i] = i;
} int find(int x) {
return fa[x] == x ? x : find(fa[x]);
} void unin(int x, int y) {
x = find(x), y = find(y);
if (x != y) fa[x] = y;
}
}; int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); int n, m;
cin >> n >> m; typedef pair<i64, i64> PII;
int num = 0;
vector<PII> edge(m);
UFS ufs(n);
for (auto &[u, v] : edge) {
cin >> u >> v;
ufs.unin(u, v);
} for (int i = 0; i < n; i ++)
if (ufs.find(i) == i) num ++; int k;
cin >> k;
vector<bool> vis(n);
while (k --) {
int x, now = 0;
cin >> x;
UFS ufs1(n);
vis[x] = 1;
for (int i = 0; i < m; i ++) {
auto [u, v] = edge[i];
if (vis[u] || vis[v]) continue;
ufs1.unin(u, v);
}
for (int i = 0; i < n; i ++)
if (ufs1.find(i) == i && !vis[i]) now ++;
if (now <= num) {
cout << "City " << x << " is lost.\n";
} else {
cout << "Red Alert: City " << x << " is lost!\n";
}
num = now;
bool f = false;
for (int i = 0; i < n; i ++)
if (!vis[i]) f = true;
if (!f) cout << "Game Over.\n";
} return 0;
}

7-11 排座位 - SMU 2024 spring 天梯赛2(补题) (pintia.cn)

并查集;

用并查集统计朋友,敌人用二维关系表示即可,因为没有说明敌人的敌人也是朋友,所以不适合种类并查集;

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n'; using namespace std;
using i64 = long long; typedef pair<i64, i64> PII; struct UFS {
vector<int> fa;
int n;
UFS(int n) : n(n) {
fa.resize(n + 1);
for (int i = 0; i <= n; i ++)
fa[i] = i;
}
int find(int x) {
return fa[x] == x ? x : fa[x] = find(fa[x]);
}
void unin(int x, int y) {
x = find(x), y = find(y);
if (x != y) fa[x] = y;
}
}; int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); int n, m, k;
cin >> n >> m >> k;
UFS frend(n);
vector Diren(n + 1,vector<int>(n + 1));
for (int i = 0; i < m; i ++) {
int u, v, c;
cin >> u >> v >> c;
if (c == 1) {
frend.unin(u, v);
} else Diren[u][v] = 1,Diren[v][u] = 1;
} while(k --){
int u,v;
cin >> u >> v;
int a = frend.find(u),b = frend.find(v);
if(a == b && !Diren[u][v]){
cout << "No problem\n";
}else if(a != b && !Diren[u][v]){
cout << "OK\n";
}else if(a == b && Diren[u][v]){
cout << "OK but...\n";
}else{
cout << "No way\n";
}
} return 0;
}

7-12 这是二叉搜索树吗? - SMU 2024 spring 天梯赛2(补题) (pintia.cn)

建一颗二叉搜索树,跑一遍dfs记录前后序遍历;

如果是镜像就在原来的dfs基础上交换一下左右子树的顺序即可;

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n'; using namespace std;
using i64 = long long; typedef pair<i64, i64> PII; struct Node {
int data;
Node* left;
Node* right; Node* newNode(int v) {
Node* node = new Node;
node->data = v;
node->right = node->left = NULL;
return node;
} void insert(Node* &root, int x) {
if (root == NULL) {
root = newNode(x);
return ;
}
if (root->data > x)
insert(root->left, x);
else
insert(root->right, x);
} Node* Create(vector<int> tree) {
Node* root = NULL;
for (auto i : tree) {
insert(root, i);
}
return root;
}
}; int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); int n;
cin >> n;
vector<int> tree(n);
for (auto &i : tree) cin >> i; Node Tr; vector<int> pre, suf, Jpre;
auto dfs = [&](auto dfs, Node * root) {
if (root == NULL) return ;
pre.push_back(root->data);
dfs(dfs, root->left);
dfs(dfs, root->right);
suf.push_back(root->data);
}; dfs(dfs, Tr.Create(tree)); if (pre == tree) {
cout << "YES\n";
for (int i = 0; i < suf.size(); i ++)
cout << suf[i] << " \n"[i == suf.size() - 1];
return 0;
} vector<int>().swap(suf);
auto dfs1 = [&](auto dfs, Node * root) {
if (root == NULL) return ;
Jpre.push_back(root->data);
dfs(dfs, root->right);
dfs(dfs, root->left);
suf.push_back(root->data);
}; dfs1(dfs1, Tr.Create(tree));
if (Jpre == tree) {
cout << "YES\n";
for (int i = 0; i < suf.size(); i ++)
cout << suf[i] << " \n"[i == suf.size() - 1];
return 0;
} cout << "NO\n"; return 0;
}

SMU 2024 spring 天梯赛2的更多相关文章

  1. 【CCCC天梯赛决赛】

    cccc的天梯赛决赛,水题一样的水,中档题以上的还是没做出来.补了一下题,觉得其实也不是很难,主要是练的少. L2-1:红色预警 并查集 我做的时候想不到并查集,想到了也不一定做的出来,都是其实不难. ...

  2. 记第一届 CCCC-团体程序设计天梯赛决赛 参赛

    其他都没什么,上午报道,下午比赛两个半小时,最后139分 但四我超遗憾的是,最后在做L3-1二叉搜索树,因为看到有辣么多人做出来,可是我没做出来啊 比赛结束后看了看其他两道当场吐血,L3-3直捣黄龙不 ...

  3. L1-049 天梯赛座位分配​​​​​​​

    L1-049 天梯赛座位分配 (20 分) 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i ...

  4. 团体程序设计天梯赛(CCCC) L3021 神坛 的一些错误做法(目前网上的方法没一个是对的) 和 一些想法

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  5. 团体程序设计天梯赛(CCCC) L3019 代码排版 方法与编译原理密切相关,只有一个测试点段错误

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  6. 团体程序设计天梯赛(CCCC) L3015 球队“食物链” 状态压缩

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code #include <cstdio> #include ...

  7. 第四届CCCC团体程序设计天梯赛 后记

    一不小心又翻车了,第二次痛失200分 1.开局7分钟A了L2-3,一看榜已经有七个大兄弟排在前面了,翻车 * 1 2.把L1-3 A了18分,留了两分准备抢顽强拼搏奖,最后五秒钟把题过了,万万没想到还 ...

  8. 团体程序设计天梯赛(CCCC) L3014 周游世界 BFS证明

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  9. 团体程序设计天梯赛(CCCC) L3013 非常弹的球 不同思路

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  10. 团体程序设计天梯赛(CCCC) L3012 水果忍者 上凸或下凹的证明

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code #include <cstdio> #include ...

随机推荐

  1. spark使用jdbc批次提交方式写入phoniex的工具类

    一.需求:spark写入phoniex 二.实现方式 1.官网方式 dataFrame.write .format("org.apache.phoenix.spark") .mod ...

  2. java多线程-2-概念和实现机制

    知其然,而知其所以然! 在计算机领域,有多种操作系统,常见的有windows家族和unix/Linux家族,它们都支持多任务的计算模式. 它们实现多任务的机制是差不多的,这点在<<操作系统 ...

  3. 【论文阅读】IROS2022: Dynamics-Aware Spatiotemporal Occupancy Prediction in Urban Environments

    0.参考与前言 完整题目: Dynamics-Aware Spatiotemporal Occupancy Prediction in Urban Environments 论文链接:https:// ...

  4. Centos7安装Redis详细步骤(配置开机自启)

    Redis 获取redis安装包使用tar命令解压. $ tar -zxzf redis-6.2.6.tar.gz 编译和安装redis 进入redis目录,执行make编译. $ cd redis- ...

  5. CF-957(D-E)

    CF-957 赛时A去写全排列--前三题我的写法都挺丑的,后面改进了再更-- Problem - D - Codeforces 虽然是很简单很经典的线性dp,但也是我第一次自己把这种题写出来ヾ(≧▽≦ ...

  6. oeasy教您玩转vim - 25 - 更多颜色

    ​ 更多颜色 回忆上节课内容 我们上次深入了配色方案 定义了自己的配色方案 oeasy 建立了自己的配色 oeasy 在状态栏应用了自己的配色 ​ 明确能用的颜色 先胡乱地尝试一下修改颜色代码 hi ...

  7. C# 泛型单例工厂

    核心代码,线程安全 class SingletonFactory<T> where T : new() { private static T uniqueInstance; private ...

  8. mysql 参数调优

    临时调整mysql内存,最好在项目开始的时候直接改配置不用临时设置 SET GLOBAL innodb_buffer_pool_size = 2147483648; 查询当前使用内存: SHOW VA ...

  9. RHCA rh442 001 调优本质 调优方法 监控

    调优是一种感知 调优按照成本和性能 一.架构及调优 二.代码及调优 三.配置类调优 从调优效果和成本成正比 设计电商,日访问百万级,未来可能千万级 数据库 系统 服务器多少台 缓存 appache,n ...

  10. Jmeter参数化1-随机数设置

    背景:当新增接口的某个字段是唯一性,每次调用该新增接口都会需要单独传入这个字段,麻烦且繁琐. 解决:jmeter设置随机数参数,然后接口调用该参数就达到了自动性不再需要人工传入不同的值.方便调用接口, ...