AtCoder Beginner Contest 224题解 A-G

AtCoder Beginner Contest 224(A-G)

知识点整理:

题号 知识点 备注
A
B
C 数学
D BFS 八数码问题变种
E 动态规划 329. 矩阵中的最长递增路径 变种
F 概率期望,算贡献,快速幂,逆元
G 数学,推公式
H 最小费用最大流

签到题、简单题


A - Tires

判断一个字符串是不是以erist结尾。

直接做即可

#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,j2Ai2,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 n300 , 就知道可以三重循环做,判断三个点是否共线即可。

如果三个点坐标分别是 ( 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} x2x

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值