memset问题,求解释

#include<iostream>usingnamespacestd;inthash1[1000010];inthash2[1000010];intmain(){int... #include<iostream>
using namespace std;
int hash1[1000010];
int hash2[1000010];
int main()
{
int a,b,c,d;
int i,j;
while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF)
{
memset(hash1,0,sizeof(hash1));
memset(hash2,0,sizeof(hash2));//为什么超时,去掉一个改成for循环就不超

if((a > 0 && b > 0 && c > 0 && d > 0) || (a < 0 && b < 0 && c < 0 && d < 0))
{
printf("0\n");
continue;

}
int ans = 0, s;
for(i = 0; i <= 1000001; i++)
hash1[i] = hash2[i] = 0;
for(i = 1; i <= 100; i++)
{
for(j = 1; j <= 100; j++)
{
s = a * i * i + b * j * j;
if(s > 0)
hash1[s]++;
else
hash2[-s]++;
}
}
for(i = 1; i <= 100; i++)
{
for(j = 1; j <= 100; j++)
{
s = c * i * i + d * j * j;
if(s >= 0)
ans += hash2[s];
else
ans += hash1[-s];
}
}
printf("%d\n", 16 * ans);
}
return 0;
}
展开
 我来答
百度网友28b4182
2012-03-07 · TA获得超过7223个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:1874万
展开全部
memset其实就是相当于for
把全部分的都做一次,复杂度是1000010
而你循环的话复杂度是和N有关的.n不可能永远是1000010,所以不会超时
更多追问追答
追问
改成for(i = 0; i <= 1000001; i++)
hash1[i] = hash2[i] = 0;就不超时,
用memset就超时
追答
那你通过的时间是多少啊?可能是memset用时间比较多吧
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式