上海市计算机学会竞赛平台 | 2022 二星级挑战
-
-
- 康托表
- 打印K型
- 计算天数(Python)
- 黑色星期五
- 分割队伍
- 调配问题(一)
- 阶乘的余数
- 驼峰与蛇
- 四方定理
- 数根
- IP地址
- 最年长的人
- 选科组合
- 合成游戏
- 循环节的判定
- 中心对称数
- 扫雷
- 永恒的生命游戏
- 计算GPA
- 九宫格键盘
- 闯关升级
- 三倍游戏
- 救援争先
- 数字验证
- 评测队列
- 买二送一
- 考试排名
- 巧妙的数
- 三倍子串
- 没有考试的天数
-
此文章仅供学习交流,不得抄袭刷分!!!
康托表
#include<iostream>
using namespace std;
int a, b;
int main() {cin >> a >> b;cout << (1 + a + b - 1 - 1)*(a + b - 1 - 1) / 2 + ((a + b) % 2 ? a : b);return 0;
}
打印K型
#include<iostream>
using namespace std;
int n;
int main() {cin.tie(0);cout.tie(0);cin >> n;for (int i = 0; i < n; ++i) {cout << "**";for (int j = 0; j < n - i; ++j)cout << " ";for (int j = 0; j < n - i; ++j)cout << "*";cout << endl;}cout << "***" << endl;for (int i = n - i - 1; i >= 0; --i) {cout << "**";for (int j = 0; j < n - i; ++j)cout << " ";for (int j = 0; j < n - i; ++j)cout << "*";cout << endl;}return 0;
}
计算天数(Python)
sum = 0
year, month, day = input().split('-')
year = int(year)
month = int(month)
day = int(day)
dayNum = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]if year % 400 == 0 or year % 4 == 0 and year % 100 != 0:dayNum[3] += 1
for i in range(month):sum += int(dayNum[i])
print(sum + day)
黑色星期五
#include<iostream>
using namespace std;int days[13] = {0, 12, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};
int y, w, cnt;
int main() {cin >> y >> w;cnt = w;if (y % 400 == 0 || y % 4 == 0 && y % 100 != 0)days[3]++;for (int i = 1; i <= 12; i++) {cnt = (cnt + days[i]) % 7;if (cnt == 5)cout << i << endl;}return 0;
}
分割队伍
#include <iostream>
#include <cmath>
#include <climits>
using namespace std;int n, a[100001], s[100001], sum, minn = INT_MAX;int main() {cin.tie(0);cin >> n;for (int i = 1; i <= n; i ++) {cin >> a[i];s[i] = s[i - 1] + a[i];sum += a[i];}for (int i = 1; i <= n - 1; i ++)minn = min(minn, abs(sum - s[i] - s[i]));cout << minn;return 0;
}
调配问题(一)
#include <cmath>
#include <iostream>
using namespace std;
int n;
long long s = 0, ans = 0, a;
int main() {cin.tie(0);cin >> n;for (int i = 0; i < n; ++i) {cin >> a;s += a;ans += abs(s);}cout << ans;return 0;
}
阶乘的余数
#include <iostream>
using namespace std;
long long n, m, sum = 1;
int main() {cin.tie(0);cin >> n >> m;for (int i = 1; i <= n; i++) {sum *= i;sum %= m;}cout << sum % m;return 0;
}
驼峰与蛇
#include <iostream>
#include <cstring>
using namespace std;
char name[1000001];
int main() {int i, len;cin >> name;len = strlen(name);for (i = 0; i < len; ++i) {if (name[i + 1] >= 'A' && name[i + 1] <= 'Z' && (name[i] >= 'A' && name[i] <= 'Z')) {name[i] = tolower(name[i]);cout << name[i] << "_";} else if (name[i + 1] >= 'A' && name[i + 1] <= 'Z')cout << name[i] << "_";else if (name[i] >= 'A' && name[i] <= 'Z') {name[i] = tolower(name[i]);cout << name[i];} else {cout << name[i];}}return 0;
}
四方定理
#include <iostream>
#include <cmath>
using namespace std;
long long n, i, j, k, l;
int main() {cin.tie(0);cin >> n;double f = int(sqrt(n));for (i = 0; i <= f; ++i)for (j = i; j <= f; ++j)for (k = j; k <= f; ++k)for (l = k; l <= f; ++l)if ((i * i + j * j + k * k + l * l) == n)cout << i << " " << j << " " << k << " " << l << endl;return 0;
}
数根
#include <iostream>
using namespace std;
char c;
long long sum;
int main() {while (cin >> c)sum += c - '0';cout << (sum - 1) % 9 + 1;return 0;
}
IP地址
#include <iostream>
using namespace std;int main() {for (int i = 1; i <= 4; i ++) {char ch;int num = 0;for (int j = 1; j <= 8; j ++) {cin >> ch;num = num * 2 + ch - '0';}cout << num;if (i != 4) cout << '.';}return 0;
}
最年长的人
#include<cstdio>
#include<iostream>
using namespace std;struct data {int year;int month;int day;
};bool datass(data x, data y) {if (x.year == y.year) {if (x.month == y.month)return x.day < y.day;elsereturn x.month < y.month;} elsereturn x.year < y.year;
}int main() {int n;struct data a[1000000];cin >> n;for (int i = 0; i < n; i++)scanf("%d-%d-%d", &a[i].year, &a[i].month, &a[i].day);sort(a, a + n, datass);printf("%04d-%02d-%02d", a[0].year, a[0].month, a[0].day);return 0;
}
选科组合
#include <iostream>
using namespace std;
int a[6], maxx = 0, mid = 0, minn = 0;
int main() {for (int i = 0; i < 6; ++i) {cin >> a[i];if (a[i] > maxx) {minn = mid;mid = maxx;maxx = a[i];} else if (a[i] > mid) {minn = mid;mid = a[i];} else if (a[i] > minn)minn = a[i];}cout << maxx + mid + minn;return 0;
}
合成游戏
#include<iostream>
using namespace std;
long long n, m, ans = 0, power = 1;
int main() {cin.tie(0);cin >> n;for (int i = 0; i < n; i++) {cin >> m;ans += m;}while (power <= ans)power *= 2;cout << power / 2;return 0;
}
循环节的判定
#include<iostream>
using namespace std;
int main() {string s, a, c = "";cin >> s >> a;int len = s.length() / a.length();for (int i = 0; i < len; i++)c += a;if (s == c) {cout << "Yes";return 0;}cout << "No";return 0;
}
中心对称数
#include<bits/stdc++.h>
using namespace std;
string a;
char b[10];
int main()
{cin>>a;b[1]='1';b[8]='8';b[0]='0';b[6]='9';b[9]='6';int i,n=a.size();for(i=0;i<n;i++){if(a[i]=='2'||a[i]=='3'||a[i]=='4'||a[i]=='5'||a[i]=='7'){printf("Not a strobogrammatic number");return 0;}else if(!(a[i]==b[a[n-i-1]-'0'])){printf("Not a strobogrammatic number");return 0;}}printf("Strobogrammatic number");return 0;
}
扫雷
#include <iostream>
using namespace std;int n, m;
char a[105][105];int search(int x, int y) {int ans = 0;for (int i = x - 1; i <= x + 1; i++)for (int j = y - 1; j <= y + 1; j++)if (a[i][j] == '*')ans++;return ans;
}int main() {cin >> n >> m;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)cin >> a[i][j];for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (a[i][j] == '*')cout << '*';elsecout << search(i, j);}cout << endl;}return 0;
}
永恒的生命游戏
#include <iostream>
using namespace std;
int n, m;
char map[105][105];
int main() {cin.tie(0);cin >> n >> m;for (int i = 1; i <= n; ++i)for (int j = 1; j <= m; ++j)cin >> map[i][j];for (int i = 1; i <= n; ++i) {for (int j = 1; j <= m; ++j) {int x = 0;if (map[i][j] == '*') {if (map[i + 1][j] == '*')++x;if (map[i + 1][j - 1] == '*')++x;if (map[i + 1][j + 1] == '*')++x;if (map[i - 1][j - 1] == '*')++x;if (map[i - 1][j + 1] == '*')++x;if (map[i][j + 1] == '*')++x;if (map[i][j - 1] == '*')++x;if (map[i - 1][j] == '*')++x;if (x < 2 || x > 3) {cout << "Other";return 0;}} else {if (map[i + 1][j] == '*')++x;if (map[i + 1][j - 1] == '*')++x;if (map[i + 1][j + 1] == '*')++x;if (map[i - 1][j - 1] == '*')++x;if (map[i - 1][j + 1] == '*')++x;if (map[i][j + 1] == '*')++x;if (map[i][j - 1] == '*')++x;if (map[i - 1][j] == '*')++x;if (x == 3) {cout << "Other";return 0;}}}}cout << "Still life";return 0;
}
计算GPA
#include<iostream>
#include<string>using namespace std;int main() {string gpa;float count = 0 , len[2] = {0, 0};cin >> gpa;len[0] = gpa.size() + 1;for (int i = 0; i < len[0]; ++i)if (gpa[i] == 'A' || gpa[i] == 'B' || gpa[i] == 'C' || gpa[i] == 'D')len[1]++;for (int i = 0; i < len[0]; ++i) {if (gpa[i] == 'A')count = count + 4;else if (gpa[i] == 'B')count = count + 3;else if (gpa[i] == 'C')count = count + 2;else if (gpa[i] == 'D')count = count + 1;else if (gpa[i] == '+')count = count + 0.3;else if (gpa[i] == '-')count = count - 0.3;}float score = count / len[1];printf("%.2f", score);return 0;
}
九宫格键盘
#include <iostream>
#include <string>
using namespace std;int main() {string s;int count = 0, len;getline(cin, s);len = s.length();for (int i = 0; i < len; ++i) {if (s[i] == 'a' || s[i] == 'd' || s[i] == 'g' || s[i] == 'j' || s[i] == 'm' || s[i] == 'p' || s[i] == 't'|| s[i] == 'w' || s[i] == ' ')count++;else if (s[i] == 'b' || s[i] == 'e' || s[i] == 'h' || s[i] == 'k' || s[i] == 'n' || s[i] == 'q' || s[i] == 'u'|| s[i] == 'x')count += 2;else if (s[i] == 'c' || s[i] == 'f' || s[i] == 'i' || s[i] == 'l' || s[i] == 'o' || s[i] == 'r' || s[i] == 'v'|| s[i] == 'y')count += 3;else if (s[i] == 'z' || s[i] == 's')count += 4;}cout << count;return 0;
}
闯关升级
#include<iostream>
#include<algorithm>
using namespace std;int main() {int n, t, x, num_a = 0, num_b, ans, sum_a[100010], sum_b[100010];cin >> n >> t;//前缀和for (int i = 1; i <= n; ++i)cin >> x, sum_a[i] += sum_a[i - 1] + x;for (int i = 1; i <= n; ++i)cin >> x, sum_b[i] += sum_b[i - 1] + x;while (sum_b[num_b + 1] <= t && num_b + 1 <= n)num_b++;ans = max(ans, num_b);while (sum_a[num_a + 1] <= t && num_a + 1 <= n) {num_a++;while (sum_a[num_a] + sum_b[num_b] > t && num_b > 0)num_b--;ans = max(ans, num_a + num_b);}cout << ans << endl;return 0;
}
三倍游戏
#include <iostream>
using namespace std;
long long i, n, a[100001], c[100001], ans;
int main() {cin >> n;for (i = 1; i <= n; i++) {cin >> a[i];c[a[i] % 3]++; // 计算每张卡片数字对3取余的余数相同的卡片个数}cout << min(c[1], c[2]) + c[0] / 2; // 最高得分return 0;
}
救援争先
#include <iostream>
#include <algorithm>
using namespace std;int n;
const int maxn = 1010;
struct team {int leave, arrive, id;
} a[maxn];bool cmp(team a, team b) {if (a.arrive < b.arrive)return true;if (a.arrive == b.arrive) {if (a.leave < b.leave)return true;if (a.leave == b.leave)if (a.id < b.id)return true;}return false;
}int main() {cin >> n;for (int i = 1; i <= n ; ++i) {int h, m;char ch;cin >> h >> ch >> m;a[i].leave = h * 60 + m;cin >> h >> ch >> m;a[i].arrive = a[i].leave + h * 60 + m;a[i].id = i;}sort(a + 1, a + 1 + n, cmp);for (int i = 1; i <= n; ++i)cout << a[i].id << endl;return 0;
}
数字验证
#include <bits/stdc++.h>
using namespace std;
string s;
int cnt = 0;
int main() {cin >> s;if (s[0] == '+' || s[0] == '-') s = s.substr(1);if (s == ".") {cout << "Invalid";return 0;}for (int i = 0; i < s.size(); i ++) {if (s[i] == '.') {cnt ++ ;if (cnt > 1) {cout << "Invalid";return 0;}} else if (s[i] < '0' || s[i] > '9') {cout << "Invalid";return 0;}}cout << "Valid";return 0;
}
评测队列
#include <iostream>
using namespace std;int a[200005], b[200005], n;
long long ans, t;
int main() {cin >> n;for (int i = 1; i <= n; i++)cin >> a[i] >> b[i];ans = t = 0;for (int i = 1; i <= n; i++) {t += a[i];ans = max(ans, t);ans += b[i];}cout << ans;return 0;
}
买二送一
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
long long sum;
int n, t;
bool cmp(int a, int b) {return a > b;
}
int main() {vector<int> v;cin >> n;for (int i = 0; i < n; ++i) {cin >> t;v.push_back(t);}sort(v.begin(), v.end(), cmp);if (v.size() >= 3) {while (v.size() >= 3) {sum += v[0] + v[1];if (v.size() >= 3)v.erase(v.begin(), v.begin() + 3);}}for (vector<int>::iterator it = v.begin(); it != v.end(); ++it) {sum += *it;}cout << sum;return 0;
}
考试排名
#include <iostream>
#include <algorithm>
using namespace std;int n;
struct classes {int a[4];double b[4];int num, id;
} cls[10005];bool cmp(classes x, classes y) {if (x.b[0] > y.b[0]) return true;if (x.b[0] == y.b[0]) {if (x.b[1] > y.b[1]) return true;if (x.b[1] == y.b[1]) {if (x.b[2] > y.b[2]) return true;if (x.b[2] == y.b[2]) {if (x.b[3] > y.b[3]) return true;if (x.b[3] == y.b[3]) {if (x.num > y.num) return true;if (x.num == y.num) {if (x.id < y.id) return true;}}}}}return false;
}int main() {cin.tie(0);cin >> n;for (int i = 1; i <= n; i ++) {string s;cin >> s;int len = s.size();for (int j = 0; j < len; j ++) {int t = s[j] - 'A';cls[i].a[t] ++;}for (int j = 0; j < 4; j ++) {cls[i].b[j] = cls[i].a[j] * 1.0 / len;}cls[i].num = len;cls[i].id = i;}sort(cls + 1, cls + 1 + n, cmp);for (int i = 1; i <= n; i ++) cout << cls[i].id << ' ';return 0;
}
巧妙的数
#include <iostream>
using namespace std;int main() {bool mt[10];int a[1010], n;char ch;while (cin >> ch) {a[++n] = ch - '0';mt[a[n]] = true;}for (int i = 2; i <= 9; ++i) {if (mt[i]) {int r = 0;for (int j = 1; j <= n; j ++) {r = (r * 10 + a[j]) % i;}if (r != 0) {cout << "not clever";return 0;}}}cout << "clever";return 0;
}
三倍子串
#include <iostream>
#include <cstring>
#include <cstdio>
#include <math.h>
#include <string>
#include <algorithm>
using namespace std;int main() {char str[1000005];while (scanf("%s", str) != EOF) {long long sum[3] = {0};int s = 0;int n = strlen(str);for (int i = 0; i < n; i++) {s += str[i] - '0';s %= 3;sum[s]++;}long long ans;ans = (sum[0] + 1) * sum[0] / 2 + sum[1] * (sum[1] - 1) / 2 + sum[2] * (sum[2] - 1) / 2;printf("%lld\n", ans);}return 0;
}
没有考试的天数
#include <iostream>
using namespace std;int gcd(int x, int y) {if (y == 0) return x;return gcd(y, x % y);
}int main() {int n, a, b, c;cin >> n >> a >> b >> c;int d = a / gcd(a, b) * b;int e = b / gcd(b, c) * c;int f = c / gcd(c, a) * a;int g = d / gcd(d, c) * c;cout << n - (n / a + n / b + n / c) + (n / d + n / e + n / f) - n / g;return 0;
}