寒假的第一天,终于有空再写题目了,专心备战了。本想拿usaco上的题目练手热身,结果被磕住了T T。
其实这是一道穷举题,一开始我在穷举a,b,但是怎么优化就是过不了Test 8,后来参照NOCOW上的解题弄了se和list两个数组,也算是终于通过了,这时候已经是Submission #7了。(啊,有两次是因为没开文件,一次是因为没打‘NONE’)
总之,祝寒假的OI学习顺利吧~All or Nothing, Now or Never!

program ariprog2;
var se:array[..*] of boolean;
list:array[..] of longint;
a0,b0:array[..] of longint;
m,n,i,j,a,b,count,ans_count,temp:longint;
flag,code:boolean;
procedure start;
var i,j:longint;
begin
count:=;
for i:= to m do
for j:= to m do
begin
if se[i*i+j*j]=false then
begin
se[i*i+j*j]:=true;
inc(count);
list[count]:=i*i+j*j;
end;
end;
end;
procedure pd(a,b:longint);
var i:integer;
flag:boolean;
begin
if a+(n-)*b>m*m* then exit;
flag:=true;
for i:= to n- do
if se[a+i*b]=false then
begin
flag:=false;
break;
end;
if flag then
begin
inc(ans_count);
a0[ans_count]:=a;
b0[ans_count]:=b;
end;
end; begin
assign(input,'ariprog.in');reset(input);
assign(output,'ariprog.out');rewrite(output);
readln(n);
readln(m);
start;
for i:= to count- do
for j:=i+ to count do
begin
a:=list[i];
if list[j]<a then a:=list[j];
b:=abs(list[j]-list[i]);
pd(a,b);
end;
if ans_count<> then
begin
for i:= to ans_count- do
for j:=i+ to ans_count do
begin
if (b0[i]>b0[j]) or ((b0[i]=b0[j])and(a0[i]>a0[j])) then
begin
temp:=b0[i];b0[i]:=b0[j];b0[j]:=temp;
temp:=a0[i];a0[i]:=a0[j];a0[j]:=temp;
end;
end;
for i:= to ans_count do
writeln(a0[i],' ',b0[i]);
end
else
writeln('NONE');
close(input);close(output);
end.

ariprog2

Executing...
Test 1: TEST OK [0.000 secs, 720 KB]
Test 2: TEST OK [0.000 secs, 720 KB]
Test 3: TEST OK [0.000 secs, 720 KB]
Test 4: TEST OK [0.000 secs, 720 KB]
Test 5: TEST OK [0.022 secs, 720 KB]
Test 6: TEST OK [0.151 secs, 720 KB]
Test 7: TEST OK [1.717 secs, 720 KB]
Test 8: TEST OK [3.823 secs, 720 KB]
Test 9: TEST OK [3.834 secs, 720 KB]

All tests OK.

话说,过了的那个程序可以再优化的。
题目讲输出范围小于10000我就直接上O(N^2)排序了,用快排可以再省一点时间吧。

顺便把那个怎么也过不掉Test 8的程序也发上来好了,不能让自己白打这么久!!

program ariprog;
var se,cha:array[..*] of boolean;
m,n,i,j,k,l,a,b,max,num_se:longint;
flag,code:boolean; procedure start;
var i,j:integer;
begin
fillchar(se,sizeof(se),false);
for i:= to m do
for j:= to m do
se[i*i+j*j]:=true;
fillchar(cha,sizeof(cha),false);
for i:= to m do
for j:= to m do
for k:= to i do
for l:= to j do
cha[i*i+j*j-k*k-l*l]:=true;
end; begin
assign(input,'ariprog.in');reset(input);
assign(output,'ariprog.out');rewrite(output);
readln(n);
readln(m);
max:=*m*m;
code:=false;
start;
for b:= to trunc(max/(n-)) do
if cha[b]=true then
begin
for a:= to *m*m do
begin
if a+(n-)*b>max then break;
if se[a]=true then
begin
i:=;flag:=true;
while i<=n- do
begin
if se[a+i*b]=false then
begin
flag:=false;
break;
end;
inc(i);
end;
if flag then
begin
code:=true;
writeln(a,' ',b);
end;
end;
end;
end;
if not code then writeln('NONE');
close(input);close(output);
end.

ariprog

Section 1.4 Arithmetic Progressions的更多相关文章

  1. USACO Section 1.4 Arithmetic Progressions 解题报告

    题目 题目描述 现在给你一个数集,里面的数字都是由p^2+q^2这种形式构成的0 <= p,q <= M,我现在需要你在其中找出一个长为N的等差数列,数列中的第一个数字为a,公差为b,当你 ...

  2. 洛谷P1214 [USACO1.4]等差数列 Arithmetic Progressions

    P1214 [USACO1.4]等差数列 Arithmetic Progressions• o 156通过o 463提交• 题目提供者该用户不存在• 标签USACO• 难度普及+/提高 提交 讨论 题 ...

  3. [Educational Codeforces Round 16]D. Two Arithmetic Progressions

    [Educational Codeforces Round 16]D. Two Arithmetic Progressions 试题描述 You are given two arithmetic pr ...

  4. Dirichlet's Theorem on Arithmetic Progressions 分类: POJ 2015-06-12 21:07 7人阅读 评论(0) 收藏

    Dirichlet's Theorem on Arithmetic Progressions Time Limit: 1000MS   Memory Limit: 65536K Total Submi ...

  5. POJ 3006 Dirichlet's Theorem on Arithmetic Progressions (素数)

    Dirichlet's Theorem on Arithmetic Progressions Time Limit: 1000MS   Memory Limit: 65536K Total Submi ...

  6. poj 3006 Dirichlet's Theorem on Arithmetic Progressions【素数问题】

    题目地址:http://poj.org/problem?id=3006 刷了好多水题,来找回状态...... Dirichlet's Theorem on Arithmetic Progression ...

  7. (素数求解)I - Dirichlet&#39;s Theorem on Arithmetic Progressions(1.5.5)

    Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit cid=1006#sta ...

  8. USACO 1.4 Arithmetic Progressions

    Arithmetic Progressions An arithmetic progression is a sequence of the form a, a+b, a+2b, ..., a+nb ...

  9. Educational Codeforces Round 16 D. Two Arithmetic Progressions (不互质中国剩余定理)

    Two Arithmetic Progressions 题目链接: http://codeforces.com/contest/710/problem/D Description You are gi ...

随机推荐

  1. jprofiler安装图解及破解码

    原文:http://blog.csdn.net/lifuxiangcaohui/article/details/38677889 环境: 1.sun jdk1.6.0 2.jprofiler_wind ...

  2. HTML的超链接

    一.超链接概念: 超链接也叫 URL 中文翻译为资源定址器.这个定址器的功能主要告诉浏览器根据 URL的地址找到所需的资源.作用于连接资源 二.超链接的常用属性: 1.href=指定目的地,当有了hr ...

  3. SqlServer扩展存储过程

    1. 扩展存储过程xp_cmdshell用法: --1.启用 SP_CONFIGURE RECONFIGURE GO SP_CONFIGURE RECONFIGURE GO --2.用法 master ...

  4. PHP 实现多服务器共享 SESSION 数据

    PHP 实现多服务器共享 SESSION 数据 2011 年 12 月 05 日评论暂缺 一.问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一 ...

  5. armp启动

    1.启动apahcehttpd.exe -k starthttpd.exe -k restart 重启httpd.exe -k install 安装 2.php启动apache.conf文件添加:Lo ...

  6. 晒幸福, qq空间晒法

    qq空间晒法 1.成为老婆之后,还是说新交的女朋友,这会让女朋友感动

  7. HTML5自定义属性对象Dataset简介

    一.html5 自定义属性介绍 我之前翻译的“你必须知道的28个HTML5特征.窍门和技术”一文中对于HTML5中自定义合法属性data-已经做过些介绍,就是在HTML5中我们可以使用data-前缀设 ...

  8. jq--回到顶部

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  9. DOM中元素节点、属性节点、文本节点

    DOM中有12中节点,但最常用到的是元素节点,属性节点,文本节点. 元素节点的节点类型(nodeType)是1: 属性节点的节点类型(nodeType)是2: 文本节点的节点类型(nodeType)是 ...

  10. 简述 Ruby 与 DSL 在 iOS 开发中的运用

    阅读本文不需要预先掌握 Ruby 与 DSL 相关的知识 何为 DSL DSL(Domain Specific Language) 翻译成中文就是:"领域特定语言".首先,从定义就 ...