| ||||||||||
| 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 | |||||||||
这题太坏了,wa无数次,发现这题加一组数据可以rejudge无数程序用I64d
0 0 0 0 0
10000000000
不用I64d
0 0 0 0 0
1410065408 (越界的程序也能AC~~~)...
偶的程序wa无数次,高手指点一下。(hash...)
#include<stdio.h>
#include<string.h>
const __int64 M=55457; //prim
struct record
{
__int64 value;
__int64 cnt;
}hash[M];
__int64 mypow[101];
int main()
{
__int64 a1,a2,a3,a4,a5,i,j,k,ans,sum,value;
unsigned __int64 p;
for(i=-50;i<=50;i++)
{
mypow[i+50]=i*i*i;
}
while(scanf("%I64d%I64d%I64d%I64d%I64d",&a1,&a2,&a3,&a4,&a5)!=EOF)
{
memset(hash,0,sizeof(hash));
for(i=-50;i<=50;i++)
{
if (!i) continue;
for(j=-50;j<=50;j++)
{
if (!j) continue;
value=-a1*mypow[i+50]-a2*mypow[j+50];
p=unsigned __int64(value*value)%M;
while(hash[p].cnt && hash[p].value!=value) p=(p+1)%M;
if (!hash[p].cnt)
{
hash[p].value=value;
hash[p].cnt++;
}
else hash[p].cnt++;
}
}
ans=0;
for(i=-50;i<=50;i++)
{
if (!i) continue;
sum=a3*mypow[i+50];
for(j=-50;j<=50;j++)
{
if (!j) continue;
sum+=a4*mypow[j+50];
for(k=-50;k<=50;k++)
{
if (!k) continue;
value=sum+a5*mypow[k+50];
p=unsigned __int64(value*value)%M;
while(hash[p].cnt && hash[p].value!=value) p=(p+1)%M;
ans+=hash[p].cnt;
}
sum-=a4*mypow[j+50];
}
}
printf("%I64d\n",ans);
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator