题目地址:
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普及组第一题
问题分析:作为普及组的第一题,这个难度是可以的,而且有坑点。初步读题,我们会想到这样一种情况:
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)
参考程序:
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
时间: 2024-11-11 04:01:18