0
已解决
黄子扬
初级天翼
初级天翼
魔改的之前写的UVA514,WA了50分
之前写的UVA:(因为UVA一直炸,所以到现在还是Waiting,不知道分数)
#include<bits/stdc++.h>
using namespace std;
int t,a[1005];
int main()
{
while(1)
{
cin>>t;
if(a[1]==0&&t==0)
return 0;
while(1)
{
int h=1;
cin>>a[1];
if(a[1]==0)
{
cout<<endl;
break;
}
for(int j=2;j<=t;j++)
cin>>a[j];
stack<int>s;
for(int j=1;j<=t*2;j++)
{
if(h==t)
break;
if(j<=a[h])
s.push(j);
if(s.top()==a[h])
s.pop(),h++;
}
if(h<t)
cout<<"No"<<endl;
else
cout<<"Yes"<<endl;
}
}
return 0;
}
本题代码:(WA50分)
#include<bits/stdc++.h>
using namespace std;
int t,a[1005];
int main()
{
int nnn;
cin>>nnn;
for(int i=1;i<=nnn;i++)
{
cin>>t;
int h=1;
cin>>a[1];
if(a[1]==0)
{
cout<<endl;
break;
}
for(int j=2;j<=t;j++)
cin>>a[j];
stack<int>s;
for(int j=1;j<=t*2;j++)
{
if(h==t)
break;
if(j<=a[h])
s.push(j);
if(s.top()==a[h])
s.pop(),h++;
}
if(h<t)
cout<<"Impossible"<<endl;
else
cout<<"Possible"<<endl;
}
return 0;
}
思路很简单,模拟一个个入栈再判断栈顶罢了
0
已采纳
赵逸凡
初级启示者
初级启示者
我的方法跟你不一样,但也是WA 50分 看不出哪里错了
核心:
for(int i=1; i<=n; i++)
{
cin >> x;
if(x>maxa)
{
for(int j=maxa+1; j<x; j++)
s.push(j);
maxa=x;
}
else
{
if(x==s.top()) s.pop();
else
ss=1;
}
}
最好在循环末加上
while(!q.empty())q.pop()
0