题意:要求通过不超过两轮进制转换,将初始十进制数字串 s 转换为目标十进制数字串 t。每***作:选择进制xi(当前串每位必须小于xi),在选择进制yi,将当前串解释为xi进制后,再转化为yi进制,并作为下一轮的新串,最后一轮的 yi 必须为 10,且所有转换结果十进制值不超过1e18

题解:像这种构造问题,首先考虑题目所具有的独特性质,本题中有两个:①10进制转化为10进制不变 ② 十进制x进制转化为x进制为即x=(10)x,先考虑普通的情况:进行两轮 我们可以由这两个性质得到两轮分别是(10,s) (t,10) ,可以自己模拟一下,再讨论特殊情况,假设x=1,1不能转化为1进制,因此1是特殊的,分类讨论一下,①:假如s=1,t!=1 由于进制转化>=2 ,s不能变化,所以无解 ② s!=1,t==1 我们知道 两局转化关系为:(s)x1==(r)y1 (r)x2=1 则推出r只能为1,(s)x1=1,s=1,证明s!=1&&t==1 无解,具体代码如下:

using namespace std;
using ll=long long;
int main()
{
    ll s,t;cin>>s>>t;
    if((s==1&&t!=1)||(s!=1&&t==1)) cout<<"NO"<<'\n';
    else if(s==1&&t==1) cout<<"YES"<<'\n',cout<<0<<'\n';
    else {
        cout<<"YES"<<'\n';
        cout<<2<<'\n';
        cout<<10<<' '<<s<<'\n';
        cout<<t<<' '<<10<<'\n';
    }
    return 0;
}