USACO Section1.4 Arithmetic Progressions 解题报告
ariprog解题报告 —— icedream61 博客园(转载请注明出处)
------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
找出所有在双平方数集合S中长度为N的等差数列。
双平方数集合S:所有能表示成p²+q²的数的集合,其中0<=p,q<=M。
【数据范围】
3<=N<=25
1<=M<=250
【输入格式】
N
M
【输出格式】
没找到数列,输出“NONE”。
找到数列了,就输出所有数列,每个数列占一行,格式为“a b”,a为首项、b为公差。
输出顺序:先按b升序,再按a升序。
【输入样例】
5
7
【输出样例】
1 4
37 4
2 8
29 8
1 12
5 12
13 12
17 12
5 20
2 24
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
先把S求出来。
然后以其中任何一个数a为首项,任何一个比a大的数b为第二项,便可得到一个等差数列。再数到第N项,若此N项均在集合S中,则此数列合法。
最后将所有数列按照题目要求排序,输出即可。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
第一次提交,卡在了第7个点上,运行时错误。
拿来数据一试,发现本机运行时间1.5s,看来算法需要改进。
把我的ok函数中*改成+,时间变为1s,不大保险,继续改进。(不过继续改进暂时没思路,先交上去看看……)
这次发现自己又粗心了!OJ上并未说我超时,我的代码只被运行了0.003s就停了,就是单纯的运行时错误!
不过本机运行没报错……看了会儿代码找不到越界,先去吃饭~
去吃饭路上想到哪儿错了~果然是有个地方数组下标越界,严谨性还是太差啊!
第二次提交,AC。
原来这题时间限制不是1s啊……2.2s也能过,我多虑了……
------------------------------------------------------------------------------------------------------------------------------------------------
【代码】
/*
ID: icedrea1
PROB: ariprog
LANG: C++
*/ #include <iostream>
#include <fstream>
using namespace std; const int maxd = ; int N,M;
bool d[+maxd]; int L;
int num[maxd]; // maxd只是随便写的 int l;
struct Result
{
int a,b;
friend bool operator<(Result const &x,Result const &y) { return x.b<y.b || x.b==y.b && x.a<y.a; }
}A[]; bool ok(int a,int b)
{
//cout<<"a="<<a<<"\tb="<<b<<endl;
for(int i=;i<N;++i)
{
a+=b;
if(a>maxd || !d[a]) return false;
}
return true;
} void qsort(int l,int r) // 注意,这里的l和全局的l并存,不会有错误~
{
if(l>=r) return;
int i=l,j=r;
Result x=A[(l+r)>>];
while()
{
while(A[i]<x) ++i;
while(x<A[j]) --j;
if(i>j) break;
swap(A[i],A[j]);
++i; --j;
}
qsort(l,j); qsort(i,r);
} int main()
{
ifstream in("ariprog.in");
ofstream out("ariprog.out"); in>>N>>M; for(int p=;p<=M;++p)
for(int q=p;q<=M;++q) d[p*p+q*q]=true; for(int i=;i<=maxd;++i)
if(d[i]) num[++L]=i; for(int i=;i<=L;++i)
{
int a=num[i];
for(int j=i+;j<=L;++j)
{
int b=num[j]-a;
if(ok(a,b))
{
++l; A[l].a=a; A[l].b=b;
//cout<<"A=("<<a<<","<<b<<")"<<endl; cin.get();
}
}
} qsort(,l); if(!l) out<<"NONE"<<endl;
else for(int i=;i<=l;++i) out<<A[i].a<<" "<<A[i].b<<endl; in.close();
out.close();
return ;
}
USACO Section1.4 Arithmetic Progressions 解题报告的更多相关文章
- USACO Section1.5 Prime Palindromes 解题报告
pprime解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
- USACO Section1.5 Superprime Rib 解题报告
sprime解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
- USACO Section1.5 Number Triangles 解题报告
numtri解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
- USACO Section1.3 Combination Lock 解题报告
combo解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...
- USACO Section1.3 Prime Cryptarithm 解题报告
crypt1解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
- USACO Section1.3 Barn Repair 解题报告
barn1解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...
- USACO Section1.3 Mixing Milk 解题报告
milk解题报告 —— icedream61 博客园(转载请注明出处)----------------------------------------------------------------- ...
- USACO Section1.2 Palindromic Squares 解题报告
palsquare解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------ ...
- USACO Section1.2 Dual Palindromes 解题报告
dualpal解题报告 —— icedream61 博客园(转载请注明出处)-------------------------------------------------------------- ...
随机推荐
- 屏蔽各类弹窗广告(WPS、智能云输入法)
托盘中的广告“领取双11红包,最高1111元”的罪魁祸首是“智能云输入法” 广告在托盘中闪动: 结束SCSkinInst.exe后,托盘中的广告消失: 智能云输入法的安装路径可参考: C:\Progr ...
- pat甲级1085
1085 Perfect Sequence (25 分) Given a sequence of positive integers and another positive integer p. T ...
- *5. Longest Palindromic Substring (dp) previous blogs are helpful
Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...
- Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly.错误
错误如图示: 1.在php的目录下建立个文件夹tmp,这个有权限的问题,如果是ntfs的分区,就一定要添加evryone的控制权限,否则是没用的.2.在php.ini找到session.save_pa ...
- P1903 数颜色
题目 带修莫队题. 在询问上多加一个变量,记录是在那次修改之后的. 然后暴力修改. 就没了. 不过有一些修改的小技巧 #include<cstdio> #include<algori ...
- C语言文件操作类型速查
文件使用方式 含义 "r"(只读) 为输入打开一个文本文件,不存在则失败 "w"(只写) 为输出打开一个文本文件,不存在则新建,存在则删除后再新建 " ...
- C# for语句
一.C# for语句 for语句是C#语言中使用频率最高的循环语句. 1. for语句 语法格式如下: for(initializer; condition; iterator){ embedd ...
- Mac openssl 和curl源码编译
1.先编译openssl, 下载源码后解压,终端进入源码目录,输入命令配置编译环境:./Configure darwin64-x86_64-cc 等待配置完成后,输入make 和make insta ...
- java多线程同步以及线程间通信详解&消费者生产者模式&死锁&Thread.join()(多线程编程之二)
本篇我们将讨论以下知识点: 1.线程同步问题的产生 什么是线程同步问题,我们先来看一段卖票系统的代码,然后再分析这个问题: package com.zejian.test; /** * @author ...
- BZOJ1202: [HNOI2005]狡猾的商人(带权并查集)
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4577 Solved: 2249[Submit][Status][Discuss] Descript ...