📄 2098263_ac_0ms_48k.c
字号:
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
int flag;
int output[10];
int mark[10], Mark;
long t, max;
int len;
char num[10];
long get_num()
{
int i, j;
long tmp, ans;
ans = 0;
for(i = 0; i < len; i++)
{
tmp = 0;
j = i;
while(j<len&&mark[j]==mark[i])
{
tmp*=10;
tmp += num[j]-'0';
j++;
}
i = j-1;
ans += tmp;
}
return ans;
}
void Copy()
{
int i;
for(i = 0; i < len; i++)
output[i] = mark[i];
}
void enum_ans(char al[], int n)
{
int i, l, tmp;
l = strlen(al);
if(n==1)
{
for(i = 0; i < l; i++)
mark[i+len-l] = 1;
tmp = get_num();
if(tmp>max&&tmp<=t)
{
Mark = 1;
max = tmp;
flag = 0;
Copy();
}
else
if(tmp<=t&&tmp==max)
flag++;
return ;
}
for(i = 0; i <= l-n; i++)
{
mark[i+len-l] = n;
enum_ans(&al[i+1],n-1);
}
}
long f(char str[])
{
int i;
long tm;
tm = 0;
for(i = 0; str[i]!='\0'; i++)
{
tm *= 10;
tm += str[i]-'0';
}
return tm;
}
void input()
{
int i, p, q;
long fuck;
while(scanf("%ld%s",&t,num)==2)
{
if(t==0&&strcmp(num,"0")==0)
break;
flag = 0;
//printf("%ld\n",);
if(t>=f(num))//atol(num)
{
printf("%s %s\n",num,num);
continue;
}
len = strlen(num);
max = -23;Mark = 0;
for(i = 2; i <= len; i++)
enum_ans(num,i);
if(!Mark)
{
printf("error\n");
continue;
}
if(flag)
printf("rejected\n");
else
{
printf("%ld",max);
for(p = 0; p < len; p++)
{
q = p;
printf(" ");
fuck = 0;
while(q<len&&output[q]==output[p])
{
fuck *= 10;
fuck += num[q]-'0';
q++;
}
printf("%ld",fuck);
p = q-1;
}
printf("\n");
}
}
}
int main()
{
input();
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -