码迷,mamicode.com
首页 > 其他好文 > 详细

[NOIP2014普及组]珠心算测验

时间:2014-12-02 14:44:35      阅读:547      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   ar   color   os   sp   for   on   

题目地址:

ayyzvijos:http://pingce.ayyz.cn/vijos/Problem_Show.asp?id=2015

vijos:https://vijos.org/p/1911

COGS:http://218.28.19.228/cogs/problem/problem.php?pid=1809

题目来源:NOIP2014普及组第一题

bubuko.com,布布扣bubuko.com,布布扣

问题分析:作为普及组的第一题,这个难度是可以的,而且有坑点。初步读题,我们会想到这样一种情况:

count.in count.out

5

1 2 3 4 5

3

 

 

 

问题在于,3=1+2,4=1+3,而5=2+3=1+4。那么5算几次呢,再次读题:

其中有多少个数,恰好等于集合中另外两个(不同的)数之和?

可以看出,5只算一次。

这样,这道题的思路就很简单了:

因为数据规模很小,暴力枚举三个元素,判断前两个元素的和是否等于第三个。同时,开一个boolean数组,如果相等,第三个元素对应位置设为 true 。最后统计 true 的个数输出即可。

时间复杂度:O(n3)

空间复杂度:O(n)

参考程序:

bubuko.com,布布扣
program count;
var
a:array[1..100] of longint;
b:array[1..100] of boolean;
i,j,k,l,m,n:longint;
begin
assign(input,count.in);
reset(input);
assign(output,count.out);
rewrite(output);
readln(n);
for i:=1 to n do read(a[i]);
readln;
fillchar(b,sizeof(b),false);
for i:=1 to n do
  for j:=1 to n do
    for k:=1 to n do
    if (i<>j)and(j<>k)and(i<>k) then
    if a[j]+a[k]=a[i] then b[i]:=true;
m:=0;
for i:=1 to n do
if b[i] then inc(m);
writeln(m);
close(input);
close(output);
end.
count.pas

 

[NOIP2014普及组]珠心算测验

标签:style   blog   http   ar   color   os   sp   for   on   

原文地址:http://www.cnblogs.com/changke/p/4137225.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!