zoukankan      html  css  js  c++  java
  • AtCoder Beginner Contest 164

    比赛链接:https://atcoder.jp/contests/abc164

    A - Sheep and Wolves

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        int s, w; cin >> s >> w;
        cout << (w >= s ? "unsafe" : "safe");
    }

    B - Battle

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        int a, b, c, d; cin >> a >> b >> c >> d;
        int c1 = c / b + (c % b > 0);
        int c2 = a / d + (a % d > 0);
        cout << (c1 <= c2 ? "Yes" : "No");
    }

    C - gacha

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        int n; cin >> n;
        set<string> st;
        for (int i = 0; i < n; i++) {
            string s; cin >> s;
            st.insert(s);
        }
        cout << st.size();
    }

    D - Multiple of 2019

    题意

    求一个至多长为 200000 的只包含 1 ~ 9 的字符串中有多少连续子串转为 10 进制后为 2019 的倍数。

    思路

    始终以字符串右端为起点向左扩展得到一系列整数: $x_i = s_i*10^{i} + s_{i-1}*10^{i-1} + ... + s_{0}10^0$,将 x 对 2019 取模,如果有两个 x 同余,则两个 x 之间的数,即二者之差一定为 2019 的倍数,用一个数组记录每个余数之前出现的次数,每个 x 与之前同余的数间都可以构成 2019 的倍数,如果余数为 0 则 x 本身就可以作为 2019 的倍数,所以 cnt[0] 初始化为 1 。

    #include <bits/stdc++.h>
    using namespace std;
    int cnt[2019];
    int main() {
        string s; cin >> s;
        int ans = 0, now = 0, p = 1;
        cnt[0] = 1;
        for (int i = s.size() - 1; i >= 0; i--) {
            now = (now + (s[i] - '0') * p) % 2019;
            ans += cnt[now]++;
            p = p * 10 % 2019;
        }
        cout << ans;
    }
  • 相关阅读:
    fidller 打断点
    随笔
    HTML标签介绍
    补充9.27----9.28
    html5_______9.26
    9.14
    9.13笔记
    9.12笔记
    CSS样式的引用
    html5_______9.10
  • 原文地址:https://www.cnblogs.com/Kanoon/p/12782687.html
Copyright © 2011-2022 走看看