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. leetcode:栈

    1. evaluate-reverse-polish-notation Evaluate the value of an arithmetic expression in Reverse Polish ...

  2. 什么是DTO?

    DTO: Data Transfer Object Wikipedia定义:Data transfer object (DTO)[1][2] is an object that carries dat ...

  3. POJ-1990 MooFest---两个树状数组

    题目链接: https://vjudge.net/problem/POJ-1990 题目大意: 一群牛参加完牛的节日后都有了不同程度的耳聋,第i头牛听见别人的讲话,别人的音量必须大于v[i],当两头牛 ...

  4. 【[TJOI2017]DNA】

    [题目][https://www.lydsy.com/JudgeOnline/problem.php?id=4892] 好像用\(SAM\)做的都是\(dfs\)啊 其实这里也是搜索 如果用\(SAM ...

  5. 【Java-Method】读《重构》有感_Java方法到底是传值调用还是传引用调用(传钥匙调用)

    今天读<重构>P279, Separate Query from Modifier,将查询函数和修改函数分离. 问题的产生 突然想到 Java 的传对象作为参数的方法到底是 传引用调用,还 ...

  6. 第18章 SysTick—系统定时器—零死角玩转STM32-F429系列

    第18章     SysTick—系统定时器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...

  7. 121. Best Time to Buy and Sell Stock——Leetcode

    Say you have an array for which the ith element is the price of a given stock on day i. If you were ...

  8. C# while语句

    一.C# while语句 while语句是用于重复执行程序代码的语句. 语法格式如下: while(boolean-expression){    embedded-statement} 当boole ...

  9. Android 最新学习资料收集

    收集这份资料的灵感来源于我的浏览器收藏夹快爆了,后来在github 上也看到了很优秀的开源库的收集资料,非常的好,但是太过于多,也不够新,所以决定自己来做一个.原始的markdowm文件已经放到git ...

  10. SpringBoot学习11:springboot异常处理方式1(自定义异常页面)

    SpringBoot 默认的处理异常的机制:SpringBoot 默认的已经提供了一套处理异常的机制.一旦程序中出现了异常 SpringBoot 会向/error 的 url 发送请求.在 sprin ...