zoukankan      html  css  js  c++  java
  • Codeforces #698 Div.2 (A~D题)个人题解记录

    1478A. Nezzar and Colorful Balls

    看半天题,然后才发现是统计最大值。

    int _;
    int main() {
        ios_base::sync_with_stdio(false), cin.tie(0);
        for (cin >> _; _--;) {
            int n;
            cin >> n;
            vector<int> a(n + 1, 0);
            for (int i = 0, x; i < n; ++i) cin >> x, a[x]++;
            cout << *max_element(a.begin(), a.end()) << "
    ";
        }
        return 0;
    }
    

    1478B. Nezzar and Lucky Number

    int _;
    int dp[1010];
    bool f(int x, int d) {
        while (x) {
            if (x % 10 == d) return true;
            x /= 10;
        }
        return false;
    }
    int main() {
        ios_base::sync_with_stdio(false), cin.tie(0);
        for (cin >> _; _--;) {
            int q, x, d;
            cin >> q >> d;
            vector<int> v(15, 1e9);
            for (int i = 1; i <= 100; ++i) {
                x = i % d;
                if (f(i, d)) v[x] = min(v[x], i);
            }
            for (int i = 1; i <= q; ++i) {
                cin >> x;
                if (v[x % d] <= x)
                    cout << "YES
    ";
                else
                    cout << "NO
    ";
            }
        }
        return 0;
    }
    

    1478C. Nezzar and Symmetric Array

    对d数组排个序,看一个每个出现的奇偶次数,其实 d 的顺序就是 a(绝对值) 的顺序对应过去的,两组应该是对称出现的。。

    那可以按顺序求出对应的 a,要是求不出来或者出现重复,那么就失败,否则成功。

    int _;
    int main() {
        ios_base::sync_with_stdio(false), cin.tie(0);
        for (cin >> _; _--;) {
            int n;
            cin >> n;
            vector<ll> d(2 * n);
            for (auto& x : d) cin >> x;
            sort(d.rbegin(), d.rend()); // 注意这里是逆排
            bool yn = 1;
            ll sum = 0;
            for (int i = 2; i < 2 * n; i += 2)
                if (d[i] == d[i - 1]) yn = 0;
    
            for (int i = 0; i < n && yn; i++) {
                if (d[2 * i] != d[2 * i + 1]) {
                    yn = 0;
                    break;
                }
                if ((d[2 * i] - sum) <= 0 or (d[2 * i] - sum) % (n - i) != 0) {
                    yn = 0;
                    break;
                }
                ll cur = (d[2 * i] - sum) / (n - i);
                if (cur & 1) {
                    yn = 0;
                    break;
                }
                sum += cur;
            }
            cout << (yn ? "YES
    " : "NO
    ");
        }
        return 0;
    }
    

    1478D. Nezzar and Board

    (2*x−y) x想成 (x + x − y) ,也就是x加上x 和y的差值,这个差值可以是正的也可以是负的。执行完之后我们可以对新的数字继续增加这个差值,所以我们就可以根据两个数字得出一个等差数列。数列内的数字都可以倍包含在数组a里。

    而我们的目的是找出一个最小的差值 (d),然后分别比对每一个 (a[i])看是否可以由 (a[i])和若干个 (d) 得到 k。先对 a 数组排个序,然后对所有的$ a[ i ]− a[ i − 1] $求 gcd,就得出了那个最小的差值 d。

    // RioTian 21/01/29
    #include <bits/stdc++.h>
    using namespace std;
    using ll = long long;
    int _, n;
    ll k;
    ll gcd(ll a, ll b) { return a % b == 0 ? b : gcd(b, a % b); }
    int main() {
        ios_base::sync_with_stdio(false), cin.tie(0);
        for (cin >> _; _--;) {
            cin >> n >> k;
            vector<ll> a(n + 1);
            for (int i = 1; i <= n; i++) cin >> a[i];
            sort(a.begin() + 1, a.end());
    
            ll tmp = a[2] - a[1];
            for (int i = 2; i < n; i++) tmp = gcd(tmp, a[i + 1] - a[i]);
    
            ll x = llabs(a[1] - k);
            cout << (x % tmp == 0 ? "YES
    " : "NO
    ");
        }
        return 0;
    }
    

    The desire of his soul is the prophecy of his fate
    你灵魂的欲望,是你命运的先知。

  • 相关阅读:
    pip安装指定版本的package
    学习 git基础命令
    美剧命名规则
    Mac OS X中bogon的处理
    学习Maven之Maven Clean Plugin
    学习Maven之Cobertura Maven Plugin
    博客园markdown代码块支持的语言
    学习Maven之Maven Surefire Plugin(JUnit篇)
    C# Invoke或者BeginInvoke的使用
    LINQ to SQL语句(20)之存储过程
  • 原文地址:https://www.cnblogs.com/RioTian/p/14346787.html
Copyright © 2011-2022 走看看