`
leonluchen
  • 浏览: 30398 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

USACO Section 1.4.3 [Arithmetic Progressions] Java题解

阅读更多
题意分析:
定义算术级数:一种序列a, a+b, a+2b, …,a+nb,a是非负整数,b是正整数
定义双平方:能表示成p方+q方的数,p和q为非负整数
给定N (3 <= N <= 25),要找的算术级数序列的长度;以及M (1 <= M <= 250),p和q的上限。
找出给定长度N的,所有序列元素都是双平方数的算术级数,输出a和b

解题思路:
这题的时间限制是5秒。首先决定在算术级数中找双平方还是在双平方中找算术级数。直觉是在双平方数中找算术级数,首先生成所有的双平方数,保存在一个boolean数组中,这个数组大小为250×250×2=125000。然后外层循环取a(从1开始在双平方数中取),内层循环取b(从1开始取到(125000-a)/(N-1),因为满足a+(N-1)*b <=125000),得到a,b后要验证是否能构成长度为n的算术级数,若能则储存结果。最后按b,a升序的顺数输出a,b。
最大数据实际计算时间约为1.5秒

代码实现:
https://github.com/leonlu/USACOJavaSolution/blob/master/USACOSection1/src/ariprog.java
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics