您的位置:首页 > 其它

USACO 1.4 Arithmetic Progressions

2016-11-01 22:43 381 查看
有话要说

感觉这题很水,虽然前一篇text刚刚讲了搜索(n皇后),不过这题貌似就是简单的枚举,因为m最大只有250,n最大只有25,当然你可能会说,搜索是枚举的一种实现方法orz。。。。

解题思路

等差数列公式k+n*d,通过枚举k,d,求得满足条件的所有解。

解题步骤

1.用数组标记所有的p*p+q*q

2.计算p*p+q*q最大值为M=m*m*2,计算d最大值为M/(n-1)。

3.根据题目要求的答案排序,循环,d,k;

for(int d=1;d<=D;d++)
{
for(int k=0;k<=M;k++)
{
if(dic[k]==1)
{
int flag=0;
for(int i=1;i<=n;i++)
{
if((k+i*d>M||dic[k+i*d]==0)&&i!=n)
{
flag=1;
break;
}
}
if(flag==0)
{
FLAG=1;
printf("%d %d\n",k,d);
}

}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  usaco 枚举