193 lines
2.1 KiB
C++
193 lines
2.1 KiB
C++
#include <iostream>
|
|
#include<cstdio>
|
|
#include<algorithm>
|
|
#include <cmath>
|
|
#include<cstring>
|
|
using namespace std;
|
|
const int N=1e6+5;
|
|
char s[N],sub[N];
|
|
int a[11]= {0};
|
|
int l[N];
|
|
int su[N];
|
|
int cnt;
|
|
int sublen;
|
|
int len;
|
|
//void init(int n)
|
|
//{
|
|
//
|
|
//}
|
|
void ce()
|
|
{
|
|
printf("\n(%d)\n",len) ;
|
|
for(int i=0; i<10; i++)
|
|
{
|
|
printf("%d(%d) ",i,a[i]);
|
|
}
|
|
printf("\n");
|
|
for(int i=1; i<=cnt; i++)
|
|
{
|
|
printf("%d",l[i]);
|
|
}
|
|
}
|
|
bool cmp(int b)
|
|
{
|
|
for(int i=0; i<sublen; i++)
|
|
{
|
|
if(su[i]>l[i+b])
|
|
{
|
|
return 0;
|
|
}
|
|
else if(su[i]<l[i+b])
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
//void useless()
|
|
//{
|
|
// cnt=1;
|
|
// for(int i=0; i<=9; i++)
|
|
// {
|
|
// while(a[i])
|
|
// {
|
|
// a[i]--;
|
|
// l[++cnt]=i;
|
|
//// break;//wrong
|
|
// }
|
|
// }
|
|
// for(int i=0; i<sublen; i++)
|
|
// {
|
|
// l[cnt+1+i]=su[i];
|
|
// }
|
|
// int i;
|
|
// for(i=1; i<=cnt; i++)
|
|
// {
|
|
// if(cmp(i))
|
|
// {
|
|
// break;
|
|
// }
|
|
// printf("%d",l[i]);
|
|
// }
|
|
// printf("%s",sub);
|
|
// for(; i<=cnt; i++)
|
|
// {
|
|
// printf("%d",l[i]);
|
|
// }
|
|
//}
|
|
int wei(int n)
|
|
{
|
|
int sum=0;
|
|
int len=n;
|
|
while(len>0)
|
|
{
|
|
sum++;
|
|
len/=10;
|
|
}
|
|
int len2=n-sum;
|
|
int sum2=0;
|
|
while(len2>0)
|
|
{
|
|
sum2++;
|
|
len2/=10;
|
|
}
|
|
if(sum==sum2)
|
|
{
|
|
return n-sum;
|
|
}
|
|
else
|
|
{
|
|
return n-sum+1;
|
|
}
|
|
}
|
|
bool ling()
|
|
{
|
|
for(int i=1;i<sublen;i++)
|
|
{
|
|
if(su[i]>0)
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
int main()
|
|
{
|
|
scanf("%s%s",&s,&sub);
|
|
len=strlen(s);
|
|
for(int i=0; i<len; i++)
|
|
{
|
|
a[s[i]-'0']++;
|
|
}
|
|
len=wei(len);
|
|
int y=len;
|
|
while(y>0)
|
|
{
|
|
a[y%10]--;
|
|
y/=10;
|
|
}
|
|
sublen=strlen(sub);
|
|
bool fir=1;
|
|
for(int i=0; i<sublen; i++)
|
|
{
|
|
su[i]=sub[i]-'0';
|
|
a[su[i]]--;
|
|
}
|
|
int now=0;
|
|
while(su[0]==su[now]&&now<sublen-2)
|
|
{
|
|
now++;
|
|
if(su[0]!=su[now])
|
|
{
|
|
fir=su[now]<su[0];
|
|
}
|
|
}
|
|
|
|
bool vis=0;
|
|
if(a[0]||su[0]==0)
|
|
for(int i=1; i<=9; i++)
|
|
{
|
|
if(a[i])
|
|
{
|
|
if(su[0]!=0&&su[0]<=i&&(su[0]<i||ling()))//i->a[i]
|
|
{
|
|
vis=1;
|
|
printf("%s",sub);
|
|
break;
|
|
}
|
|
a[i]--;
|
|
printf("%d",i);
|
|
break;
|
|
}
|
|
}
|
|
for(int i=0; i<=9; i++)
|
|
{
|
|
if(!vis&&su[0]==i&&fir)
|
|
{
|
|
printf("%s",sub);
|
|
}
|
|
while(a[i])
|
|
{
|
|
printf("%d",i);
|
|
a[i]--;
|
|
}
|
|
if(!vis&&su[0]==i&&!fir)
|
|
{
|
|
printf("%s",sub);
|
|
}
|
|
}
|
|
/*
|
|
123456789012345678901
|
|
125860
|
|
|
|
2564168486416487447411002654
|
|
5416846
|
|
|
|
30024
|
|
20
|
|
*/
|
|
// ce();
|
|
return 0;
|
|
}
|
|
|