I am trying to solve Bishops problem on SPOJ. I am getting a TLE. There are actually 3 for loops effectively which on maximum runs for 100 times, even though TLE!!! Can some one point out inefficient part of the code?
Edit: I optimized the code as shown below. This time no function calls etc... but TLE!! I have solved this question using Java, Python. I really want to implement this using C++. Any help would be appreciated. Thanks!!
/Earlier code/
include<bits stdc++.h="">
define si(a) scanf("%d",&a)
define nl printf("\n")
define ULL unsigned long long
//set<int> sx, sy; using namespace std;
int A[101]; char ans[100]; int l;
void done(int i){ if(!A[i]){ A[i]=9; ans[l-i-1]=A[i]+'0'; done(i+1); } else { A[i]--; ans[l-i-1]=A[i]+'0'; } }int main() {
int i; char P[100]={0}; while(scanf("%s",P)!=0){ int c=0,x; memset(A,0,100); memset(ans,0,100); l=strlen(P); for(i=l-1;i>=0;i--){ A[l-i-1]=P[i]-'0';
} for(i=0;i<l;i++){ x=A[i]; A[i]=(2x+c)%10; ans[l-i-1]=A[i]+'0'; c=(2x+c)/10; }if(A[0]>=2){ A[0]=A[0]-2; ans[l-1]=A[0]+'0'; } else { A[0]=A[0]+10-2; ans[l-1]=A[0]+'0'; done(1); } if(c)printf("%d",c); puts(ans); nl;
} return 0;
}/optimized code/
include<bits stdc++.h="">
define si(a) scanf("%d",&a)
//set<int> sx, sy; using namespace std;
int A[101]; char ans[100]; int l;
int main() {
int i; char P[100]={0}; while(scanf("%s",P)!=0){ int c=0,x; memset(A,0,100); memset(ans,0,100); l=strlen(P); for(i=l-1;i>=0;i--){ A[l-i-1]=P[i]-'0';
} A[l-1]--; for(i=0;i<l;i++){ x=A[i]; if(i<l-1)x+=9; x=2*x+c; A[i]=x%10; ans[l-i-1]=A[i]+'0'; c=x/10; }if(c)printf("%d",c); puts(ans); printf("\n");
} return 0;
}