HI, It is really really bad and bit rusty for me to get TLE in this problem, well, anyone can suggest me what to modify my code inorder to get it with reasonable time.............
Code: Select all
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
#define MAX 2000000
/*******************************************************************/
void reverse(char *from, char *to )
{
long len=strlen(from);
long l;
for(l=0;l<len;l++)
to[l]=from[len-l-1];
to[len]='\0';
}
/******************************************************************/
void call_sum(char *first, char *sec, char *result)
{
char F[MAX+100], S[MAX+100], Res[MAX+100];
int f,s,sum,extra,now;
f=strlen(first);
s=strlen(sec);
reverse(first,F);
reverse(sec,S);
for(now=0,extra=0;(now<f && now<s);now++)
{
sum=(F[now]-'0') + (S[now]-'0') + extra;
Res[now]=sum%10 +'0';
extra= sum/10;
}
for(;now<f;now++)
{
sum=F[now] + extra-'0';
Res[now]=sum%10 +'0';
extra=sum/10;
}
for(;now<s;now++)
{
sum=F[now] + extra-'0';
Res[now]=sum%10 +'0';
extra=sum/10;
}
if(extra!=0)
Res[now++]=extra+'0';
Res[now]='\0';
if(strlen(Res)==0)
strcpy(Res,"0");
reverse(Res,result);
}
/*******************************************************************/
long call_div(char *number,long div,char *result)
{
long len=strlen(number);
long now;
long extra;
char Res[MAX+100];
for(now=0,extra=0;now<len;now++)
{
extra=extra*10 + (number[now]-'0');
Res[now]=extra / div +'0';
extra%=div;
}
Res[now]='\0';
for(now=0;Res[now]=='0';now++)
;
strcpy(result, &Res[now]);
if(strlen(result)==0)
strcpy(result, "0");
return extra;
}
/*******************************************************************/
char fir[MAX+100], sec[MAX+100], res[MAX+100], hold[MAX+100], xx[MAX+100], result[MAX+100];
int main()
{
long len_f, len_s, j, test, len, i, remainder, second, len_d, lo;
second=0;
lo=0;
while(1)
{
scanf("%ld", &second);
gets(xx);
sscanf(xx, "%ld", &test);
swap(second, test);
if(test==0 && second==0)
break;
len_f=len_s=0;
memset(result, '0', sizeof(result));
memset(sec, '0', sizeof(sec));
strcpy(sec, "0");
for(j=0; j<test; j++)
{
memset(res, '0', sizeof(res));
memset(hold, '0', sizeof(hold));
gets(hold);
strcpy(fir, hold);
len_s=strlen(sec);
len_f=strlen(fir);
if(len_f<len_s)
call_sum(sec, fir, res);
else
call_sum(fir, sec, res);
memset(sec, '0', sizeof(sec));
memset(fir, '0', sizeof(fir));
strcpy(sec, res);
}
len=strlen(res);
for(i=0;i<len;i++)
res[i];
res[i]='\0';
///// printf("%s", act_res); ///////
len_d=remainder=0;
remainder=call_div(res,second,result);
len_d=strlen(result);
for(i=0;i<len_d;i++)
result[i];
result[i]='\0';
printf("Bill #%ld costs %s: each friend should pay %s\n", ++lo, res, result);
printf("\n");
}
return 0;
}