SMU 2024 spring 天梯赛自主训练2
PHP
点击查看代码
| #include <bits/stdc++.h> |
| #define debug(a) cout<<#a<<"="<<a<<'\n'; |
| |
| using namespace std; |
| using i64 = long long; |
| |
| typedef pair<i64, i64> PII; |
| |
| int main() { |
| ios::sync_with_stdio(false); |
| cin.tie(nullptr); |
| |
| int h; |
| cin >> h; |
| printf("%.1lf",(h-100)*0.9 * 2); |
| |
| return 0; |
| } |
| #include <bits/stdc++.h> |
| #define debug(a) cout<<#a<<"="<<a<<'\n'; |
| |
| using namespace std; |
| using i64 = long long; |
| |
| typedef pair<i64, i64> PII; |
| |
| int main() { |
| ios::sync_with_stdio(false); |
| cin.tie(nullptr); |
| |
| int h,m; |
| char op; |
| cin >> h >> op >> m; |
| int now = h * 60 + m; |
| if(now >= 0 && now <= 12* 60){ |
| printf("Only %02d:%02d. Too early to Dang.",h,m); |
| }else{ |
| for(int i = 0;i < (now + 59) / 60 - 12 ;i ++) |
| cout << "Dang"; |
| } |
| |
| return 0; |
| } |
| #include <bits/stdc++.h> |
| #define debug(a) cout<<#a<<"="<<a<<'\n'; |
| |
| using namespace std; |
| using i64 = long long; |
| |
| typedef pair<i64, i64> PII; |
| |
| int main() { |
| ios::sync_with_stdio(false); |
| cin.tie(nullptr); |
| |
| int t; |
| cin >> t; |
| while(t -- ){ |
| double h,w; |
| cin >> h >> w; |
| double Per = (h-100)*0.9*2; |
| double Nor = Per * 0.1; |
| if(fabs(w - Per) < Nor) |
| cout << "You are wan mei!\n"; |
| else if(w > Per) |
| cout << "You are tai pang le!\n"; |
| else |
| cout << "You are tai shou le!\n"; |
| |
| } |
| |
| return 0; |
| } |
| #include <bits/stdc++.h> |
| #define debug(a) cout<<#a<<"="<<a<<'\n'; |
| |
| using namespace std; |
| using i64 = long long; |
| |
| typedef pair<i64, i64> PII; |
| |
| int main() { |
| ios::sync_with_stdio(false); |
| cin.tie(nullptr); |
| |
| vector<string> s; |
| string str; |
| cin >> str; |
| while(str != "."){ |
| s.push_back(str); |
| cin >> str; |
| } |
| |
| if(s.size() < 2){ |
| cout << "Momo... No one is for you ...\n"; |
| }else if(s.size() < 14) |
| cout << s[1] << " is the only one for you...\n"; |
| else cout<< s[1] << " and " << s[13] << " are inviting you to dinner..."; |
| |
| return 0; |
| } |
| #include <bits/stdc++.h> |
| #define debug(a) cout<<#a<<"="<<a<<'\n'; |
| |
| using namespace std; |
| using i64 = long long; |
| |
| typedef pair<i64, i64> PII; |
| |
| int main() { |
| ios::sync_with_stdio(false); |
| cin.tie(nullptr); |
| |
| int t; |
| cin >> t; |
| while(t --){ |
| int d,h,m,now; |
| char c; |
| cin >> d >> h >> c >> m; |
| now = h * 60 + m; |
| if(!d) |
| printf("%d %02d:%02d\n",d,h,m); |
| else { |
| if(d % 2 == 0) now += 24*60; |
| printf("%d %02d:%02d\n",(d+1)/2,now / 60 / 2,(now/2)%60); |
| } |
| } |
| |
| return 0; |
| } |
模拟进制;
| #include <bits/stdc++.h> |
| #define debug(a) cout<<#a<<"="<<a<<'\n'; |
| |
| using namespace std; |
| using i64 = long long; |
| |
| typedef pair<i64, i64> PII; |
| |
| int main() { |
| ios::sync_with_stdio(false); |
| cin.tie(nullptr); |
| |
| string JIn; |
| string NumA, NumB; |
| cin >> JIn >> NumA >> NumB; |
| vector<int> wei(30); |
| reverse(JIn.begin(),JIn.end()); |
| reverse(NumA.begin(),NumA.end()); |
| reverse(NumB.begin(),NumB.end()); |
| string zero = "000000000000000000000"; |
| JIn += zero,NumA += zero, NumB += zero; |
| vector<int> w(30); |
| string ans = "000000000000000000000"; |
| for(int i = 0;i <= 20;i ++){ |
| int l = JIn[i] - '0'; |
| if(!l) l = 10; |
| int num = (NumA[i] - '0') + (NumB[i] - '0') + w[i]; |
| w[i+1] += num / l; |
| ans[i] = char('0' + num % l); |
| } |
| reverse(ans.begin(),ans.end()); |
| for(int i = 0;i < ans.size();i ++){ |
| if(ans[i] != '0'){ |
| cout << ans.substr(i) << '\n'; |
| return 0; |
| } |
| } |
| cout << 0 << '\n'; |
| return 0; |
| } |
先补充到n的整数倍,然后倒序每n个输出;
| #include <bits/stdc++.h> |
| #define debug(a) cout<<#a<<"="<<a<<'\n'; |
| |
| using namespace std; |
| using i64 = long long; |
| |
| typedef pair<i64, i64> PII; |
| |
| int main() { |
| ios::sync_with_stdio(false); |
| cin.tie(nullptr); |
| |
| int n; |
| cin >> n; |
| string s; |
| getline(cin,s); |
| getline(cin,s); |
| |
| int m = s.size(); |
| if(m % n){ |
| for(int i = 0;i < n - m % n;i ++) |
| s += ' '; |
| m = s.size(); |
| } |
| int dex = n; |
| reverse(s.begin(),s.end()); |
| for(int i = 0;i < n;i ++){ |
| dex --; |
| for(int j=dex;j < m;j += n) |
| cout << s[j]; |
| cout << '\n'; |
| } |
| |
| return 0; |
| } |
排序;
| #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; |
| } |
| |
并查集处理家庭关系,然后遍历一遍统计家庭所有信息,最后根据题目要求排序;
| #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 = -1, num, fang, s; |
| double avgs, avgfang; |
| }; |
| |
| int main() { |
| ios::sync_with_stdio(false); |
| cin.tie(nullptr); |
| |
| int n; |
| cin >> n; |
| vector<int> fa(10010); |
| iota(fa.begin(), fa.end(), 0); |
| |
| auto find = [&](auto self, int x)-> int{ |
| return fa[x] == x ? x : fa[x] = self(self, fa[x]); |
| }; |
| |
| bitset<10010> vis; |
| vector<people> info(10010); |
| for (int i = 0; i < n; i ++) { |
| int id, x, y, k, f, s; |
| cin >> id >> x >> y >> k; |
| int u = find(find, id); |
| vis[id] = 1; |
| if (x != -1) { |
| x = find(find, x); |
| vis[x] = 1; |
| fa[x] = u; |
| } |
| if (y != -1) { |
| y = find(find, y); |
| vis[y] = 1; |
| fa[y] = u; |
| } |
| for (int j = 0; j < k; j ++) { |
| int z; |
| cin >> z; |
| vis[z] = 1; |
| z = find(find, z); |
| fa[z] = u; |
| } |
| cin >> f >> s; |
| info[id] = {id, 1, f, s, 0, 0}; |
| } |
| |
| vector<people> res(10010), ans; |
| set<int> exit; |
| for (int i = 0; i < 10000; i ++) { |
| if (vis[i]) { |
| int u = find(find, i); |
| if (res[u].id == -1) res[u].id = i; |
| res[u].num ++; |
| res[u].fang += info[i].fang; |
| res[u].s += info[i].s; |
| exit.insert(u); |
| } |
| } |
| |
| for (auto v : exit) { |
| ans.push_back(res[v]); |
| } |
| for (auto &i : ans) { |
| i.avgs = i.s * 1.0 / i.num; |
| i.avgfang = i.fang * 1.0 / i.num; |
| } |
| |
| sort(ans.begin(), ans.end(), [&](people a, people b) { |
| if (a.avgs != b.avgs) return a.avgs > b.avgs; |
| return a.id < b.id; |
| }); |
| |
| printf("%d\n", ans.size()); |
| for (auto i : ans) { |
| printf("%04d %d %.3lf %.3lf\n", i.id, i.num, i.avgfang, i.avgs); |
| } |
| |
| return 0; |
| } |
dfs弟子递归,遇到传道者累加答案即可;
| #include <bits/stdc++.h> |
| #define debug(a) cout<<#a<<"="<<a<<'\n'; |
| |
| using namespace std; |
| using i64 = long long; |
| |
| typedef pair<i64, i64> PII; |
| |
| int main() { |
| ios::sync_with_stdio(false); |
| cin.tie(nullptr); |
| |
| int n; |
| double r; |
| cin >> n; |
| vector<double> z(n + 1); |
| vector<int> DeDao(n + 1); |
| cin >> z[0] >> r; |
| vector g(n + 1, vector<int>()); |
| for (int i = 0; i < n; i ++) { |
| int k, x; |
| cin >> k; |
| if (!k) cin >> x, DeDao[i] = x; |
| else { |
| for (int j = 0; j < k; j ++) { |
| cin >> x; |
| g[i].push_back(x); |
| } |
| } |
| } |
| |
| double ans = 0; |
| auto dfs = [&](auto self, int now) { |
| if (DeDao[now]) { |
| ans += z[now] * DeDao[now]; |
| return; |
| } |
| |
| for (auto v : g[now]) { |
| z[v] = z[now] * (100 - r) * 0.01; |
| self(self, v); |
| } |
| |
| }; |
| |
| dfs(dfs, 0); |
| |
| cout << (int) ans << '\n'; |
| |
| return 0; |
| } |
开1e6的数组用对应地址记录结点信息以及下一个地址,按初始地址构建两条链,碰到重复的就丢到另一条链;
| #include <bits/stdc++.h> |
| #define debug(a) cout<<#a<<"="<<a<<'\n'; |
| |
| using namespace std; |
| using i64 = long long; |
| |
| typedef pair<i64, i64> PII; |
| |
| int main() { |
| ios::sync_with_stdio(false); |
| cin.tie(nullptr); |
| |
| int st, n; |
| cin >> st >> n; |
| vector<PII> L1(n), L2(n); |
| vector<PII> Num(100100); |
| for (int i = 0; i < n; i ++) { |
| int x, a, addr; |
| cin >> addr >> a >> x; |
| Num[addr] = {a, x}; |
| } |
| |
| int cnt1 = 0, cnt2 = 0; |
| set<int> vis; |
| while (st != -1) { |
| if (vis.count(abs(Num[st].first))) { |
| L2[cnt2 ++] = {Num[st].first, st}; |
| } else { |
| vis.insert(abs(Num[st].first)); |
| L1[cnt1 ++] = {Num[st].first, st}; |
| } |
| st = Num[st].second; |
| } |
| |
| auto print = [](int cnt, vector<PII> &L) -> void{ |
| for (int i = 0; i < cnt; i ++) { |
| printf("%05lld %lld ", L[i].second, L[i].first); |
| if (i == cnt - 1) printf("-1\n"); |
| else printf("%05lld\n", L[i + 1].second); |
| } |
| }; |
| |
| print(cnt1, L1); |
| print(cnt2, L2); |
| |
| return 0; |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2023-03-24 蒟蒻成长记录