“科大讯飞杯”第18届上海大学程序设计联赛春季赛暨高校网络友谊赛
Posted kanoon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“科大讯飞杯”第18届上海大学程序设计联赛春季赛暨高校网络友谊赛相关的知识,希望对你有一定的参考价值。
比赛链接:https://ac.nowcoder.com/acm/contest/5278
A - 组队比赛
题意
将四个数分为两个和,使二者相差尽量小。
思路
枚举其中一个和的情况。
代码
#include <bits/stdc++.h> using namespace std; int main() { int sum = 0; int a[4]; for (int &i : a) cin >> i, sum += i; int ans = INT_MAX; for (int i = 0; i < 4; i++) { for (int j = i + 1; j < 4; j++) { ans = min(ans, abs(a[i] + a[j] - (sum - a[i] - a[j]))); } } cout << ans; }
B - 每日一报
题意
将给定数据按照题目要求排序输出。
思路
结构体排序。
代码
#include <bits/stdc++.h> using namespace std; struct P{ string date, num; double tem; }; int main() { int n; cin >> n; P a[n]; for (auto &i : a) cin >> i.date >> i.num >> i.tem; sort(a, a + n, [] (P a, P b) { if (a.date != b.date) return a.date > b.date; else if (a.tem != b.tem) return a.tem > b.tem; else return a.num < b.num; }); int cnt = 0; for (auto i : a) if (i.tem >= 38.0) ++cnt; cout << cnt << " "; for (auto i : a) { if (i.tem < 38.0) continue; cout << i.date << ‘ ‘ << i.num << ‘ ‘; printf("%.1f ", i.tem); } }
C - 最长非公共子序列
题意
求两个字符串的最长非公共子序列大小。
思路
若两个字符串相等则不存在,否则输出较长的的字符串大小即可。
代码
#include <bits/stdc++.h> using namespace std; int main() { string s1, s2; cin >> s1 >> s2; if (s1 == s2) cout << "-1"; else cout << max(s1.size(), s2.size()); }
D - 最大字符集
题意
构造一个字符串最长为 n 的 01 字符串集,每个长度的字符串最多有一个,所有字符串两两不包含。
思路
00
010
0110
01110
011110
代码
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; if (n == 1) cout << "1 1 "; else if (n == 2) cout << "2 1 00 "; else { cout << n - 1 << " "; for (int i = 2; i <= n; i++) { cout << "0" + string(i - 2, ‘1‘) + "0" << " "; } } }
E - 美味的序列
题意
每次从数列的首或尾部取一个数,余下的数都减一,求取完数列所能得到的数之和的最大值。
思路
第 1 次取之后余下的 n-1 个数 -1,
第 2 次取之后余下的 n-2 个数 -1,
……
第 n - 1 次取之后余下 1 个数 -1 。
代码
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; long long sum = 0; int a[n]; for (int &i : a) cin >> i, sum += i; cout << sum - 1LL * n * (n - 1) / 2; }
F - 日期小助手
题意
输出 2000.1.1~2100.12.31 间一个日期后最近的母亲节或父亲节的日期。
思路
平年 365 天,365 % 7 = 1,所以每个平年母亲节和父亲节的日期会较上一年向前偏移一天 (闰年偏移两天),从 2000 年向后递推至 2101 年即可。
代码
#include <bits/stdc++.h> using namespace std; int m_day[2200], f_day[2200]; void Print(char c, int d, int y) { cout << (c == ‘M‘ ? "Mother‘s Day: May " : "Father‘s Day: June ") << d << (d == 21 ? "st" : "th") << ", " << y << " "; } void solve() { int y, m, d; cin >> y >> m >> d; if (m < 5 or (m == 5 and d < m_day[y])) Print(‘M‘, m_day[y], y); else if (m < 6 or (m == 6 and d < f_day[y])) Print(‘F‘, f_day[y], y); else Print(‘M‘, m_day[y + 1], y + 1); } bool is_leap_year(int y) { return (y % 4 == 0 and y % 100 != 0) or y % 400 == 0; } void init(int a[], int st, int mi) { a[2000] = st; for (int i = 2001; i <= 2101; i++) { if (is_leap_year(i)) a[i] = a[i - 1] - 2; else a[i] = a[i - 1] - 1; if (a[i] <= mi) a[i] += 7; } } int main() { init(m_day, 14, 7); init(f_day, 18, 14); int t; cin >> t; while (t--) solve(); }
以上是关于“科大讯飞杯”第18届上海大学程序设计联赛春季赛暨高校网络友谊赛的主要内容,如果未能解决你的问题,请参考以下文章
“科大讯飞杯”第18届上海大学程序设计联赛春季赛暨高校网络友谊赛
“科大讯飞杯”第18届上海大学程序设计联赛春季赛暨高校网络友谊赛
“科大讯飞杯”第18届上海大学程序设计联赛春季赛暨高校网络友谊赛(C~D)
“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛 I.丢史蒂芬妮