A - 善良的xmy
直接输出就可以啦,签到题.
参考代码:
#include <bits/stdc++.h>
int main() {
printf("xmy zui shan liang.");
return 0;
}
B-wenju丢失身份证
注意格式化输入.
参考代码:
#include <bits/stdc++.h>
int main() {
int h1, m1, s1, h2, m2, s2;
scanf("%d:%d:%d - %d:%d:%d", &h1, &m1, &s1, &h2, &m2, &s2);
int n, m;
n = h1 * 3600 + m1 * 60 + s1;
m = h2 * 3600 + m2 * 60 + s2;
printf("%d\n", m - n);
return 0;
}
C-温巨在装萌新
签到题.
参考代码:
#include <bits/stdc++.h>
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::string s;
std::cin >> s;
if (s.substr(0, 10) == "1134728508") {
std::cout << "Yes\n";
} else {
std::cout << "No\n";
}
return 0;
}
D-白神遥的忧伤
直接计算即可,但是数据范围貌似除了问题,n 和 m要定义成long long类型,我因此WA了一发.
参考代码:
#include <bits/stdc++.h>
using i64 = long long;
template <typename T>
inline void read(T &f) {
f = 0; T fu = 1; char c = getchar();
while (c < '0' || c > '9') { if (c == '-') { fu = -1; } c = getchar(); }
while (c >= '0' && c <= '9') { f = (f << 3) + (f << 1) + (c & 15); c = getchar(); }
f *= fu;
}
int main() {
int t;
read(t);
while (t--) {
i64 n, m;
read(n), read(m);
i64 ans = n * m;
if (n == 5 && m == 8) {
ans = 35;
} else if (n == 8 && m == 5) {
ans = 35;
} else {
ans = n * m;
}
printf("%lld\n", ans);
}
return 0;
}
E-负债的东爱璃Lovely
签到题.
参考代码:
#include <bits/stdc++.h>
using i64 = long long;
template <typename T>
inline void read(T &f) {
f = 0; T fu = 1; char c = getchar();
while (c < '0' || c > '9') { if (c == '-') { fu = -1; } c = getchar(); }
while (c >= '0' && c <= '9') { f = (f << 3) + (f << 1) + (c & 15); c = getchar(); }
f *= fu;
}
int main() {
int n, m;
read(n), read(m);
std::vector<int> a(n);
int cnt = 0;
for (int i = 0; i < n; i++) {
read(a[i]);
cnt += a[i];
}
printf("%d\n", std::max(0, m - cnt * 12) * 2);
//保证结果不为负数
return 0;
}
F-清楚姐姐机器人化
模拟.
参考代码:
#include <bits/stdc++.h>
std::string s;
int n, ans, cnt;
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> n;
for (int i = 0; i < n; i++) {
std::cin >> s;
if (s.substr(0,9) == "234186389") {
//是清楚学姐发的
cnt++;
if (s.find("competition") != std::string::npos)
ans++;
//跟比赛有关
}
}
std::cout << ans - (cnt - ans);
return 0;
}
G-在考研的卷王
用std::map轻松搞定.
参考代码:
#include <bits/stdc++.h>
template <typename T>
inline void read(T &f) {
f = 0; T fu = 1; char c = getchar();
while (c < '0' || c > '9') { if (c == '-') { fu = -1; } c = getchar(); }
while (c >= '0' && c <= '9') { f = (f << 3) + (f << 1) + (c & 15); c = getchar(); }
f *= fu;
}
int main() {
int n; read(n);
std::vector<int> a(n);
std::map<int, int> mp;
for (int i = 0; i < n; i++) {
read(a[i]);
mp[a[i]]++;
}
for (auto it : mp) {
printf("%d %d\n", it.first, it.second);
}
return 0;
}
H-想不到出什么的xmy,出了个极简版本机器人
还是std::map.
参考代码:
#include <bits/stdc++.h>
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::map<std::string, std::string> mp;
std::map<std::string, bool> vis;
int n, m;
std::cin >> n >> m;
for (int i = 0; i < n; i++) {
std::string s, t;
std::cin >> s >> t;
mp[s] = t;
mp[t] = s;
vis[t] = true;
vis[s] = true;
}
for (int i = 0; i < m; i++) {
std::string s;
std::cin >> s;
if (vis[s]) {
std::cout << mp[s] << "\n";
} else {
std::cout << "jlstxdy\n";
}
}
return 0;
}
I-质数筛
x <= 1e6,直接试除法即可.
参考代码:
#include <bits/stdc++.h>
bool isprime(int n)
{
if (n == 0 || n == 1)
return false;
if (n == 2 || n == 3 || n == 5)
return true;
if (n % 2 == 0 || n % 3 == 0)
return false;
for (int i = 5; i * i <= n; i += 6)
if (n % i == 0 || n % (i + 2) == 0)
return false;
return true;
}
template <typename T>
inline void read(T &f) {
f = 0; T fu = 1; char c = getchar();
while (c < '0' || c > '9') { if (c == '-') { fu = -1; } c = getchar(); }
while (c >= '0' && c <= '9') { f = (f << 3) + (f << 1) + (c & 15); c = getchar(); }
f *= fu;
}
int main() {
int n, k;
read(n), read(k);
for (int i = 0; i < k; i++) {
int x;
read(x);
if (isprime(x) && x <= n) {
printf("yes\n");
} else {
printf("no\n");
}
}
return 0;
}
J-质数筛II
数据太大,貌似只能用std::map来标记了.
参考代码:
#include <bits/stdc++.h>
#define lowbit(x) (x & (-x))
using i64 = long long;
constexpr int MOD = 998244353, N = 2e6 + 10, inf = 2e9;
int prime[N], idx;
std::map<int, bool> v;
void GetPrime(int n) {
for (int i = 2; i <= n; i++) {
if (v[i]) continue;
prime[idx++] = i;
for (int j = i; j <= n/i; j++) v[i * j] = 1;
}
}
template <typename T>
inline void read(T &f) {
f = 0; T fu = 1; char c = getchar();
while (c < '0' || c > '9') { if (c == '-') { fu = -1; } c = getchar(); }
while (c >= '0' && c <= '9') { f = (f << 3) + (f << 1) + (c & 15); c = getchar(); }
f *= fu;
}
int main() {
int n; read(n);
n = std::sqrt(n);
GetPrime(n);
if (n < 2) {
printf("-1\n");
}
for (int i = 0; i < idx; i++) {
printf("%lld\n", 1LL * prime[i] * prime[i]);
}
return 0;
}
K-小雪买巧克力
暴力枚举.
参考代码:
#include <bits/stdc++.h>
using i64 = long long;
template <typename T>
inline void read(T &f) {
f = 0; T fu = 1; char c = getchar();
while (c < '0' || c > '9') { if (c == '-') { fu = -1; } c = getchar(); }
while (c >= '0' && c <= '9') { f = (f << 3) + (f << 1) + (c & 15); c = getchar(); }
f *= fu;
}
int main() {
int n; read(n);
i64 max = -1 * 1LL * inf;
int first = n / 28, second = n / 25, third = n / 20;
int res1, res2, res3;
for (int i = 0; i <= first; i++) {
for (int j = 0; j <= second; j++) {
for (int k = 0; k <= third; k++) {
i64 sum = i * 28 + j * 25 + k * 20;
if (sum <= n) {
i64 ans = i * 70 + j * 50 + k * 30;
if (ans > max) {
max = ans;
res1 = i, res2 = j, res3 = k;
}
}
}
}
}
printf("85%:%d\n75%:%d\n65%:%d\n", res1, res2, res3);
return 0;
}
L-阶乘之前缀和
简单的前缀和板子,不过vector数组为什么算不对?有懂哥指点一下么,呜呜呜.
参考代码:
#include <bits/stdc++.h>
#define lowbit(x) (x & (-x))
using i64 = long long;
constexpr int MOD = 998244353, N = 2e6 + 10, inf = 2e9;
template <typename T>
inline void read(T &f) {
f = 0; T fu = 1; char c = getchar();
while (c < '0' || c > '9') { if (c == '-') { fu = -1; } c = getchar(); }
while (c >= '0' && c <= '9') { f = (f << 3) + (f << 1) + (c & 15); c = getchar(); }
f *= fu;
}
i64 a[1050], sum[1050], f[1050], fact[17];
int main() {
int n, m;
read(n), read(m);
for (int i = 1; i <= 15; i++) {
fact[i] = 1;
}
for (int i = 1; i <= 15; i++) {
for (int j = 1; j <= i; j++) {
fact[i] *= j;
}
}//init
for (int i = 1; i <= n; i++) {
read(a[i]);
}
for (int i = 1; i <= n; i++) {
f[i] = fact[a[i]];
}
for (int i = 1; i <= n; i++) {
sum[i] = sum[i - 1] + f[i];
}
i64 ans = 0;
for (int i = 1; i <= m; i++) {
int l, r;
read(l), read(r);
ans += sum[r] - sum[l - 1];
}
printf("%lld\n", ans);
return 0;
}
M-高精度小数求和
注意多余0的处理即可.
参考代码:
#include <bits/stdc++.h>
#define lowbit(x) (x & (-x))
using i64 = long long;
constexpr int MOD = 998244353, N = 2e6 + 10, inf = 2e9;
std::vector<int> A, B, a, b;
std::vector<int> add(std::vector<int> a, std::vector<int> b) {
std::vector<int> c;
int t = 0;
for (int i = 0; i < a.size() || i < b.size(); i++) {
if (i < a.size()) t += a[i];
if (i < b.size()) t += b[i];
c.push_back(t % 10);
t /= 10;
}
if (t) c.push_back(t);
return c;
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::string n, m;
std::cin >> n >> m;
bool flag = true;
for (int i = n.size() - 1; i >= 0; i--) {
if (n[i] == '.') {
flag = false; continue;
}
if (flag) a.push_back(n[i] - '0');
else A.push_back(n[i] - '0');
}
flag = true;
for (int i = m.size() - 1; i >= 0; i--)
{
if (m[i] == '.') {
flag = false; continue;
}
if (flag) b.push_back(m[i] - '0');
else B.push_back(m[i] - '0');
}
while (a.size() != b.size())
{
if (a.size() > b.size()) b.insert(b.begin(), 0);
if (a.size() < b.size()) a.insert(a.begin(), 0);
}
auto C = add(A, B), c = add(a, b);
if (c.size() > a.size()) {
std::vector<int> temp;
temp.push_back(c[c.size() - 1]);
C = add(C, temp);
c.erase(c.end() - 1);
}
while (c.size() > 1 && c.front() == 0) c.erase(c.begin());
for (int i = C.size() - 1; i >= 0; i--) std::cout << C[i];
std::cout << ".";
for (int i = c.size() - 1; i >= 0; i--) std::cout << c[i];
return 0;
}