Codeforces Round #690 (Div. 3) (简单题解记录)

Codeforces Round #690 (Div. 3)

1462A. Favorite Sequence

简单看懂题即可,左边输出一个然后右边输出一个。

void solve() {
    int n;
    cin >> n;
    vector<ll> a(n + 1);
    // ll a[n + 1]; //两种写法均可
    for (int i = 1; i <= n; ++i)
        cin >> a[i];
    int l = 1, r = n;
    bool f = true;
    for (int i = 1; i <= n; ++i) {
        if (f)
            cout << a[l++] << " ", f = false;
        else
            cout << a[r--] << " ", f = true;
    }
    cout << endl;
}

1462B. Last Year's Substring

一开始想错了,正确的思路是拆分字符串看是否能组成 2020

void solve() {
    int n;
    string s;
    cin >> n >> s;
    bool f = false;

    for (int fir = 0; fir <= 4 && !f; fir++) {
        int sec = 4 - fir;  //定位

        if (s.substr(0, fir) + s.substr(n - sec) == "2020")
            f = true;
    }

    cout << (f ? "YES\n" : "NO\n");
}

1462C. Unique Number

😂打表。注意一下n > 45的话直接输出-1(因为0~9都被使用了最多到45)

ll a[51] = {
    0,       1,       2,       3,        4,        5,         6,      7,
    8,       9,       19,      29,       39,       49,        59,     69,
    79,      89,      189,     289,      389,      489,       589,    689,
    789,     1789,    2789,    3789,     4789,     5789,      6789,   16789,
    26789,   36789,   46789,   56789,    156789,   256789,    356789, 456789,
    1456789, 2456789, 3456789, 13456789, 23456789, 123456789, -1,      -1,
    -1,       -1,       -1,
};
void solve() {
    int n, cnt = 0;
    string s;
    cin >> n;
    cout << a[n] << endl;
}

当然也可以正常分析:

void solve() {
    int n;
    cin >> n;
    if (n > 45) {
        cout << -1 << endl;
        return;
    }
    string s;
    int nxt = 9;
    while (n > 0) {
        if (n >= nxt) {
            s += '0' + nxt;
            n -= nxt--;
        } else {
            s += '0' + n;
            break;
        }
    }
    reverse(s.begin(), s.end());
    cout << s << endl;
}

D. Add to Neighbour and Remove

void solve() {
    int n;
    cin >> n;
    vector<ll> a(n);
    for (int i = 0; i < n; ++i)
        cin >> a[i];
    ll ans = INT_MAX, sum = 0;
    for (int i = 0; i < n; ++i) {
        sum += a[i];
        ll cur = 0, toadd = 0;
        bool f = true;
        for (int j = 0; j < n; ++j) {
            if (cur)
                toadd++;
            cur += a[j];
            if (cur > sum) {
                f = false;
                break;
            } else if (cur == sum)
                cur = 0;
        }
        if (f && cur == 0) {
            // cout << toadd << " " << i << endl;
            ans = min(ans, toadd);
        }
    }
    cout << ans << endl;
}

E1. Close Tuples (easy version)

//unsolved
posted @ 2020-12-16 19:08  RioTian  阅读(235)  评论(0编辑  收藏  举报