记录编号 44579 评测结果 AAAAAAAAAT
题目名称 [长郡中学2004] 慈善的约瑟夫 最终得分 90
用户昵称 GravatarCloud 是否通过 未通过
代码语言 C++ 运行时间 1.908 s
提交时间 2012-10-19 09:59:42 内存使用 3.15 MiB
显示代码纯文本
#include<fstream>
#include<set>
#include<deque>
using namespace std;
int main(void)
{
	ifstream fin("jose.in");
	ofstream fout("jose.out");
	int n,m=0;
	deque<int> dq;
	deque<int>::iterator p;
	set<int> s;
	set<int>::iterator q,j;
	int i=0;
	fin>>n;
	for(i=1;i<=n;i++)
		dq.push_back(i);
	while(s.size()!=1)
	{
		for(i=0,p=dq.begin();dq.size()!=1;i++)
		{
			if(p==dq.end())
				p=dq.begin();
			if(i%2)
			{
				s.insert(*p);
				p=dq.erase(p);
			}
			else
				p++;
		}
		p=dq.begin();
		q=s.upper_bound(*p);
		if(q==s.end())
		{
			m+=2*(s.size()+1);
			break;
		}
		for(;q!=s.end();q++)
		{
			m++;
			j=q,q--;
			s.erase(j);	
		}
		if(s.size()==1)
			break;
		s.insert(*p),dq.pop_back();
		for(q=s.begin();q!=s.end();q++)
			dq.push_back(*q);
		s.clear();
	}
	fout<<m;
	fin.close();
	fout.close();
	return 0;
}