ZOJ 1259 Rails 代码及分析
ZOJ 1259 事实证明,STL是要超时的
#include <stdio.h>
int main()
{
int Station[1001],In[1000];
bool bk,end;
int n,i,rer;
int *ptrS,*ptrI;
while(scanf("%d",&n))
{
if(n==0)
break;
while(1)
{
bk = false;
for(i=0;i<n;++i)
{
scanf("%d",&In[i]);
if(In[i]==0)
{
bk = true;
break;
}
}
if(bk == true)
break;
rer = 1;
end = false;
ptrS = Station;
ptrI = In;
*ptrS = 0;
for(i=0;i<n;++i)
{
if(In[i]==rer)
rer++;
else
{
if(In[i]==*ptrS)
{
--ptrS;
}
else if(In[i]>rer)
{
while(rer<In[i])
{
ptrS++;
*ptrS = rer;
++rer;
}
++rer;
}
else
{
end = true;
break;
}
}
}
if(end==true)
printf("No\n");
else
printf("Yes\n");
}
printf("\n");
}
return 0;
}
此题应为标准的堆栈问题
本人于昨天开始考虑,鉴于是一个ZOJ近400AC量的弱,采用了STL STACK……无数次失败后查看了网上下的代码,发现与本人思路接近,于是采用类似的数组做法(大量指称操作,那人是个变态)0.08s ac
关键要有一个变量rer
用STL的模版栈可以很快编出代码,但是……超时
首先初始化栈Station和变量rer(Station.push(0),(未完)
#include <stdio.h>
int main()
{
int Station[1001],In[1000];
bool bk,end;
int n,i,rer;
int *ptrS,*ptrI;
while(scanf("%d",&n))
{
if(n==0)
break;
while(1)
{
bk = false;
for(i=0;i<n;++i)
{
scanf("%d",&In[i]);
if(In[i]==0)
{
bk = true;
break;
}
}
if(bk == true)
break;
rer = 1;
end = false;
ptrS = Station;
ptrI = In;
*ptrS = 0;
for(i=0;i<n;++i)
{
if(In[i]==rer)
rer++;
else
{
if(In[i]==*ptrS)
{
--ptrS;
}
else if(In[i]>rer)
{
while(rer<In[i])
{
ptrS++;
*ptrS = rer;
++rer;
}
++rer;
}
else
{
end = true;
break;
}
}
}
if(end==true)
printf("No\n");
else
printf("Yes\n");
}
printf("\n");
}
return 0;
}
此题应为标准的堆栈问题
本人于昨天开始考虑,鉴于是一个ZOJ近400AC量的弱,采用了STL STACK……无数次失败后查看了网上下的代码,发现与本人思路接近,于是采用类似的数组做法(大量指称操作,那人是个变态)0.08s ac
关键要有一个变量rer
用STL的模版栈可以很快编出代码,但是……超时
首先初始化栈Station和变量rer(Station.push(0),(未完)
浙公网安备 33010602011771号