刚刚发错了。
一直 WA#2
#include <bits/stdc++.h>
using namespace std;
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define REP(i,a,b) for(int i=a;i>=b;i--)
#define pb push_back()
#define mkpr make_pair
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
#define int long long
int t;
int a,b,c;
ll k;
int pw10[15];
signed main()
{
pw10[1]=9;
pw10[2]=99;
pw10[3]=999;
pw10[4]=9999;
pw10[5]=99999;
pw10[6]=999999;
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld%lld",&a,&b,&c);
scanf("%lld",&k);
if(c!=max(a,b)&&c!=max(a,b)+1)
{
puts("-1");
continue;
}
FOR(i,pw10[a-1]+1,pw10[a])
{
if(c==max(a,b))
{
int sy=max(0ll,pw10[c]-i-max(pw10[c-1]-i,pw10[b-1]));
if(k>sy)k-=sy;
else if(k<=sy)
{
int j=max(pw10[c-1]-i,pw10[b-1])+k;
printf("%lld + %lld = %lld\n",i,j,i+j);
k=0;
break;
}
}
if(c==max(a,b)+1)
{
int sy=max(0ll,min(pw10[c],i+pw10[b])-i-max(pw10[c-1]-i,pw10[b-1]));
// printf("lim = %d %d i = %d\n",pw10[c],i+pw10[b],i);
if(k>sy)k-=sy;
else if(k<=sy)
{
int j=max(pw10[c-1]-i,pw10[b-1])+k;
printf("%lld + %lld = %lld\n",i,j,i+j);
k=0;
break;
}
}
}
if(k>0)puts("-1");
}
return 0;
}