首页 > 其他 > 详细

UVa133 - The Dole Queue

时间:2014-02-25 12:16:34      阅读:196      评论:0      收藏:0      [点我收藏+]

题目地址:点击打开链接

C++代码:

#include <iomanip>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
	int n,k,m;
	while(1)
	{
		cin>>n>>k>>m;
		if(n==0&&m==0&&k==0)
			break;
		vector<int> vi;
		int i;
		for(i=0;i<n;++i)
			vi.push_back(i+1);
		vector<vector<int> > vit;
		int size=n;
		int start_k=0;
		int start_m=n-1;
		int end_k,end_m;
		while(size>0)
		{
			end_k=(start_k+k-1)%size;
			end_m=(start_m-m%size+size+1)%size;
			vector<int> a;
			a.push_back(vi[end_k]);
			a.push_back(vi[end_m]);
			vit.push_back(a);
			int num=a[0]==a[1]?1:2;
			vector<int>::iterator itr1,itr2;
			itr1=vi.begin()+end_k;
			vi.erase(itr1);
			if(end_k!=end_m)
			{
				if(end_k<end_m)
					itr2=vi.begin()+end_m-1;
				else 
					itr2=vi.begin()+end_m;
				vi.erase(itr2);
			}
			if(end_m<end_k)
			{
				if(end_m==0)
					start_m=size-num-1;
				else
					start_m=end_m-1;
				if(end_k==size-1)
					start_k=0;
				else
					start_k=end_k+1-num;
			}
			else
			{
				if(end_k+1==end_m||end_k==end_m)
				{
					start_k=end_k;
					if(end_k==0)
						start_m=vi.size()-1;
					else start_m=start_k-1;
				}
				else
				{
					start_m=end_m-2;
					start_k=end_k;
				}
			}
			size=vi.size();
		}
		size=vit.size();
		for(i=0;i<size;++i)
		{
			if(vit[i][0]!=vit[i][1])
				cout<<setw(3)<<vit[i][0]<<setw(3)<<vit[i][1];
			else
				cout<<setw(3)<<vit[i][0];
			if(i!=size-1)
				cout<<",";
		}
		cout<<endl;
	}
	return 0;
}


UVa133 - The Dole Queue

原文:http://blog.csdn.net/leizh007/article/details/19823087

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!