/*
经济学上有个“海盗分金”模型,是说5个海盗抢得100枚金币,他们按抽签的顺序依次提方案:
首先由1号提出分配方案,然后5人表决,超过半数同意方案才被通过,否则他将被扔入大海喂鲨鱼,依此类推。
*/
#include <iostream>
#define MAX_VALUE 2000000000
using namespace std;
int* solve(int n,int c);
void print(int *tmp,int n,int t)
{
	for(t=t-n;t>0;t--)
		cout<<'\t';
	for(int i=0;i<n;i++)
	{
		cout<<tmp[i]<<'\t';
	}
	cout<<'\n';
}
int *plusResult(int n,int c)
{
	int *tmp=solve(n,c);
	int *result=new int[n+1]();
	int i,k,min,count=0;
	for(k=0;k<(n+1)/2;k++)
	{
		for(i=0,min=0;i<n;i++)
		{
			if(tmp[i]<tmp[min])
				min=i;
		}
		count+=result[min+1]=tmp[min]+1;
		tmp[min]=MAX_VALUE;
	}
	result[0]=c-count;
	delete[] tmp;
	return result;
}
int* solve(int n,int c)
{
	int *tmp=new int[n]();
	if(n>3)
	{
		return plusResult(n-1,c);
	}
	else if(n<3)
	{
		return tmp;
	}
	tmp[0]=c;
	tmp[1]=0;
	tmp[2]=0;
	return tmp;
}
int main()
{
	int* result,n,c;
	cout<<"请输入海盗数量和珠宝数量:";
	cin>>n>>c;
	cout<<"海盗编号:\t";
	int i;
	for(i=1;i<=n;i++)
		cout<<i<<"\11";
	cout<<endl;
	for(i=3;i<=n;i++)
	{
		result=solve(i,c);
		cout<<"当只剩"<<i<<"个海盗时:"; 
		print(result,i,n);
		delete result;
	}
	return 0;
}