[Algo Beat Contest 001 B] Between Head and Tail 官方题解

· · 题解

考虑枚举 [L,R] 之间的所有数,依次进行判断是否是满足条件的。

由于数的位数是不定的,可以把它转为字符串再进行判断。可以手写,也可以使用 C++ 自带的 to_string 函数。于是若字符串 S 下标从 0 开始,长度为 n,那么需要相等的即为 S_0S_{n-1}S_{\lfloor \frac{n}{2} \rfloor}。需要判断偶数位的情况。

代码如下:

#include <bits/stdc++.h>
using namespace std;

#define ll long long

bool chk(string s) {
    if ((ll)s.size() % 2 == 0) {
        return 0;
    }
    return (s[0] == s[(ll)s.size() - 1] && s[0] == s[(ll)s.size() / 2]);
}

void solve() {
    ll l, r, ans = 0;
    cin >> l >> r;
    for (ll i = l; i <= r; i++) {
        if (chk(to_string(i))) {
            cout << i << " ";
        }
    }
    cout << "\n";
}

int main() {

    ll tc;
    cin >> tc;
    while (tc--) {
        solve();
    }

    return 0;
}