HDU1276 士兵队列训练问题

HDU1276 士兵队列训练问题

题目

在这里插入图片描述

AC代码

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int h[5010];
int main()
{
	int t,n;
	while(cin>>t)
	{
		while(t--)
		{
			cin>>n;
			if(n<=3)
			{
				printf("1");
				for(int i=2;i<=n;i++)		
					printf(" %d",i);
				
				if(n!=0)
					printf("\n");
				continue;
			}
			memset(h,0,sizeof h);
			
			int s=n;
			
			int f=1,u;
			
			while(1)
			{
				
				if(f)
				{
					u=0;
					for(int i=1;i<=n;i++)
					{
						if(h[i]!=-1)
						{
							u++;
							if(u==2)
							{
								u=0;
								h[i]=-1;
								s--;
								
							}
						}
					}
					f=0;
				}
				else
				{
					u=0;
					for(int i=1;i<=n;i++)
					{
						if(h[i]!=-1)
						{
							u++;
							if(u==3)
							{
								u=0;
								h[i]=-1;
								s--;
							}
						}
					 } 
					 f=1;
				}
				
				if(s<=3)
					break;
			}
			
			int ff=1;
			for(int i=1;i<=n;i++)
			{
				if(h[i]!=-1)
				{
					if(ff)
						printf("%d",i);
					else
						printf(" %d",i);
					ff=0;
				}
				if(s==0)
					break;
			}
			if(n!=0)
				printf("\n");
		}
	}
	return 0;
 } 
posted @ 2021-07-13 08:16  斯文~  阅读(31)  评论(0)    收藏  举报

你好!