前言
为什么要写这篇题解,因为我这个题赛后被 fst 了, 数据加强后这个题我就 wa 了。
少了一种情况,例如:
13 310
3->0
10 1X
10 < 1X
最后考虑上这一种情况后就 AC 了
题解:
设: 数为 , ;长度为 ,
请注意判断的逻辑顺序
如果 毫无疑问是 =
如果 是 !
我们可以构造出
接下来就是长度不相同的 为了书写代码方便,我们让
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;
}
接下来判断是否 , 可以是 >
or <
找到 , 不同的地方 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();
}