给你正整数 N 和 M 。
打印 N 行。
如果是 i≤M ,则 i /th行 (1≤i≤N) 应包含 “OK”,否则应包含 “Too Many Requests”。
思路
语法题,所以就做完了
代码
1 2 3 4 5 6 7 8 9 10 11 12
#include<bits/stdc++.h> usingnamespace std; #define int long long signedmain() { int n, m; cin >> n >> m; for (int i = 1; i <= n; i++) { cout << (i <= m ? "OK" : "Too Many Requests") << '\n'; } return0; }
#include<bits/stdc++.h> usingnamespace std; #define int long long signedmain() { int n, m; cin >> n >> m; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } int cnt = accumulate(a.begin(), a.end(), 0LL); for (int i = 0; i < n; i++) { if (cnt - a[i] == m) { cout << "Yes"; return0; } } cout << "No"; return0; }
C.Odd One Subsequence
题目描述
给你一个长度为 N , A=(A1,A2,…,AN) 的整数序列。
求满足以下条件的整数 (i,j,k) 满足 1\leq i<j<k\leq N 的三元组的个数:
#include<bits/stdc++.h> usingnamespace std; #define int long long signedmain() { int n, m, c; cin >> n >> m >> c; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } sort(a.begin(), a.end()); vector<int> pos; map<int, int> cnt; for (int i = 0; i < n; i++) { if (pos.empty() || pos.back() != a[i]) { pos.push_back(a[i]); } cnt[a[i]]++; } vector<int> v1, v2; vector<int> pre; pre.push_back(0); for (int i = 0; i < 2 * pos.size(); i++) { v1.push_back(pos[i % pos.size()] + (i >= pos.size() ? m : 0)); v2.push_back(cnt[pos[i % pos.size()]]); pre.push_back(pre.back() + v2[i]); } int ans = 0; for (int i = 0; i < pos.size(); i++) { int tp = (i == pos.size() - 1) ? pos[0] + m : pos[i + 1]; tp -= pos[i]; int l = i + 1, r = i + 1 + pos.size(), res = -1; while (l <= r) { int mid = (l + r) / 2; if (pre[mid + 1] - pre[i + 1] >= c) { res = mid; r = mid - 1; } else { l = mid + 1; } } if (res == -1) { continue; } ans += tp * (pre[res + 1] - pre[i + 1]); } cout << ans; return0; }
E.Hit and Away
题目描述
给你一个简单相连的无向图 G ,其中有 N 个顶点和 M 条边。 G 的顶点和边分别编号为顶点 1,2,…,N 和边 1,2,…,M ,边 i 连接顶点 Ui 和 Vi 。
在时间 1 中,您可以在边连接的顶点之间双向移动。
此外,每个顶点要么是安全的,要么是危险的,这种状态由长度为 N 的字符串 S 表示,字符串由 S 和 D 组成。
具体来说,当 S 的 i -th 字符 (1≤i≤N) 是 S 时,顶点 i 是安全的;当 i 是 D 时,顶点 i 是危险的。
可以保证至少有两个安全顶点和至少一个危险顶点。