SPOJ - Bishops Problem In C++
Solution:-
// cumbersome task to implement in C/C++, but nice feeling after AC.
Logic:-
if(grid_size==1)
Answer=1;
else
Answer=(size of grid*2) -2;
using namespace std;
int arr[200];
int i,len,carry,num,pos;
int main()
{
string s;
while(getline(cin,s))
{
len=i=carry=num=pos=0;
memset(arr,0,sizeof(arr));
len=s.length();
pos=0;
for(i=len-1;i>=0;i--,pos++) //copy the string to integre array in reverse order
arr[pos]=s[i]-'0';
carry=0;
for(i=0;i<len;i++) // double the integer array
{
num=(arr[i]*2) + carry;
arr[i]=num%10;
carry=num/10;
}
while(carry)
{
arr[i]=carry%10;
carry/=10;
if(carry)
i++;
}
pos=i; // subtract 2 from the array
i=0;
if(arr[i]>=2)
arr[i]-=2;
else
{
arr[i]+=8;
i++;
arr[i]--;
}
while(1)
{
if(arr[i]>=0 || i==pos)
break;
else
{
arr[i]=9;
i++;
arr[i]--;
}
}
while(arr[pos]==0)
pos--;
if(pos<0) // if the grid size was 1, than pos becomes less than zero
cout<<1;
for(i=pos;i>=0;i--)
cout<<arr[i];
cout<<endl;
}
return 0;
}
No comments:
Post a Comment