2018-10-7 Atcoder 刷题日记

Atcoder Beginner 068 - C

题意:

有 n 个岛屿,k 条船,这 k 条船分别连接 ai 岛屿和 bi 岛屿,问能否只是用两条船就从 岛屿1到达岛屿 n

思路:

这题我使用set处理的,当岛屿起点为1的时候,将其从岛屿1出发所能到达的所有岛屿 P 存进set中,然后再看到达终点是岛屿

n 的这些船的起点,如果这些起点有在set中的,那就成立了,即满足 1 -> P -> n,仅用两条船。

AC代码:

#include <bits/stdc++.h>
using namespace std;
const int maxx = 2e5 + 7;
int n, k;
int a[maxx], b[maxx];
set <int> sst;

int main() {
    bool flg = 0;
    cin >> n >> k;
    for(int i = 1; i <= k; i++) cin >> a[i] >> b[i];
    for(int i = 1; i <= k; i++) {
        if(a[i] == 1) sst.insert(b[i]); // 存进set
    }
    for(int i = 1; i <= k; i++) {
        if(b[i] == n) {
            if(sst.find(a[i]) != sst.end()) { // 在set中查找
                flg = 1; break;
            }
        }
    }
    if(flg) puts("POSSIBLE");
    else puts("IMPOSSIBLE");
}

 

Atcoder Beginner 112 - D

题意:

给你一个数 m,问 m 能否被拆成 n 部分的和,即 m = a1 + a2 + ... + an。求这n个数的gcd最大是多少。

思路:

所求的是这些数的最大公约数 x,换句话说,这 n个数,都是x的倍数,而这 n个数的和又是 m,那就说明 m也是 x 的倍数,那么我要的答案一定是 m的因子,而且要尽可能大,但是不是说越大越好,这个尽可能大的因子,必须合法,那么怎么判断它合法与否呢,那就是,我这个 m 得能分成 n 份。也就是说我这个因子,不能大于m / n,如果我选的这个因子 x,比 m / n 大,即 x > m / n,  即 m / x < n,这就说明我没法分成n份了,所以我只需要在 m / n 内选出 m的最大因子就好了。

AC代码:

#include <bits/stdc++.h>
using namespace std;
int n, m;

int main() {
    while(scanf("%d %d", &n, &m) != EOF) {
        int ans = 0;
        if(m % n == 0) ans = m / n;
        else {
            int t = m / n;
            for(int i = 1; i <= t; i++) {
                if(m % i == 0) ans = max(ans, i);
            }
        }
        printf("%d\n", ans);
    }
}

 

### AtCoder编程库概述 AtCoder是一个面向全球程序员的在线竞赛平台,提供多种难度级别的比赛和练习目。对于希望提升算法能力的学习者来说,AtCoder提供了丰富的资源来满足不同层次的需求。 #### 初学者友好型赛事——Beginner Contest系列 针对初学者设计的比赛称为“Beginner Contest”,简称ABC[^1]。这类比赛通常包含若干道由易到难排列的任务,适合那些刚开始接触算法竞赛的人群参与并学习。每场比赛都会设置A至E/F等级别的挑战项目,其中: - A/B类问较为基础,主要考察基本语法理解和简单逻辑思考; - C/D类则会涉及到一些常见的数据结构或经典算法的应用; - 而E/F级别往往需要更深入的理解以及创造性解决问的能力[^2]。 #### 数学推理与组合数专训练 除了常规赛外,还有专门围绕特定知识点展开的主活动。例如,在一次比赛中出现了关于数学推理加组合数计算的问(E级),这不仅考验选手们对离散数学概念掌握程度,同时也检验其能否灵活运用这些理论解决实际编码难[^3]。 #### 进阶挑战——F级别高难度试解析 随着技能平提高,可以尝试更高难度的F级别目。此类问可能涉及复杂的数据处理技巧或是新颖独特的解法思路。通过研究过往优秀参赛者的解答案例(如ABCF205),能够帮助加深理解,并启发新的思维方式去应对更加棘手的技术挑战[^4]。 ```python # Python 示例代码用于求解某个具体问(假设为斐波那契序列) def fibonacci(n): if n <= 0: return 0 elif n == 1: return 1 else: a, b = 0, 1 for _ in range(2, n + 1): a, b = b, a + b return b ``` 为了更好地利用AtCoder进行有效率地练习,建议先从简单的Beginner Contest入手,逐步积累经验后再向更具挑战性的领域迈进。同时也要注重总结归纳常见模式和技术要点,这样才能不断提高自己的竞争力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值