NOIP后OI被停惹 专心学习中= = 总结题解还得慢慢来
现在再做模拟赛都好吃力 啊GDKOI加油(逃
JZOJ比赛链接
4934.A
问题求一个序列A中有几个数能被另一个序列B中的数相加相减得到
首先我们考虑到 两个数相加相减能得到的最小数是他们的gcd
于是我们对于全部B求gcd 找到他们能组成的最小的数
于是如果A中的数是这个最小数的倍数 那么他就能被得到
var
f,a:array[0..100000] of longint;
n,m,i,j,k,x:Longint;
function gcd(x,y:longint):longint;
begin
if x mod y=0 then exit(y)
else exit(gcd(y,x mod y));
end;
begin
assign(input,'a.in');reset(input);
assign(output,'a.out');rewrite(output);
readln(n);
for i := 1 to n do read(a[i]);
readln(m);
for i := 1 to m do read(f[i]);
x:=a[1];
for i := 2 to n do x:=gcd(x,a[i]);
k:=0;
for i := 1 to m do
if f[i] mod x=0 then inc(k);
writeln(k);
close(input);close(output);
end.
4935.B
感觉之前在CF上做过…
题目就是给定k,求构造一棵树使得它的联通子图个数为k
首先考虑一棵树的联通子图个数统计方式
对于一棵树 它的每个非叶子节点对答案的贡献为所有儿子节点的答案+1的乘积
即对于树T的非叶子节点i,有
Ansi=(Ansj+1)∗(Ansk+1)∗...
(其中j,k等均为i的儿子节点)
于是当我们知道
Ans1
时,就可以倒推这棵树
一种倒推方法如下:
当我们建到一个点
X
时
①若
②若
AnsX
为奇数,则建立一个点
Y′
与其连接
对于
X′
的
AnsX
为
N/2
对于
Y′
的
AnsY
为
N−1