349

A - Zero Sum Game

void solve() {
    int n;cin >> n;
    int ans = 0;
    for (int i = 0;i < n - 1;i++) {
        int x;cin >> x;ans += x;
    }
    cout << -ans;
}

B - Commencement

由小写英文字母组成的字符串 S 是一个好字符串,当且仅当它满足以下属性,且所有整数 i 不小于 1

给定一个字符串 S ,判断它是否是一个好字符串。

void solve() {
    string s;cin >> s;
    map<char, int>mp;
    for (int i = 0;i < s.size();i++) {
        mp[s[i]]++;
    }
    vector<int> a(110);
    for (auto [x, y] : mp) {
        a[y]++;
    }
    bool ok = true;
    for (int i = 0;i <= 100;i++) {
        if (a[i] != 0 && a[i] != 2)ok = false;
    }
    if (ok)cout << "Yes\n";
    else cout << "No\n";
}

C - Airport Code

长度为 3 的由大写英文字母组成的字符串 T 是由小写英文字母组成的字符串 S机场代码,当且仅当 T 可以通过以下方法之一从 S 推导出来:

给定字符串 S

S 和 T ,判断 T 是否是 S 的机场代码。

void solve() {
    string s, t;cin >> s >> t;
    for (int i = 0;i < t.size();i++) {
        t[i] = tolower(t[i]);
    }
    int ok = 0, k = 0;
    for (int i = 0;i < s.size();i++) {
        if (s[i] == t[k]) {
            k++;
        }
    }
    if (k == 3 || k == 2 && t[2] == 'x') {
        cout << "Yes\n";
    } else {
        cout << "No\n";
    }
}

D - Divide Interval

对于非负整数 lr (l<r) ,让 S(l,r) 表示将 lr1 的整数依次排列而形成的序列 (l,l+1,,r2,r1) 。此外,当且仅当一个序列可以用非负整数 ij 表示为 S(2ij,2i(j+1)) 时,它才被称为好序列。

给你非负整数 LR (L<R) 。将序列 S(L,R) 除以最少的好序列,并打印序列数和除法。更具体地说,找出有一对非负整数序列 (l1,r1),(l2,r2),,(lM,rM) 满足下面条件的最小正整数 M ,并打印出这样的 (l1,r1),(l2,r2),,(lM,rM)

可以证明只有一种除法能使 M 最小化。

Solution

位运算

注:

#define int long long
void solve() {
    int l, r;cin >> l >> r;
    vector<pair<int, int>> res;
    if (!l) {
        int i = 1;
        for (;i <= r;) {
            i *= 2;
            if (i > r) {
                i /= 2;break;
            }
        }
        res.push_back({0,i});
        l = i;
    }
    int p = l;
    for (;p <= r;) {
        int j = p, cnt = 1;
        while (j % 2 == 0) {
            cnt *= 2;j /= 2;
        }
        int pre = p;
        p += cnt;
        if (p > r) {
            p -= cnt;break;
        }
        res.push_back({pre,p});
    }
    bitset<60>s1(p), s2(r);
    for (int i = 59;i >= 0;i--) {
        if (s1[i] != s2[i]) {
            int ans = (1ll << i);
            res.push_back({p,ans + p});
            p += ans;
        }
    }
    cout << res.size() << '\n';
    for (auto [x, y] : res)cout << x << " " << y << "\n";
}

E - Weighted Tic-Tac-Toe

给定一个井子棋,在每个格子中含有对应的分数,两个人一人选择一个格子。

若有人先连三格,则直接赢,若平局,则分数高的分数。

Solution

博弈

(待更 )

F - Subsequence LCM

给你一个长度为 N 的正整数序列 A=(A1,A2,,AN) 和一个正整数 M 。求以 998244353 为模数, A 的非空且不一定连续的子序列的个数,使得子序列中元素的最小公倍数(LCM)为 M 。如果两个子序列取自序列中的不同位置,即使它们作为序列重合,也会被区分开来。此外,序列中单个元素的 LCM 就是该元素本身。

Solution

DP