更好的阅读体验

前言

为什么要写这篇题解,因为我这个题赛后被 fst 了, 数据加强后这个题我就 wa 了。 少了一种情况,例如: 13 310 3->0 10 1X 10 < 1X 最后考虑上这一种情况后就 AC 了

题解:

设: 数为 aabb;长度为 lenalena, lenblenb 请注意判断的逻辑顺序 如果 a=ba = b 毫无疑问是 = 如果 lena=lenblena = lenb! 我们可以构造出 <&>< \& >

接下来就是长度不相同的 为了书写代码方便,我们让 lena>lenblena > lenb

bool flag = 0;
    if (lena < lenb)
        flag = 1, swap(lena, lenb), swap(a, b);

我们先去判断多余的部分是否可以变成 00, 也就说是否可以映射成 00

如果不可以,谁长度大谁大

char ch = a[0];
    for (int i = 0; i < lena - lenb; i++)
    {
        if (a[i] != ch)
        {
            cout << (flag ? "<\n" : ">\n");
            return;
        }
    }

如果可以凑成 00, 我们到达下一步 把多余的部分删掉,因为都是 00

a.erase(a.begin(), a.begin() + lena - lenb);

此时如果 a=ba = b 那就是 ! 因为有构造可以让长度大的大

	if (a == b)
    {
        cout << "!\n";
        return;
    }

接下来判断是否 aa, bb 可以是 > or <

找到 aa, bb 不同的地方 idx 如果 b[idx]b[idx] 不能变成 0, 那就是 ! 否则是:谁长度大谁大

	for (int i = 0; i < lenb; i++)
    {
        if (a[i] != b[i])
        {
            if (b[i] != ch)
            {
                cout << "!\n";
                return;
            }
            break;
        }
    }
	cout << (flag ? "<\n" : ">\n");

AC 代码如下:

/*
Make it simple and keep self stupid
author:Joanh_Lan
*/
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <numeric>
#include <cstring>
#include <cmath>
#include <map>
#include <unordered_map>
#include <bitset>
#include <set>
#include <random>
#include <ctime>
#include <queue>
#include <stack>
#include <climits>
#define buff                     \
    ios::sync_with_stdio(false); \
    cin.tie(0);
// #define int long long
#define ll long long
#define PII pair<int, int>
#define px first
#define py second
typedef std::mt19937 Random_mt19937;
Random_mt19937 rnd(time(0));
using namespace std;
const int mod = 1e9 + 7;
const int inf = 2147483647;
const int N = 100009;
// int Mod(int a,int mod){return (a%mod+mod)%mod;}
// int lowbit(int x){return x&-x;}//最低位1及其后面的0构成的数值
// int qmi(int a, int k, int p){int res = 1 % p;while (k){if (k & 1) res = Mod(res * a , p);a = Mod(a * a , p);k >>= 1;}return res;}
// int inv(int a,int mod){return qmi(a,mod-2,mod);}
// int lcm(int a,int b){return a*b/__gcd(a,b);}
string a, b;
void solve()
{
    cin >> a >> b;
    int lena = a.size(), lenb = b.size();
    if (a == b)
    {
        cout << "=\n";
        return;
    }
    if (lena == lenb)
    {
        cout << "!\n";
        return;
    }

    bool flag = 0;
    if (lena < lenb)
        flag = 1, swap(lena, lenb), swap(a, b);

    char ch = a[0];
    for (int i = 0; i < lena - lenb; i++)
    {
        if (a[i] != ch)
        {
            cout << (flag ? "<\n" : ">\n");
            return;
        }
    }
    a.erase(a.begin(), a.begin() + lena - lenb);
    if (a == b)
    {
        cout << "!\n";
        return;
    }
    for (int i = 0; i < lenb; i++)
    {
        if (a[i] != b[i])
        {
            if (b[i] != ch)
            {
                cout << "!\n";
                return;
            }
            break;
        }
    }
    cout << (flag ? "<\n" : ">\n");
}
int main()
{
    buff;
    int _ = 1;
    // cin >> _;
    while (_--)
        solve();
}