Page 1 of 6
514 - Rails
Posted: Mon Aug 05, 2002 8:15 pm
by yahoo
I can't understand why my this program gives wrong answer. I think my algorithm is ok. Is there anything i miss? Please kindly check my code and tell me where i am wrong. thanks in advance.
#include <stdio.h>
main()
{
int a[1000],cnt,count,i,k,j,n,flag,flag2;
while(1)
{
scanf("%d",&n);
if(n==0) break;
for(i=0;i<n;i++)
a[i]=0;
while(1)
{
i=0;
scanf("%d",&a[i]);
if(a[i]==0) break;
for(i=1;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]==0) break;
}
a[i]=0;
cnt=flag=flag2=0;
for(j=0;j<n;j++)
{
if(a[j]<a[j+1]) cnt++;
else break;
}
if(cnt==n-1) {flag=1;printf("Yes\n");}
if(!flag)
{
count=0;
for(k=0;k<n;k++)
{
if(a[k]>a[k+1]) count++;
else break;
}
if(count==n) {flag2=1;printf("Yes\n");}
}
if(!flag && !flag2) printf("No\n");
}
printf("\n");
}
return 0;
}
What is the algorithm
Posted: Wed Aug 07, 2002 9:04 pm
by sayeed
It seems strange . What is the algorithm of that probelm ? I tried in a similar way but got wa. Will someone explain the algorithm?
Posted: Wed Mar 19, 2003 7:03 pm
by Subeen
I got WA too. don't understand why... help me please
here i give my code:
[c]
#include <stdio.h>
int ara[1001];
int top, N;
void push(int n)
{
ara[++top] = n;
}
int pop()
{
return ara[top--];
}
void main()
{
int ara1[1001], ara2[1001];
int i, j, n1, n2, f = 0;
while(1==scanf("%d", &N) && N)
{
if(f)
printf("\n");
else
f = 1;
while(1)
{
scanf("%d", &ara1[0]);
if(!ara1[0]) break;
for(i=1; i<N; i++) scanf("%d", &ara1
);
top = -1; /* initialize the stack */
for(i=0, j=0; i<N; i++)
{
n1 = ara1[j];
n2 = i+1;
if(n1!=n2)
{
push(n2);
}
else
{
ara2[j++] = n2;
}
}
while(top>=0)
ara2[j++] = pop();
for(i=0; i<N; i++)
if(ara1!=ara2)
break;
if(i < N)
printf("No\n");
else
printf("Yes\n");
}
}
}
[/c]
WA too
Posted: Tue Nov 04, 2003 12:26 pm
by Sarwar
I am getting WA, please help.
Here is my code:
[cpp]
#include<stdio.h>
int top,a[1002];
void push(int p)
{
a[top++]=p;
}
int pop()
{ int p;
top--;
return a[top];
}
int main()
{
int b[1002],n,m,i,c,count=1,v,k;
while(1)
{
top=0;
v=1;
scanf("%d",&n);if(n==0)break;
while(1)
{
top=0;
for(i=0;i<n;i++)
{
scanf("%d",&b);
if(b[0]==0){v=0;break;}
}
if(v==0)break;
count=1;
for(i=0;count<=n;)
{
if(count==b){i++;count++;}
else {push(count);count++;}
}
c=i;
while(c<=n)
{
if(b[c]!=pop())break;
c++;
}
if(c==n)printf("Yes\n");
else printf("No\n");
}
}
return 0;
}
[/cpp]
514 wa
Posted: Thu Nov 13, 2003 4:03 am
by Yu Fan
#include <iostream>
using namespace std;
int main()
{
unsigned i,n,require,train,rf;
int flag;
unsigned *station;
unsigned ans[999];
int t=0;
while(cin>>n!=0) {
flag=-1;
rf=0;
train=1;
station=new unsigned[n+2];
while(cin>>require!=0) {
rf++;
if(require<train) {
if(require!=station[flag]) {
ans[t++]=0;
for(;rf<n;rf++)
cin>>require;
}
else
flag--;
}
else if(require==train)
train++;
else {
for(train=train;train<require;train++)
station[++flag]=train;
train++;
}
if(train>n) {
rf=0;
ans[t++]=1;
for(train=0;train<n+1;train++)
station[train]=0;
train=1;
flag=-1;
}
}
ans[t++]=2;
delete[]station;
}
for(i=0;i<t;i++) {
if(ans==0)
cout<<"No"<<endl;
else if(ans==1)
cout<<"Yes"<<endl;
else
cout<<endl;
}
return 0;
}
tell me what wrong with it...
Posted: Fri Nov 14, 2003 6:43 pm
by deddy one
hmm funny. I've tried to compile your code on my machine.
And it didn't produce output even on the sample input
test cases.
Posted: Fri Nov 14, 2003 6:46 pm
by deddy one
hmm funny. I've tried to compile your code on my machine.
And it didn't produce output even on the sample input
test cases. It keeps asking for input even though
I keep inputing 0.
514 WA why?
Posted: Tue Sep 28, 2004 12:36 pm
by mohiul alam prince
what is my problem
- i have used two queue A & B
- 1 stake S
just i have do push & pop
this is my function
[cpp]
function () {
while ( 1 ) {
if ( A.size() ) {
S.push( A.front() );
A.pop();
}
x = S.top();
y = B.front();
if ( x == y ) {
S.pop();
B.pop();
}
else if ( !A.size() ) {
printf("No\n");
return ;
}
if ( !B.size() ) {
printf("Yes\n");
return ;
}
}
printf("No\n");
}
[/cpp]
please give me some input
or some hints
Posted: Tue Sep 28, 2004 1:07 pm
by sohel
mohiul wrote:
what is my problem
- i have used two queue A & B
- 1 stake S
May be that's where you are wrong. Using Queues will not lead you to the right direction.
And what do you mean by
stake.

Posted: Tue Sep 28, 2004 1:46 pm
by mohiul alam prince
sohel wrote
May be that's where you are wrong. Using Queues will not lead you to the right direction.
sorry for my mistake this is stack
but i can not understand what is my mistake
can u explain me ?[/quote]
514
Posted: Tue Nov 30, 2004 10:56 am
by Heartattack!
This seems a very easy problem. Are there special cases? Can there be illegal numbers in the input [like if n=1 can a number in the permutation be 3]? I've tried all sorts of cases but I keep getting WA. Could someone please take a kind look at my code?
[cpp]
// p514.Rails.cpp : Defines the entry point for the console application.
//
@begin_of_source_code
/* @JUDGE_ID: ******* 514 C++ */
#include "iostream"
#include "stack"
using namespace std;
void main()
{
stack<int> station;
int train,n,in,dummy,done;
bool flag,act;
while(1)
{
inn:
cin>>n;
if(!n)
break;
while(1)
{
train=1;
flag=1;
done=0;
for(int i=0;i<n;++i)
{
cin>>in;
++done;
if(!in)
if(station.empty())
{
cout<<endl;
goto inn;
}
if(in==train)
{
++train;
continue;
}
if(in>train)
{
while(in>train)
{
station.push(train);
++train;
if(train>n)
{
flag =0;
goto print;
}
}
continue;
}
if(in<train)
{
if(in==station.top())
{
station.pop();
continue;
}
else
{
flag=0;
goto print;
}
}
}
print:
if(flag)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
while(!station.empty())
station.pop();
done=n-done;
while(done--)
cin>>in;
}
}
}
@end_of_source_code
[/cpp]
Thanks in advance.
PS: A bit of explanation:
n=number of trains
train=number of the trains which has not yet come into the station
done=number of inputs processed[used to clear n-done inputs]
flag=bool to see if posiible or not
station=the station stack
BTW, can the input be like this:
5
5 5 4 4 3
I mean, can it include repeated numbers or numbers out of the range of n?
Can it be like this:
5
1 2 3 4 5 6 7
0
Can there be 0s in the inputs like:
5
1 0 2 3 4
Please guys, this is blowing my head open. It seems so simple.... 
Posted: Fri Jan 21, 2005 1:44 pm
by Raiyan Kamal
you dont have to check for any such improper cases.
Re: p514 WA
Posted: Fri Jan 21, 2005 4:38 pm
by nnahas
Your program returns No on this permutation:
1 2 3 4 5 10 9 8 7 6
If I understood the problem correctly, it should return Yes:
the first 5 coaches leave the station first in first out and the last five Last in First out , so it should return yes.
514
Posted: Thu Apr 28, 2005 3:02 am
by sunnycare
my algo is just to simulate ....
my code here:
Code: Select all
//514 Rails
#include <queue>
#include <iostream>
#include <stack>
using namespace std;
int main(int argc,char *argv[])
{
queue<int> src;
queue<int> dst;
stack<int> st;
int n,tmp,i,dstTop;
bool r;
cin>>n;
while(n!=0)
{
//clear the queue and stack
while(!src.empty())
src.pop();
while(!dst.empty())
dst.pop();
while(!st.empty())
st.pop();
cin>>tmp;
while(tmp!=0)
{
r=true;
dst.push(tmp);
src.push(1);
for(i=2;i<=n;i++)
{
cin>>tmp;
dst.push(tmp);
src.push(i);
}
for(i=1;i<=n;i++)
{
dstTop=dst.front();
while(!src.empty())
{
if(src.front()<=dstTop)
{
tmp=src.front();
src.pop();
st.push(tmp);
}
else
break;
}
if(st.top()==dstTop)
{
st.pop();
}
else
{
r=false;
break;
}
dst.pop();
}
if(r)
cout<<"Yes";
else
cout<<"No";
cout<<endl;
cin>>tmp;
}
cout<<endl;
cin>>n;
}
}
Re: prog 514 WA need sample input or check my algo thanks
Posted: Sat Jun 04, 2005 11:08 am
by tan_Yui
Hi, sunnycare and everyone.
Following input may help you for debugging.
Input :
Code: Select all
5
1 2 3 4 5
5 4 1 2 3
1 4 3 2 5
3 4 2 5 1
3 4 2 1 5
4 3 5 2 1
0
3
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
0
4
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1
0
10
5 7 10 9 8 6 4 3 2 1
5 6 4 8 7 3 2 9 1 10
0
0
Output :
Code: Select all
Yes
No
Yes
Yes
Yes
Yes
Yes
Yes
Yes
Yes
No
Yes
Yes
Yes
Yes
Yes
No
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
No
No
Yes
Yes
Yes
Best regards.