地址:
点击打开链接
这个题目,emmm,第一次解除用hash解题的。很新奇的思路。直接上代码吧,其实就是把方程左右改了一下位置。最后乘以16(2^4)
code:
#include <stdio.h>
#include <string.h>
int hash[2000005];
int main( )
{
int a, b, c, d;
while( ~scanf( "%d%d%d%d", &a, &b, &c, &d ) )
{
if( a> 0&& b> 0&& c> 0&& d> 0|| a< 0&& b< 0&& c< 0&& d< 0 )
{
printf( "0\n" );
continue;
}
memset( hash, 0, sizeof( hash ) ); //置于上面会超时
int cnt= 0;
for( int i= 1; i<= 100; ++i )
{
for( int j= 1; j<= 100; ++j )
{
hash[ a* i* i+ b* j* j+ 1000000 ]++;
}
}
for( int i= 1; i<= 100; ++i )
{
for( int j= 1; j<= 100; ++j )
{
cnt+= hash[ 1000000- c*i *i- d*j *j ];
}
}
printf( "%d\n", cnt* 16 );
}
}