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代表红色,当它完整的时候是一个闭合的环形.现在它在某一个节点断裂了,之前的环形也随之变成了直线形.从两端开始收集 ...
随机推荐
- SSL+socket详解
转自:http://hengstart.iteye.com/blog/842529 一. SSL概述 SSL协议采用数字证书及数字签名进行双端实体认证,用非对称加密算法进行密钥协商,用对 ...
- setting up a IPSEC/L2TP vpn on CentOS 6 or Red Hat Enterprise Linux 6 or Scientific Linux
This is a guide on setting up a IPSEC/L2TP vpn on CentOS 6 or Red Hat Enterprise Linux 6 or Scientif ...
- C# html转mht
项目中引入cdosys.dll组件,位置: C:\Windows\System32\cdosys.dll CDO.ADODB 这些类都来自于cdosys.dll组件 /// <summary& ...
- CSS居中方法
css居中方法非常多,根据工作的实际情况采用恰当方法,可取到事半功倍的效果. 就常见的一些居中方法整理如下: 代码如下: <div class="con"> <d ...
- DHCP 协议的 8 种消息类型及功能服务器
1) 主机发送 DHCP Discover 广播包在网络上寻找 DHCP 服务器: 单播数据包, 地址. 2) DHCP 服务器向主机发送 DHCP Offer 单播数据包,包含 IP 地址.MAC ...
- C# 鼠标事件弹框
if (e.Button == MouseButtons.Right) { if (gridView1.GetFocusedRowCellValue("color").ToStri ...
- 【01-14】hibernate时间生成
package rugal.sample.core.entity; import java.util.Date; import java.util.UUID; import javax.persist ...
- VMware 虚拟机(linux)增加根目录磁盘空间
今天查看学校的监控报修系统,不能访问了!!!系统运行很慢,用top命令查看发现内存使用率90%,用"df -h ”查看“/”目录使用率已达到80%,导致系统运行很慢.我用以下方法扩大根目录磁 ...
- LD_LIBRARY_PATH vs LIBRARY_PATH
LIBRARY_PATH is used by gcc before compilation to search for directories containing libraries that n ...
- FUSE and File System
FUSE: File system in USErspace. So what is a file system? A file system maps file paths to file cont ...