AtCoder Beginner Contest 224题解 A-G

本文详细解析了AtCoder Beginner Contest 224的A-G题目,涵盖签到题、简单题、中等题和高级题。包括字符串判断、矩阵性质、图形操作、动态规划等算法,适合编程竞赛爱好者学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

AtCoder Beginner Contest 134 是一场 AtCoder 的入门级比赛,以下是每道题的简要题解: A - Dodecagon 题目描述:已知一个正十二边形的边长,求它的面积。 解题思路:正十二边形的内角为 $150^\circ$,因此可以将正十二边形拆分为 12 个等腰三角形,通过三角形面积公式计算面积即可。 B - Golden Apple 题目描述:有 $N$ 个苹果和 $D$ 个盘子,每个盘子最多可以装下 $2D+1$ 个苹果,求最少需要多少个盘子才能装下所有的苹果。 解题思路:每个盘子最多可以装下 $2D+1$ 个苹果,因此可以将苹果平均分配到每个盘子中,可以得到最少需要 $\lceil \frac{N}{2D+1} \rceil$ 个盘子。 C - Exception Handling 题目描述:给定一个长度为 $N$ 的整数序列 $a$,求除了第 $i$ 个数以外的最大值。 解题思路:可以使用两个变量 $m_1$ 和 $m_2$ 分别记录最大值和次大值。遍历整个序列,当当前数不是第 $i$ 个数时,更新最大值和次大值。因此,最后的结果应该是 $m_1$ 或 $m_2$ 中较小的一个。 D - Preparing Boxes 题目描述:有 $N$ 个盒子和 $M$ 个物品,第 $i$ 个盒子可以放入 $a_i$ 个物品,每个物品只能放在一个盒子中。现在需要将所有的物品放入盒子中,每次操作可以将一个盒子内的物品全部取出并分配到其他盒子中,求最少需要多少次操作才能完成任务。 解题思路:首先可以计算出所有盒子中物品的总数 $S$,然后判断是否存在一个盒子的物品数量大于 $\lceil \frac{S}{2} \rceil$,如果存在,则无法完成任务。否则,可以用贪心的思想,每次从物品数量最多的盒子中取出一个物品,放入物品数量最少的盒子中。因为每次操作都会使得物品数量最多的盒子的物品数量减少,而物品数量最少的盒子的物品数量不变或增加,因此这种贪心策略可以保证最少需要的操作次数最小。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值