寒假的第一天,终于有空再写题目了,专心备战了。本想拿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. MFC编程入门之六(对话框:创建对话框模板和修改对话框属性)

    本节开始为大家讲解偏向应用的知识--创建对话框.  对话框,大家应该很熟悉了,在我们常用的软件中大多都有对话框界面,例如,360安全卫士的主界面其实就是对话框,知识它做了很多美工方面的工作,将其大大美 ...

  2. eclipse右击打war包class没打上去的问题

    今天,遇到个诡异的问题,一个工程eclipse打war包class就是打不上,别的能打上,发现这样选择tomcat,打包成功,谨此备注.

  3. 多路径(multi-path)安装测试实例

    1.确保安装以下的包: device-mapper device-mapper-multipath [root@nticket1~]# rpm -qa "*device*" dev ...

  4. 任务调度JOB

    1.1       描述 定时执行数据库中的PL/SQL块,如存储过程.可以减化前端编程. 1.2       简单示例 本示例运行环境:oracle10g + pl/sql +xp. 使用存储过程每 ...

  5. 20160808_卸载OpenJDK

    1.查看信息 [root@localhost ~]# rpm -qa | grep jdkjava-1.6.0-openjdk-devel-1.6.0.0-1.50.1.11.5.el6_3.x86_ ...

  6. listview某一项不可点击

    listview 整个都不可操作 listview.setEnable(false); listview 某一项不可点击 重写 isEnable()方法,在方法内部判断position,不可点击的项 ...

  7. 如何设置session过期时间为30分钟

    今天在我的微博(Laruence)上发出一个问题: 我在面试的时候, 经常会问一个问题: “如何设置一个30分钟过期的Session?”, 大家不要觉得看似简单, 这里面包含的知识挺多, 特别适合考察 ...

  8. git服务器搭建

    http://blog.sina.com.cn/s/blog_904dee7f0101gait.html http://www.centoscn.com/image-text/install/2014 ...

  9. 在应用中更新App版本

    在应用中, 为了提高用户体验, 会提供更新版本的功能. 那么如何实现呢? 我写了一个简单的Demo, 说明一下, 需要注意几个细节. 使用了Retrofit和Rx处理网络请求. Github下载地址 ...

  10. css读书笔记2:css工作原理

    css就是一种先选择html元素,然后设定选中元素css属性的机制.css选择符合要应用的样式构成一条css规则. 为文档添加样式的3种方法: 1.行内样式,直接写在特定标签的style属性中:2.嵌 ...