⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4558171_re.cpp

📁 部分PKU上的源码
💻 CPP
字号:
#include<iostream>
#include<string>
#include<cstdio>
#include<algorithm>
using namespace std;
int stamps[30];
int number;
int ns;
int goal;
bool tie;
bool can_find;

int sum[5];
int at_search[5];
int type[5];
int max_s[5];

int bre[5];
int bsnumber;
int btype;
int bmax_s;

int cmp(const void *p1,const void *p2)
{
	return (*(int *)p1-*(int *)p2);
}
void getnewone(int searchn)
{
	for(int count=1;count<=searchn;count++)
	{
		bre[count]=stamps[at_search[count]];
	}
	bsnumber=searchn;
	btype=type[searchn];
	bmax_s=max_s[searchn];
}
void deal(int searchn,int now)
{
	if(searchn==0)
	{
		memset(at_search,0,sizeof(at_search));
		sum[0]=0;
		type[0]=0;
		max_s[0]=0;
		deal(1,0);
		return;
	}
	if(searchn==5) return ;
	int count=now;
	while(count<number)
	{
		if(stamps[count]+sum[searchn-1]==goal)
		{
			at_search[searchn]=count;
			if(searchn==1)type[searchn]=1;
				else 
					if(count!=at_search[searchn-1]) type[searchn]=type[searchn-1]+1;
					else type[searchn]=type[searchn-1];
			max_s[searchn]=stamps[count];

			if(can_find==false)
			{
				getnewone(searchn);
			}
			else
			{
				if(btype<type[searchn]) getnewone(searchn);
				else
					if(btype==type[searchn])
					{
						if(bsnumber>searchn) getnewone(searchn);
						else 
							if(bsnumber==searchn) 
							{
								if(bmax_s<max_s[searchn]) getnewone(searchn);
								else if(bmax_s==max_s[searchn]) tie=true;
							}
					}
			}
			can_find=true;
		}
		else 
			if(stamps[count]+sum[searchn-1]<goal)
			{
				at_search[searchn]=count;
				sum[searchn]=stamps[count]+sum[searchn-1];
				if(searchn==1)type[searchn]=1;
				else 
					if(count!=at_search[searchn-1]) type[searchn]=type[searchn-1]+1;
					else type[searchn]=type[searchn-1];
				max_s[searchn]=stamps[count];
				deal(searchn+1,count);
			}
		else return;
		count++;
	}
	
}

int main()
{
	int i=0;
	number=0;
	while(cin>>stamps[i])
	{
		i++;
		if(stamps[i-1]==0)
		{
			qsort(stamps,number,sizeof(int),cmp);
			while(cin>>goal)
			{
				tie=false;
				can_find=false;
				if(goal==0) break;
				deal(0,0);
				if(can_find)
				{
					if(tie)
					{
						printf("%d (%d): tie\n",goal,btype);
					}
					else
					{
						printf("%d (%d): ",goal,btype);
						for(int count=1;count<=bsnumber;count++)
						{
							printf("%d ",*(bre+count));
						}
						printf("\n");
					}
				}
				else
				{
					printf("%d ---- none\n",goal);
				}

			}
			number=0;
			i=0;
		}
		else number++;
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -