| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:关于此题可以证明如下结论。。。。。In Reply To:关于此题可以证明如下结论。。。。。 Posted by:zhucheng at 2004-12-08 23:03:21 > 设A,B两人分得value为i的marble分别为ai,bi个。
> 假设存在平分方法,那么可以找到一种分法满足如下条件:
> |a1-b1|<=3;
> |a2-b2|<=4;
> |a3-b3|<=5;
> |a4-b4|<=4;
> |a5-b5|<=6;
> |a6-b6|<=5;
> 证明如下:
> 1)|a1-b1|<=3;
> 假设a1-b1〉3,那么bi-ai>0(i=2,3,4,5,6)至少有一个成立,
> B可以用一个个value为i的marble交换A的i个value为1的marble.
> 从而使|a1-b1|减小。如果还有a1-b1>3成立,继续交换。
> 2)|a2-b2|<=4;
> 假设a2-b2>4那么那么bi-ai>0(i=1,3,4,5,6)至少有一个成立
> 1。如果b4-a4>0,那么B可以用1个value为4的marble交换A的2个value为2的marble.
> 2。从而使|a2-b2|减小,同理b6-a6>0成立时可以。。
> 如果有且仅有b5-a5>0成立,那么因为2*(a2-b2)>8,
> 必有b5-a5>8/5,有b5-a5>=2;
> 于是B可以用2个value为5的marble交换A的5个value为2的marble.
> 从而使|a2-b2|减小。
> 3。以后同理可证。
> 3)
> 。。。。。。。。。。
> ,。。。
>
my code
#include <iostream>
using namespace std;
int marble[6];
const int limit[]={3,4,5,4,6,5};
bool half(int d,int next)
{
if(d==0)
return true;
if(next==0)
return false;
int i;
for(i=marble[next-1];i>=0;i--)
{
if(d>=i*next)
{
marble[next-1]-=i;
if(half(d-i*next,next-1))
return true;
marble[next-1]+=i;
}
}
return false;
}
int main()
{
int i,test=1,sum=0;
for(i=0;i<6;i++)
{
cin>>marble[i];
if(marble[i]>limit[i])
{
marble[i]=limit[i]-(marble[i]-limit[i])%2;
}
sum+=marble[i]*(i+1);
}
while(sum!=0)
{
if(sum%2==0&&half(sum/2,6))
{
cout<<"Collection #"<<test++<<":"<<endl;
cout<<"Can be divided.\n"<<endl;
}
else
{
cout<<"Collection #"<<test++<<":"<<endl;
cout<<"Can't be divided.\n"<<endl;
}
sum=0;
for(i=0;i<6;i++)
{
cin>>marble[i];
if(marble[i]>limit[i])
{
marble[i]=limit[i]-(marble[i]-limit[i])%2;
}
sum+=marble[i]*(i+1);
}
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator