| ||||||||||
| 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:这里的测试数据都过了,武大acm也能通过,这里始终wa,快疯了,各位有没有其他的数据?In Reply To:这里的测试数据都过了,武大acm也能通过,这里始终wa,快疯了,各位有没有其他的数据? Posted by:csucrab at 2008-08-12 10:59:26 > 武大acm本题网址
> http://acm.whu.edu.cn/oak/problem/problem.jsp?problem_id=1212
>
> Run ID User Problem Result Memory Time Language Length Submit Time
> 77688 csucrab 1212 Accepted 1128 5 G++ 3140 2008-08-12 10:34:51.0
>
> 但是在这里仍然是wa,请问还有什么特别的数据吗,快疯了,谢谢。
我更晕,北大的通过了,武大的却过不掉
#include<iostream>
#include<algorithm>
using namespace std;
int n,length,r,data[101],used[101],max1,sum,Find,ok,aim,o,res;
int search(int begin,int end,int use,int add)
{ if(add==end-1||begin>=end-1||(end-begin-use)/2+Find<aim)
return 0;
int i=end-1;
int p=0;
if(used[end-1])
{
while(used[i]&&i>add)
{ i--;
p++;
}
if(i==add)
return 0;
return search(begin,i+1,use-p,add);
}
if(data[add]+data[end-1]>length)
return 0;
for(i=add;i<end-1;i++)
if(used[i]==0&&data[i]+data[end-1]>=length)
break;
if(i==end-1||data[i]+data[end-1]>length)
{ int j,t=0,f,former=0;
for(j=add;j<i;j++)
{
if(used[j]==0)
{ if(data[j]==former)
continue;
data[end-1]+=data[j];
used[j]=1;
f=j;
t=1;
f++;
while(used[f])
{ f++;
}
if(f==end-1)
{
used[j]=0;
data[end-1]-=data[j];
return 0;
}
if(search(begin,end,use+1,f))
return 1;
former=data[j];
data[end-1]-=data[j];
used[j]=0;
}
}
}
else
{ int j;
used[i]=1;
data[end-1]=length;
Find++;
if(Find==aim-1||Find==aim)
return 1;
for(j=begin;j<end-1;j++)
{
if(used[j]==0)
break;
}
if(j<end-1)
{
if(search(begin,end-1,use+1,j))
return 1;
}
used[i]=0;
Find--;
data[end-1]-=data[i];
return 0;
}
return 0;
}
int main()
{
while(1)
{ ok=0;
cin>>n;
if(n==0)
break;
int i;
sum=max1=0;
for(i=1;i<=n;i++)
{
cin>>data[i];
if(data[i]>max1)
max1=data[i];
sum+=data[i];
}
memset(used,0,404);
sort(data+1,data+n+1);
for(res=n;res>=2;res--)
{
if(sum%res||(length=sum/res)<max1)
continue;
Find=0;
o=0;
for(i=n;i>=1;i--)
{
if(data[i]==length)
{ Find++;
o=i;
}
}
if(o==0)
o=n+1;
if(Find==res)
{ cout<<sum/res<<endl;
ok=1;
break;
}
ok=0;
aim=res;
if(search(1,o,0,1))
{ cout<<sum/res<<endl;
ok=1;
break;
}
memset(used,0,404);
}
if(ok)
continue;
cout<<sum<<endl;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator