I was solving spoj problem LISA. This is my code.
http://www.spoj.pl/problems/LISA/

First, my doubt is how to store such a big number in array? My array is
unsigned long, and even its maximum is less than 2^64. now if I use *long
long*, i get a runtime error on my system?!!

Second, consider the test case
1+2*3+4*5+6*7+8*9+9*8+7*6+5*4
It gives the same ouput as for
1+2*3+4*5+6*7+8*9+9*8+7*6+5*4+3
why is this happening?? Am I doing anything wrong? The code is straight
forward, a simple dp. please ask anything u didnt get about my code... Any
help will be greatly appreciated..


#include<iostream>
#include<conio.h>
#include<string.h>

using namespace std;

int main()
{
 int t;
 unsigned long max_table[100];
 unsigned long min_table[100];
 char *str;
 scanf("%d",&t);
 while(t--)
 {
 cin>>str;
 int len=strlen(str)/2;

 max_table[0]=atoi(&str[0]);
 min_table[0]=atoi(&str[0]);

 if(str[1]=='*')
 {
                max_table[1]=atoi(&str[0])*atoi(&str[2]);
                min_table[1]=atoi(&str[0])*atoi(&str[2]);
 }
 else
 {
                max_table[1]=atoi(&str[0])+atoi(&str[2]);
                min_table[1]=atoi(&str[0])+atoi(&str[2]);
 }
 cout<<max_table[0]<<"\t"<<min_table[0]<<"\n"<<max_table[1]<<"\t"<<min_table[1];
 cout<<"\n";
 for(int i=2;i<len+1;i++)
 {
   if(str[2*i-1]=='*' && str[2*i-3]=='+')
   {

max_table[i]=max(atoi(&str[2*i])*max_table[i-1],(atoi(&str[2*i])*atoi(&str[2*i-2]))+max_table[i-2]);


min_table[i]=min(atoi(&str[2*i])*min_table[i-1],(atoi(&str[2*i])*atoi(&str[2*i-2]))+min_table[i-2]);

                             cout<<max_table[i]<<"\t"<<min_table[i]<<"\n";

   }
   else
   if(str[2*i-1]=='+' && str[2*i-3]=='*')
   {

max_table[i]=max(atoi(&str[2*i])+max_table[i-1],(atoi(&str[2*i])+atoi(&str[2*i-2]))*max_table[i-2]);

min_table[i]=min(atoi(&str[2*i])+min_table[i-1],(atoi(&str[2*i])+atoi(&str[2*i-2]))*min_table[i-2]);
                      cout<<max_table[i]<<"\t"<<min_table[i]<<"\n";
   }
   else
   if(str[2*i-1]=='+' && str[2*i-3]=='+')
   {
                      max_table[i]=atoi(&str[2*i])+max_table[i-1];
                      min_table[i]=atoi(&str[2*i])+min_table[i-1];
                        cout<<max_table[i]<<"\t"<<min_table[i]<<"\n";

   }
   else
   if(str[2*i-1]=='*' && str[2*i-3]=='*')
   {
                      max_table[i]=atoi(&str[2*i])*max_table[i-1];
                      min_table[i]=atoi(&str[2*i])+min_table[i-1];
                      cout<<max_table[i]<<"\t"<<min_table[i]<<"\n";

   }
 }
 cout<<max_table[len]<<" "<<min_table[len]<<"\n";
}
 getch();
 return 0;
}

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to