hdu 1276 士兵队列训练问题(水题)
士兵队列训练问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7307 Accepted Submission(s): 3332
2 20 40
1 7 19 1 19 37
lcy | We have carefully selected several similar problems for you: 1282 1279 1274 1201 1237
用模拟瞎写的,讲道理应该用队列或者栈来写。。。注意特判,否则会WA
#include <iostream> #include <cstring> using namespace std;int a[5050];
int re(int n)
{
int k=0;
for(int i=1;i<=n;i++)
if(a[i]!=0) k++;
return k;
}
int main()
{
int t;
cin>>t;
while(t–)
{
memset(a,0,sizeof(a));
int n,flag=0;
cin>>n;
if(n<=3)
{
cout<<1;
for(int i=2;i<=n;i++)
cout<<’ ‘<<i;
cout<<endl;
continue;
}
for(int i=1;i<=n;i++)
a[i]=1;
while(re(n)>3)
{
if(flag==0)
{
int flag2=0;
for(int i=1;i<=n;i++)
{
if(a[i-1]==1 && a[i]==1)
{
a[i]=0;
flag2=0;
}
else if(a[i-1]==0 && a[i]==1 && flag2==1)
{
a[i]=0;
flag2=0;
}
else if(a[i-1]==0 && a[i]==1 && flag2==0)
flag2=1;
}
flag=1;
}
else
{
int flag2=0;
for(int i=1;i<=n;i++)
{
if(a[i-1]==0 && a[i]==1 && flag2==2)
{
a[i]=0;
flag2=0;
}
else if(a[i-1]==0 && a[i]==1 && flag2==0)
flag2=1;
else if(a[i-1]==0 && a[i]==1 && flag2==1)
flag2=2;
}
flag=0;
}
}
cout<<1;
for(int i=2;i<=n;i++)
{
if(a[i]==1)
cout<<’ ‘<<i;
}
cout<<endl;
}
return 0;
}
.5kkdqdezd7g0.png)
