AtCoder Beginner Contest 224(A-G)
知识点整理:
题号 | 知识点 | 备注 |
---|---|---|
A | 无 | |
B | 无 | |
C | 数学 | |
D | BFS | 八数码问题变种 |
E | 动态规划 | 329. 矩阵中的最长递增路径 变种 |
F | 概率期望,算贡献,快速幂,逆元 | |
G | 数学,推公式 | |
H | 最小费用最大流 |
签到题、简单题
A - Tires
判断一个字符串是不是以er
或ist
结尾。
直接做即可
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
int n = s.size();
if (n >= 2 && s[n-1]=='r' && s[n-2]=='e') puts("er");
else if (n >= 3 && s[n-3]=='i' && s[n-2]=='s' && s[n-1] == 't')
puts("ist");
return 0;
}
B - Mongeness
给你个矩阵,判断是否满足任意两个点 ( i 1 , j 1 ) (i1, j1) (i1,j1) 和 ( i 2 , j 2 ) (i2, j2) (i2,j2) 满足
A i 1 , j 1 + A i 2 , j 2 ≤ A i 2 , j 1 + A i 1 , j 2 A_{i1,j1}+A_{i2,j2}\leq A_{i2,j1}+A_{i1,j2} Ai1,j1+Ai2,j2≤Ai2,j1+Ai1,j2
很简单, N N N的范围是50, 直接 O ( N 4 ) O(N^4) O(N4) 模拟
看官方题解,这种类型的矩阵叫Monge matrix, 还有一种性质可以 O ( n 2 ) O(n^2) O(n2)做
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 100;
int h, w;
ll A[N][N];
int main() {
cin >> h >> w;
for (int i = 1; i <= h; i++)
for (int j = 1; j <= w; j++)
cin >> A[i][j];
bool flag = true;
for (int i1 = 1; i1 <= h; i1++)
for (int j1 = 1; j1 <= w; j1++)
for (int i2 = i1 + 1; i2 <= h; i2++)
for (int j2 = j1 + 1; j2 <= w; j2++)
if (a[i1][j1] + a[i2][j2] > a[i2][j1] + a[i1][j2])
flag = false;
puts(flag ? "Yes" : "No");
return 0;
}
C - Triangle?
给你 n n n个点,判断任取3个点可以构成多少个三角形。
看到 n ≤ 300 n\leq 300 n≤300 , 就知道可以三重循环做,判断三个点是否共线即可。
如果三个点坐标分别是 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) (x_1, y_1),(x_2,y_2),(x_3,y_3) (x1,y1),(x2,y2),(x3,y3), 那么需要满足他们的斜率一致,即 y 2 − y 1 x 2 − x 1 = y 3 − y 2 x 3 − x 2 \frac{y_2-y_1}{x_2-x_1}=\frac{y_3-y_2}{x_3-x_2} x2−x