【JZOJ4934~4936】[17.1.12GDKOI模拟A题解]

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 为偶数,则建立一个点 X 与其连接
②若 AnsX 为奇数,则建立一个点 Y 与其连接
对于 X AnsX N/2
对于 Y AnsY N1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值