#include<stdio.h>
#include<string.h>
int copystring(char *a,long int mid1,long int mid2);
int start(char *a);
int check(char *a,long int mid1,long int mid2)
{
if(mid1<0)
return 1;
if(a[mid1]<a[mid2])
{
a[mid2]=a[mid1];
return 1;
}
if(a[mid1]>a[mid2])
return 0;
else return check(a,mid1-1,mid2+1);
}
int increment(char *a,long int pos)
{
if(pos<0)
return 0;
if(a[pos]!='9')
{
a[pos]++;
return 0;
}
if(pos==0)
{
long int i;
long int len = strlen(a);
for(i=1;i<=len;i++)
{
a[i]='0';
}
a[0]='1';
a[len]='1';
a[len+1]='\0';
return 1;
}
a[pos]='0';
return increment(a,pos-1);
}
int match(char *a,long int mid1,long int mid2)
{
int flag=0;
if(mid1<0)
return 0;
if(a[mid1]==a[mid2])
{
if(check(a,mid1-1,mid2+1))
{
flag=increment(a,mid1);
if(flag==1)
{
return 0;
}
a[mid2]=a[mid1];
copystring(a,mid1,mid2);
return 0;
}
match(a,mid1-1,mid2+1);
return 0;
}
if(a[mid1]>a[mid2])
{
a[mid2]=a[mid1];
copystring(a,mid1-1,mid2+1);
return 0;
}
else
{
increment(a,mid1);
a[mid2]=a[mid1];
copystring(a,mid1,mid2);
return 0;
}
}
int copystring(char *a,long int mid1,long int mid2)
{
if(mid1<0)
return 0;
a[mid2]=a[mid1];
copystring(a,mid1-1,mid2+1);
return 0;
}
int start(char *a)
{
long int len;
len=strlen(a);
long int mid1 = len /(long int) 2,mid2;
mid2=mid1;
if(len%2 == 0)
mid1--;
match(a,mid1,mid2);
return 0;
}
int main()
{
int t;
scanf("%d",&t);
char a[1000002];
while(t--)
{
scanf("%s",a);
start(a);
printf("%s",a);
if(t) printf("\n");
}
return 0;
}
It seems that my code generates a segmentation fault in some way... Can you please tell me for what case the error occurs?
↧
PALIN: getting Runtime error
↧