AtCoder Beginner Contest 166 (A~E)

比赛链接:Here

AB水题

C - Peaks

题意:

  • 给出 n 个观察台的高度,以及 m 条边,定义“好观察台”:比所有直接相连的观测台都高

思路:

因为道路是双向的,互相判断一下即可

a &= bool 这个写法学习了

int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int n, m; cin >> n >> m;
    vector<int>h(n), st(n, 1);
    for (int &i : h) cin >> i;
    while (m--) {
        int a, b;
        cin >> a >> b, a -= 1, b -= 1;
        st[a] &= h[a] > h[b];
        st[b] &= h[b] > h[a];
    }
    int cnt = 0;
    for (int i = 0; i < n; ++i) cnt += st[i];
    cout << cnt;
}

D - I hate Factorization

题意:

  • 给出 X(1e9) 请问存在 (AB) 使得 A5B5=X

思路:

因为 A,B可取负值,而且数据范围挺大的,说明应该有技巧

实际写了一下数据发现 A,B 取值范围应该在 [1000,1000] 之中,而且一定存在(证明不提供)

那么直接枚举就好了

ll fac(ll x) {return x * x * x * x * x;}
int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    ll n; cin >> n;
    for (ll i = -1000; i <= 1000; ++i) {
        ll y = fac(i) + n;
        for (ll j = -1000; j <= 1000; ++j)
            if (fac(j) == y) {
                return printf("%lld %lld", j, i), 0;
            }
    }
}

E - This Message Will Self-Destruct in 5s

题意:

  • 给出一个长度为 n 的序列 h,

    求问有多少组不同的无序数对 (i,j) 使得 |ij|=hi+hj

思路:

思维题,题意是找数对 (i,j) 使得 |ij|=hi+hj​ ,我们不妨设讠<j,移项得:a-j=-0-,很容易想到用map存数,每次更新答案即可

我们可以设 i<j 简单移项后 map 存数即可(在ABC里做过类似的了)

int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int n; cin >> n;
    int a[n + 1];
    ll cnt = 0;
    map<int, int>mp;
    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
        cnt += mp[a[i] - i];
        mp[-a[i] - i] += 1;
    }
    cout << cnt ;
}
posted @   RioTian  阅读(44)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)
历史上的今天:
2020-08-25 题解 CF1388A 【Captain Flint and Crew Recruitment】(思维、贪心)
2020-08-25 BZOJ 2038: [2009国家集训队]小Z的袜子【莫队算法裸题】
点击右上角即可分享
微信分享提示

📖目录