赛后总结:
TJ:队友晚来了一会,于是我先做了签到题。今天先做了A和B两道签到题,我特别蠢地做错了B两次(两个小错误),然后emmm。队友来了,和她们讲了D题,然后金姐开始搞了。我和彭彭想了一会开始看F神奇序列。序列想了一会,觉得不是很难,找了一个交换数组最少次数的模板套上去就过了。然后我们换了一题,E题。E题一开始理解错题意了,然后一起找规律计算。最后二十多分钟我们找出来了,然后第一发超时,第二发金姐改了就过了。
我的队友太强了呜呜。
A.CSL爱烫头
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<map> #include<set> #include<vector> #include<cmath> #include<string> #include<queue> #include<iomanip> #include<algorithm> using namespace std; typedef long long LL; #define MAX 10005 int main() { int n; cin >> n; if (n < 1) cout << "None" << endl; else if (n == 1) cout << "XiZhiTang" << endl; else if (n == 2) cout << "YingHuaTang" << endl; else if (n >= 3) cout << "BigBoLang" << endl; system("pause"); return 0; }
B.CSL的英语考试
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<map> #include<set> #include<vector> #include<cmath> #include<string> #include<queue> #include<iomanip> #include<algorithm> using namespace std; typedef long long LL; #define MAX 10005 int p[MAX], visit[MAX] = { 0 }, la[MAX] = { 0 }; struct node { int id, people; double sum, num; }; node person[MAX], ans[MAX], p2[MAX]; bool comp(const struct node&a, const struct node&b) { if (a.sum == b.sum) return a.id < b.id; return a.sum > b.sum; } int Find(int x) { int temp = x; while (p[temp] != temp) temp = p[temp]; return temp; } void join(int x, int y) { int t1, t2; t1 = Find(x); t2 = Find(y); if (t1 != t2) { if (t1 > t2) { p[t1] = t2; } else p[t2] = t1; } } int main() { int n; scanf("%d", &n); map<char, int>a; for (int i = 0; i < 26; i++) { char c; cin >> c; a[c] = i; } for (int i = 0; i < n; i++) { char s1[1500], s2[1500]; cin >> s1 >> s2; int len1 = strlen(s1), len2 = strlen(s2); int len = min(len1, len2); int flag = -1; for (int i = 0; i < len; i++) { if (a[s1[i]] > a[s2[i]]) { flag = 1; break; } else if (a[s1[i]] < a[s2[i]]) { flag = 0; break; } } if (flag == -1 && len1 == len2) flag = -1; else if (flag== -1&&len == len1) flag = 0; else if (flag == -1&& len == len2) flag = 1; if (flag == 1) cout << ">" << endl; else if (flag == 0) cout << "<" << endl; else cout << "=" << endl; } system("pause"); return 0; }
E.CSL的魔法
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<map> #include<set> #include<vector> #include<cmath> #include<string> #include<queue> #include<iomanip> #include<algorithm> #include<unordered_map> using namespace std; typedef long long LL; #define MAX 10005 int p[MAX], visit[MAX] = { 0 }, la[MAX] = { 0 }; struct node { int id, people; double sum, num; }; node person[MAX], ans[MAX], p2[MAX]; bool comp(const struct node&a, const struct node&b) { if (a.sum == b.sum) return a.id < b.id; return a.sum > b.sum; } int Find(int x) { int temp = x; while (p[temp] != temp) temp = p[temp]; return temp; } void join(int x, int y) { int t1, t2; t1 = Find(x); t2 = Find(y); if (t1 != t2) { if (t1 > t2) { p[t1] = t2; } else p[t2] = t1; } } struct number { int a, b; }x[150000]; bool cmp(number aa, number bb) { return aa.a > bb.a; } /*bool cmp2(num aa, num bb) { return aa.a > bb.a; }*/ int getMinSwaps(vector<int> &nums) { vector<int> nums1(nums); sort(nums1.begin(), nums1.end()); unordered_map<int, int> m; int len = nums.size(); for (int i = 0; i < len; i++) { m[nums1[i]] = i; } int loops = 0; vector<bool> flag(len, false); for (int i = 0; i < len; i++) { if (!flag[i]) { int j = i; while (!flag[j]) { flag[j] = true; j = m[nums[j]]; } loops++; } } return len - loops; } int main() { int n; cin >> n; for (int i = 0; i < n; i++) { cin >> x[i].a; //x2[i].a = x[i].a; } for (int i = 0; i < n; i++) { cin >> x[i].b; //x2[i].b = x[i].b; } sort(x, x + n, cmp); vector<int>num; for (int i = 0; i < n; i++) num.push_back(x[i].b); int res = getMinSwaps(num); cout << res << endl; system("pause"); return 0; }
F.CSL的神奇序列
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<map> #include<set> #include<vector> #include<cmath> #include<string> #include<queue> #include<iomanip> #include<algorithm> #include<unordered_map> using namespace std; typedef unsigned long long ull; #define MAX 1000005 #define mod 998244353 ull a[MAX]; void init() { a[1] = 1; for (int i = 2; i <= 1000000; i++) { a[i] = (a[i - 1] * (2 * i - 1)) % mod; } } int main() { int w, q,n; cin >> w >> q; init(); while (q--) { int n; cin >> n; ull ans = a[n]; ans =(ans*w)%mod; cout << ans << endl; } system("pause"); return 0; }
新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛 比赛总结
原文:https://www.cnblogs.com/Tangent-1231/p/10632343.html