USACO Section 1.4 Arithmetic Progressions 解题报告
题目
题目描述
现在给你一个数集,里面的数字都是由p^2+q^2这种形式构成的0 <= p,q <= M,我现在需要你在其中找出一个长为N的等差数列,数列中的第一个数字为a,公差为b,当你找到多个这样的数列时,输出数列的a b值,输出顺序按照b的值从小到大排序,当b的值一样的时候,按照a的值从小到大排序输出。
数据范围
(3 <= N <= 25)
(1 <= M <= 250)
样例输入
5
7
样例输出
1 4
37 4
2 8
29 8
1 12
5 12
13 12
17 12
5 20
2 24
解题思路
数据量比较小,所以还是可以暴力的,开始的时候为了方便直接用set进行保存数据,之后遍历set。结果果然超时了。然后换了一种写法,用数组来保存O(1)的查找时间,最终顺利AC。之后我加了一个剪枝,发现时间可以缩短0.4秒,最终以0.2秒多跑完所有样例。
解题代码
/*
ID: yinzong2
PROG: ariprog
LANG: C++11
*/
#define MARK
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int MAXN = 125000+10;
bool exist[MAXN];
int num[MAXN];
struct Num {
int a,b;
}ans[MAXN];
int N, M;
bool check(int a, int b) {
for(int i = 0; i < N; i++) {
int temp = a+i*b;
if(!exist[temp]) {
return false;
}
}
return true;
}
bool cmp(Num A, Num B) {
if(A.b < B.b) return true;
else if(A.b == B.b) {
return A.a < B.a;
}
else return false;
}
int main() {
#ifdef MARK
freopen("ariprog.in", "r", stdin);
freopen("ariprog.out", "w", stdout);
#endif // MARK
while(~scanf("%d%d", &N, &M)) {
memset(exist, false, sizeof(exist));
int cnt = 0;
for(int i = 0; i <= M; i++) {
for(int j = 0; j <= M; j++) {
int temp = i*i+j*j;
if(!exist[temp]) {
exist[temp] = true;
num[cnt++] = temp;
}
}
}
sort(num, num+cnt);
bool flag = false;
int id = 0;
for(int i = 0; i < cnt; i++) {
int a = num[i];
for(int j = i+1; j < cnt; j++) {
int b = num[j] - a;
if(a+(N-1)*b > M*M*2) break;
if(check(a,b)) {
ans[id].a = a;
ans[id].b = b;
id++;
flag = true;
}
}
}
if(flag) {
sort(ans, ans+id, cmp);
for(int i = 0; i < id; i++) {
printf("%d %d\n", ans[i].a, ans[i].b);
}
}else {
printf("NONE\n");
}
}
return 0;
}
USACO Section 1.4 Arithmetic Progressions 解题报告的更多相关文章
- USACO Section1.4 Arithmetic Progressions 解题报告
ariprog解题报告 —— icedream61 博客园(转载请注明出处)-------------------------------------------------------------- ...
- USACO Section 1.3 Prime Cryptarithm 解题报告
题目 题目描述 牛式的定义,我们首先需要看下面这个算式结构: * * * x * * ------- * * * <-- partial product 1 * * * <-- parti ...
- USACO Section 1.3 Combination Lock 解题报告
题目 题目描述 农夫John的牛从农场逃脱出去了,所以他决定用一个密码锁来把农场的门锁起来,这个密码锁有三个表盘,每个表盘都是环形的,而且上面刻有1~N,现在John设了一个开锁密码,而且这个锁的设计 ...
- USACO Section 1.3 Barn Repair 解题报告
题目 题目描述 某农夫有一个养牛场,所有的牛圈都相邻的排成一排(共有S个牛圈),每个牛圈里面最多只圈养一头牛.有一天狂风卷积着乌云,电闪雷鸣,把牛圈的门给刮走了.幸运的是,有些牛因为放假,所以没在自己 ...
- USACO Section 1.3 Mixing Milk 解题报告
题目 题目描述 Merry Milk Makers 公司的业务是销售牛奶.它从农夫那里收购N单位的牛奶,然后销售出去.现在有M个农夫,每个农夫都存有一定量的牛奶,而且每个农夫都会有自己的定价.假设所有 ...
- USACO Section 1.2 Dual Palindromes 解题报告
题目 题目描述 有一些数(如 21),在十进制时不是回文数,但在其它进制(如二进制时为 10101)时就是回文数. 编一个程序,从文件读入两个十进制数N.S.然后找出前 N 个满足大于 S 且在两种以 ...
- USACO Section 1.2 Palindromic Squares 解题报告
题目 题目描述 输入一个基数B,现在要从1到300之间找出一些符合要求的数字N.如果N的平方转换成B进制数之后是一个回文串,那么N就符合要求.我们将N转换成B进制数输出,然后再将N的平方转换成B进制数 ...
- USACO Section 1.2 Milking Cows 解题报告
题目 题目描述 有3个农夫每天早上五点钟便起床去挤牛奶,现在第一个农夫挤牛奶的时刻为300(五点钟之后的第300个分钟开始),1000的时候结束.第二个农夫从700开始,1200结束.最后一个农夫从1 ...
- USACO Section 1.1 Broken Necklace 解题报告
题目 题目描述 有一串项链,它是由红蓝白三种颜色的珠子组成的,b代表蓝色,w代表白色,r代表红色,当它完整的时候是一个闭合的环形.现在它在某一个节点断裂了,之前的环形也随之变成了直线形.从两端开始收集 ...
随机推荐
- 移动端touch事件影响click事件的相关解决方法
preventDefault()的方法,阻止事件的默认行为. 在移动端,手指点击一个元素,会经过:touchstart --> touchmove -> touchend -->cl ...
- url 取出文件扩展名
/**url 取出文件扩展名 *///方法一function getExt1($url) { $arr = parse_url($url); $file = basename($arr[' ...
- myeclipse中的类恢复之前的版本方法
1.右键要恢复的文件,点击如下的选项. 2.界面中出现之前保存的版本,双击要查看的版本,可对比版本之间的不同之处.点击Replace,恢复版本.
- CSS的基本概念
<!--CSS 一.概念:CSS的全称是Cascading Style Sheets,层叠样式表,用来控制HTML标签样式,在美化网页中起到非常重要的作用 CSS的编写格式是键值对形式的,比如 ...
- android mediaplayer
- 第四十五节,logging日志模块
用于便捷记录日志且线程安全的模块 单文件日志 basicConfig()模块函数 功能:创建日志文件和写日志模式[有参] 使用方法:模块名称.basicConfig(filename="日志 ...
- Angularjs Directive(指令)机制
转:http://damoqiongqiu.iteye.com/blog/1917971 1.一点小说明 指令的作用:实现语义化标签 我们常用的HTML标签是这样的: <div> < ...
- As3.0 类的【枚举】
As3.0 类的枚举 “枚举”是您创建的一些自定义数据类型,用于封装一小组值.ActionScript 3.0 并不支持具体的枚举工具,这与 C++ 使用 enum 关键字或 Java 使用 En ...
- python引入模块时import与from ... import的区别
import datetime是引入整个datetime包,如果使用datetime包中的datetime类,需要加上模块名的限定. import datetime print datetime.da ...
- Spring 实例化bean的三种方式:
方法一:使用构造器实例化bean java代码: package com.model; public class User { private String username; public User ...