2019暑假杭二day4测试总结

2019暑假杭二day4测试总结

T1

题目大意

给定三个整数 a , b , c a,b,c a,b,c,求有多少个多项式 F ( x ) F(x) F(x)满足 F ( a ) = b , F ( b ) = c F(a)=b,F(b)=c F(a)=b,F(b)=c,多项式的系数都为非负整数,如果有无穷多个,输出 − 1 -1 1

sol

考场上我只写出了dfs的暴力。其实多项式的每一项系数都小于等于b,先特判掉等于b的情况,然后就可以把c看成b进制数(特判b等于1),算出多项式的系数,检验 F ( a ) F(a) F(a)是否等于b。

T2

题目大意

f n f_n fn为斐波那契数列的第 n n n项,求$ g c d ( a ∗ f n + b ∗ f n + 1 , c ∗ f n + d ∗ f n + 1 ) gcd(a*f_n+b*f_{n+1},c*f_n+d*f_{n+1}) gcd(afn+bfn+1,cfn+dfn+1),其中 1 &lt; = a , b , c , d &lt; = 1 0 3 , 1 &lt; = n &lt; = 1 0 18 1&lt;=a,b,c,d&lt;=10^3,1&lt;=n&lt;=10^{18} 1<=a,b,c,d<=103,1<=n<=1018

sol

我在考场上只写了暴力和 b = d = 0 b=d=0 b=d=0的部分分,我开始还以为正解是很高级的数据结构,结果是很巧妙地利用了更相减损术, c ∗ f n + d ∗ f n + 1 c*f_n+d*f_{n+1} cfn+dfn+1 ⌊ c a ⌋ \lfloor\frac{c}{a}\rfloor ac a ∗ f n + b ∗ f n + 1 a*f_n+b*f_{n+1} afn+bfn+1,得到 c % a ∗ f n + ( d − b ∗ ⌊ c a ⌋ ) f n + 1 c\%a*f_n+(d-b*\lfloor\frac{c}{a}\rfloor)f_{n+1} c%afn+(dbac)fn+1,通过这种方法化简原式,可以得到 g c d ( a ∗ f n + b ∗ f n + 1 , c ∗ f n + 1 ) gcd(a*f_n+b*f_{n+1},c*f_{n+1}) gcd(afn+bfn+1,cfn+1)的形式。可以先求出 g c d ( a ∗ f n + b ∗ f n + 1 , f n + 1 ) gcd(a*f_n+b*f_{n+1},f_{n+1}) gcd(afn+bfn+1,fn+1),这个等于 g c d ( a , f n + 1 ) = g c d ( a , f n + 1 % a ) gcd(a,f_{n+1})=gcd(a,f_{n+1}\%a) gcd(a,fn+1)=gcd(a,fn+1%a),可以用矩阵快速幂求出,设 g = g c d ( a , f n + 1 ) g=gcd(a,f_{n+1}) g=gcd(a,fn+1),则原式等于 g ∗ g c d ( ( a ∗ f n + b ∗ f n + 1 ) / g , c ∗ f n + 1 / g ) g*gcd((a*f_n+b*f_{n+1})/g,c*f_{n+1}/g) ggcd((afn+bfn+1)/g,cfn+1/g),根据gcd的定义,这等于 g c d ( a ∗ f n + b ∗ f n + 1 , c ∗ g ) = g c d ( ( a ∗ f n + b ∗ f n + 1 ) % ( g ∗ c ) , g ∗ c ) gcd(a*f_n+b*f_{n+1},c*g)=gcd((a*f_n+b*f_{n+1})\%(g*c),g*c) gcd(afn+bfn+1,cg)=gcd((afn+bfn+1)%(gc),gc),再次运用矩阵快速幂求出结果。

T3

题目大意

风和日丽的一天,小L和小G在玩游戏,游戏是在一个带权图 G = ( V , E ) G=(V,E) G=(V,E)上进行的,其中总点数 n n n是偶数,点有点权 w ( v ) w(v) w(v),边有边权 c ( e ) c(e) c(e)。游戏的规则是这样的:

  • 小L和小G轮流给图中的点染色,小L会把顶点染成黑色,小G会把顶点染成白色
  • 每人每轮必须给恰好一个点染色
  • 两个人都不能对⼀个已经染过色的点染色
  • n 2 \frac{n}{2} 2n轮游戏之后,每人都有一个包含了所有被他染色的点的集合。对于顶点集合 S S S,得到的分数是点权和加上导出子图(即这些点和两个端点都在点集内的所有边构成的子图)的边权和。

本着女士优先的绅士风度,小L请小G先染色。两⼈都想要使自己的分数比对方多,且越多越好。小L和小G都非常聪明,一定会用最优策略进行游戏。显然最后两人的分数是唯一确定的,求最终小G的分数减去小L分数。

sol

这题不是零分就是满分很显然我是零分。我开始想了一个错误的贪心。图有点权有边权很烦,我就把每个点给定一个值,为点权与和它相连的边权和。每次每人选值最大的点。结果一分都没有。

正解是正确的贪心。设 f f f为小G的分数减小L的分数,对于每条边,讨论它两端的颜色,如果都是白色,相当于每个白点对 f f f贡献了 1 2 \frac{1}{2} 21,如果都是黑色,相当于每个黑点对 f f f贡献了 − 1 2 -\frac{1}{2} 21,如果一黑一白,相当于黑点对 f f f贡献了 − 1 2 -\frac{1}{2} 21、白点对 f f f贡献了 1 2 \frac{1}{2} 21。所以依然可以给每个点一个优先值,为点权与和它相连的边权的 1 2 \huge\frac{1}{2} 21的和。每次每人选值最大的点, f f f为小G选出的点的优先值减小L选出的点的优先值。时间复杂度 Θ ( n l o g n ) \Theta(nlogn) Θ(nlogn)(排序)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值