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 解题报告的更多相关文章

  1. USACO Section1.5 Prime Palindromes 解题报告

    pprime解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...

  2. USACO Section1.5 Superprime Rib 解题报告

    sprime解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...

  3. USACO Section1.5 Number Triangles 解题报告

    numtri解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...

  4. USACO Section1.3 Combination Lock 解题报告

    combo解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...

  5. USACO Section1.3 Prime Cryptarithm 解题报告

    crypt1解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...

  6. USACO Section1.3 Barn Repair 解题报告

    barn1解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...

  7. USACO Section1.3 Mixing Milk 解题报告

    milk解题报告 —— icedream61 博客园(转载请注明出处)----------------------------------------------------------------- ...

  8. USACO Section1.2 Palindromic Squares 解题报告

    palsquare解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------ ...

  9. USACO Section1.2 Dual Palindromes 解题报告

    dualpal解题报告 —— icedream61 博客园(转载请注明出处)-------------------------------------------------------------- ...

随机推荐

  1. pat甲级1107

    1107 Social Clusters (30 分) When register on a social network, you are always asked to specify your ...

  2. MHA故障切换方案

    mha故障切换当master 挂掉后会自动切换到slave01上去,可以看 tailf /var/mha_log/manager.log4个问题:1,切换后且原master01mysql服务启动OK, ...

  3. hdu-2609 How many---最小表示法模板+set判重

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2609 题目大意: 有n个有01组成的字符串,每个字符串都代表一个项链,那么该字符串就是一个环状的结构 ...

  4. 2017.11.8 面向对象分析与设计(UML)---UML的作用及分类

    用到的工具 startUML 一些界面操作的说明 蓝色框是用来选择形状的,特别是接口的时候 UML有什么用? `` 有很多人认为,UML的主要用途就是软件设计!也有人认为,如果你不是开发人员,是难以理 ...

  5. fluent Python

    1.1 Python风格的纸牌 Python collections模块中的内置模块:namedtuple https://www.liaoxuefeng.com/wiki/0013747381250 ...

  6. caffe中protobuf问题

    安装caffe时,protobuf在使用import caffe时,python版的会提示protobuf的问题,原因是因为protobuf的安装是用python-proto,而在安装anaconda ...

  7. =>符号的意义

    => 是 Oracle 中调用存储过程的时候, 指定参数名进行调用.一般是, 某些参数有默认值的时候,你需要跳过某些参数来进行调用. 下面是具体的例子. 参数的默认值SQL> CREATE ...

  8. jsp <form>表单提交中如何在value属性中写表达式

    <input type="text" name="grop_id" value="<%=rs.getString(2)%>" ...

  9. 浅谈PHP中的数组和JS中的数组

    最近在做前后端对接的时候,遇到一个问题,前端要求返回的数据格式是左边的,但是我通过json_encode返回到的数据格式是右边的   注意:数据格式从"[]"(数组)变成了&quo ...

  10. thinkphp 跳转外网代码(php通用)

    thinkphp 提供了一个重定向但是在跳转外部网站的时候就会比较麻烦 下面一种方法还不错, < ?php //重定向浏览器 header("Location: http://www. ...