I dnt know why i getting WA...I passed all I/O in boards...Help me pls..Here is my code..

Code: Select all
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
long t=0;
class Die{
private:
char cast[60][60],ch;
vector<long> v,x,s,sorting;
long I,J;
public:
bool Input(long R,long C)
{
for(I=0;I<R;I++)
{
for(J=0;J<C;J++)
{
cast[I][J]=getchar();
}
getchar();
}
return 1;
}
bool print(long R,long C)
{
for(I=0;I<R;I++){
for(J=0;J<C;J++)
printf("%c",cast[I][J]);
printf("\n");
}
return 0;
}
//(if DFS find any ' * ' make it 'S' )and (if find ' X ' makes it 'Y')
bool X_MAN(long x,long y,long R,long C) //find 'X'
{
long a,b;
a=x+1;b=y;
if(a>=0&&a<R&&b>=0&&b<C)
{
if(cast[a][b]=='X')
{
cast[a][b]='Y';
v.push_back(a);
v.push_back(b);
return 1;
}
else if(cast[a][b]=='*')
{
s.push_back(a);
s.push_back(b);
return 0;
}
}
a=x-1;b=y;
if(a>=0&&a<R&&b>=0&&b<C)
{
if(cast[a][b]=='X')
{
cast[a][b]='Y';
v.push_back(a);
v.push_back(b);
return 1;
}
else if(cast[a][b]=='*')
{
s.push_back(a);
s.push_back(b);
return 0;
}
}
a=x;b=y+1;
if(a>=0&&a<R&&b>=0&&b<C)
{
if(cast[a][b]=='X')
{
cast[a][b]='Y';
v.push_back(a);
v.push_back(b);
return 1;
}
else if(cast[a][b]=='*')
{
s.push_back(a);
s.push_back(b);
return 0;
}
}
a=x;b=y-1;
if(a>=0&&a<R&&b>=0&&b<C)
{
if(cast[a][b]=='X')
{
cast[a][b]='Y';
v.push_back(a);
v.push_back(b);
return 1;
}
else if(cast[a][b]=='*')
{
s.push_back(a);
s.push_back(b);
return 0;
}
}
return 0;
}
bool star_Man(long x,long y,long R,long C) //find '*'
{
long a,b;
a=x+1;b=y;
if(a>=0&&a<R&&b>=0&&b<C)
{
if(cast[a][b]=='*')
{
cast[a][b]='S';
s.push_back(a);
s.push_back(b);
return 1;
}
else if(cast[a][b]=='X')
{
t++;
v.push_back(a);
v.push_back(b);
X_DFS(R,C);
return 1;
}
}
a=x-1;b=y;
if(a>=0&&a<R&&b>=0&&b<C)
{
if(cast[a][b]=='*')
{
cast[a][b]='S';
s.push_back(a);
s.push_back(b);
return 1;
}
else if(cast[a][b]=='X')
{
t++;
v.push_back(a);
v.push_back(b);
X_DFS(R,C);
return 1;
}
}
a=x;b=y+1;
if(a>=0&&a<R&&b>=0&&b<C)
{
if(cast[a][b]=='*')
{
cast[a][b]='S';
s.push_back(a);
s.push_back(b);
return 1;
}
else if(cast[a][b]=='X')
{
t++;
v.push_back(a);
v.push_back(b);
X_DFS(R,C);
return 1;
}
}
a=x;b=y-1;
if(a>=0&&a<R&&b>=0&&b<C)
{
if(cast[a][b]=='*')
{
cast[a][b]='S';
s.push_back(a);
s.push_back(b);
return 1;
}
else if(cast[a][b]=='X')
{
t++;
v.push_back(a);
v.push_back(b);
X_DFS(R,C);
return 1;
}
}
return 0;
}
bool X_DFS(long R,long C) // 'X' DfS
{
long X,Y;
X=v[v.size()-2];
Y=v[v.size()-1];
cast[X][Y]='Y';
while(!v.empty())
{
X=v[v.size()-2];
Y=v[v.size()-1];
while(X_MAN(X,Y,R,C))
{
X=v[v.size()-2];
Y=v[v.size()-1];
}
v.pop_back();
v.pop_back();
}
return 0;
}
//if DFS find any ' * ' make it 'S' and if find ' X ' makes it 'Y'
bool S_DFS(long R,long C) // '*' dfs
{
long X,Y;
X=s[s.size()-2];
Y=s[s.size()-1];
cast[X][Y]='S';
while(star_Man(X,Y,R,C))
{
X=s[s.size()-2];
Y=s[s.size()-1];
}
s.pop_back();
s.pop_back();
return 0;
}
bool scan(long R,long C) //scan the whole matrix
{
for(I=0;I<R;I++)
for(J=0;J<C;J++)
if(cast[I][J]=='X')
{
t=1; //counter to count how many 'X' on a single dice.
v.push_back(I);
v.push_back(J);
X_DFS(R,C);
if( !s.empty() ) //if input ....X.... i mean only X then 'vector s' is empty so not need another DFS
S_DFS(R,C);
sorting.push_back(t);//total 'X' count for a single dice.
}
sort(sorting.begin(),sorting.end());
if( ! sorting.empty() ) //Print the Sorting Result here...
{
for(I=0;I<sorting.size()-1;I++)
printf("%ld ",sorting[I]);
printf("%ld",sorting.back());
}
else
printf("0"); //I submit without this condition but still WA.
printf("\n");
return 1;
}
};
int main()
{
long R,C,I,J,count=1;
/*
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
*/
while(scanf("%ld %ld",&C,&R)==2)
{
getchar();
if(R==0&&C==0)
break;
Die hard; //creating obj.
hard.Input(R,C); //taking input...
printf("Throw %ld\n",count);
hard.scan(R,C); //scan the matrix...
printf("\n");
count++;
}
return 0;
}