T1:Nine
当 \(A+1 = B\) 且 \(A \% 3 = 1\) 时,说明 \(A\) 和 \(B\) 相邻
代码实现
a, b = map(int, input().split())
if a+1 == b and a%3 != 0:
print('Yes')
else:
print('No')
T2:Rotate
模拟
代码实现
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
using namespace std;
using P = pair<int, int>;
int main() {
int n;
cin >> n;
vector<string> a(n);
rep(i, n) cin >> a[i];
vector<P> ps;
rep(i, n-1) ps.emplace_back(0, i);
rep(i, n-1) ps.emplace_back(i, n-1);
rep(i, n-1) ps.emplace_back(n-1, n-1-i);
rep(i, n-1) ps.emplace_back(n-1-i, 0);
auto b = a;
int m = ps.size();
rep(mi, m) {
auto [i, j] = ps[mi];
auto [ni, nj] = ps[(mi+1)%m];
b[ni][nj] = a[i][j];
}
rep(i, n) cout << b[i] << '\n';
return 0;
}
T3:Medicine
对于第 \(i\) 天所吃的药的总和为 \(s_i\),我们可以将相同的 \(s_i\) 划分为一组
比如样例1:
1: 19
2: 10
3: 5
4: 5
5: 3
6: 3
7: 0
可以将 \(5, 5\) 划分为一组,\(3, 3\) 划分到一组,其他数单独为一组
考虑对序列 \((a_i, s_i)\) 按 \(a_i\) 的大小进行升序排序
可以发现,如果 \(s_{i+1} \neq s_i\),那么 \(s_{i+1}\) 一定在新的组中,我们只需考虑同一个 \(s_i\) 第一次出现的位置即可
于是,我们可以仅对序列 \((a_i, b_i)\) 按 \(a_i\) 的大小进行升序排序
在我们扫描序列 \((a_i, b_i)\) 时,可以通过当前组的 \(s\) 减去 \(b_i\) 就能得到新的一组的 \(s\)
代码实现
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
using namespace std;
using ll = long long;
using P = pair<int, int>;
int main() {
int n, k;
cin >> n >> k;
vector<P> ps;
ll tot = 0;
rep(i, n) {
int a, b;
cin >> a >> b;
ps.emplace_back(a, b);
tot += b;
}
if (tot <= k) {
puts("1");
return 0;
}
sort(ps.begin(), ps.end());
for (auto [a, b] : ps) {
tot -= b;
if (tot <= k) {
cout << a+1 << '\n';
return 0;
}
}
return 0;
}