Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

奇怪!所有的测试数据都试了,怎么还是WA??

Posted by naponean at 2006-08-19 02:13:45 on Problem 1011
#include <iostream>
#include <vector>
using namespace std;

class Stick
{
public:
	vector<int> m_Length;
	vector<int> m_Num;
	vector<int> m_Temp;
	vector<int> m_Stack;
	int m_Total;
	int m_Result;
public:
	Stick()
	{
		m_Length.reserve(50);
		m_Num.reserve(50);
		m_Temp.reserve(50);
		m_Stack.reserve(64);
	}

	bool HaveTry()
	{
		int left,bottom;
		for(int i=0;i<m_Temp.size();)
		{
			if(0==m_Temp[i])
			{
				i++;
				continue;
			}
			bottom=m_Stack.size();
			m_Stack.push_back(i);
			left=m_Result-m_Length[i];
			m_Temp[i]--;

			while(left>0)
			{
				for(int j=m_Stack[m_Stack.size()-1];j<m_Temp.size();)
				{
					if(0==m_Temp[j] || left<m_Length[j])
					{
						j++;
						continue;
					}
					else
					{
						m_Stack.push_back(j);
						left-=m_Length[j];
						m_Temp[j]--;
					}
				}
				if(left!=0)
				{
					//find next one to replace last 
					int last;
					while(1)
					{	
						if(bottom+1==m_Stack.size())
						{
							if(0==bottom)
								return false;
							m_Temp[m_Stack[m_Stack.size()-1]]++;
							m_Stack.pop_back();
							int degree=0;
							for(int sum=0;sum<m_Result;degree++)
							{
								sum+=m_Length[m_Stack[m_Stack.size()-1-degree]];
							}
							bottom-=degree;
							left=0;
						}
						last=m_Stack[m_Stack.size()-1]+1;
						for(;last<m_Temp.size();last++)
						{
							if(0!=m_Temp[last])
								break;
						}
						if(last==m_Temp.size())
						{
							m_Temp[m_Stack[m_Stack.size()-1]]++;
							left+=m_Length[m_Stack[m_Stack.size()-1]];
							m_Stack.pop_back();
						}
						else
							break;
					}
					m_Temp[m_Stack[m_Stack.size()-1]]++;
					m_Temp[last]--;
					left+=m_Length[m_Stack[m_Stack.size()-1]];
					left-=m_Length[last];
					m_Stack[m_Stack.size()-1]=last;
				}
			}
		}
		return true;
	}

	int Process()
	{
		if(m_Length.empty())
			return 0;
		for(m_Result=m_Length[0];m_Result<m_Total;m_Result++)
		{
			if(m_Total%m_Result!=0)
				continue;
			m_Temp=m_Num;
		    m_Stack.clear();
			if(HaveTry())
				return m_Result;
		}
		return m_Result;
	}
};

int main()
{
	Stick st;
	vector<int> temp(51,0);
	int n,num;
	while(1)
	{
		cin>>num;
		if(num<=0)
			break;
		st.m_Stack.clear();
		st.m_Total=0;
		st.m_Length.clear();
		st.m_Num.clear();
		temp.assign(51,0);
		for(int i=0;i<num;i++)
		{
			cin>>n;
			if(n>50|| n<=0)
				continue;
			st.m_Total+=n;
			temp[n]++;
		}

		for(int j=50;j>0;j--)
		{
			if(0!=temp[j])
			{
				st.m_Length.push_back(j);
				st.m_Num.push_back(temp[j]);
			}
		}
		cout<<st.Process()<<endl;
	}

	return 0;
}


Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator