寒假算法题打卡:

 传送门

题目背景

小 W 喜欢读书,尤其喜欢读《约翰克里斯朵夫》。

题目描述

最近小 W 准备读一本新书,这本书一共有 pp 页,页码范围为 0 \sim p-10∼p−1。

小 W 很忙,所以每天只能读一页书。为了使事情有趣一些,他打算使用 NOI2012 上学习的线性同余法生成一个序列,来决定每天具体读哪一页。

我们用 x_ixi​ 来表示通过这种方法生成出来的第 ii 个数,也即小 W 第 ii 天会读哪一页。这个方法需要设置 33 个参数 a,b,x_1a,b,x1​,满足 0\leq a,b,x_1\lt p0≤a,b,x1​<p,且 a,b,x_1a,b,x1​ 都是整数。按照下面的公式生成出来一系列的整数:

x_{i+1} \equiv a \times x_i+b \pmod pxi+1​≡a×xi​+b(modp)

其中 \bmodmod 表示取余操作。

但是这种方法可能导致某两天读的页码一样。

小 W 要读这本书的第 tt 页,所以他想知道最早在哪一天能读到第 tt 页,或者指出他永远不会读到第 tt 页。

输入格式

本题单测试点内有多组测试数据

第一行是一个整数 TT,表示测试数据组数。

接下来 TT 行,每行有五个整数 p, a, b, x_1, tp,a,b,x1​,t,表示一组数据。

输出格式

对于每组数据,输出一行一个整数表示他最早读到第 tt 页是哪一天。如果他永远不会读到第 tt 页,输出-1−1。

来理解别人的代码:

BSGS算法(大小步算法)主要解决A^x=B(mod C)已知ABC求x的值。

 

该题目将公式进行转变一下得到An的通项,因为题目中直接给了P为质数,所以直接就可以套用到BSGS算法。

*map<key,value>容器。map中的关键字只能出现一次,关键字不能修改,但值可以修改。

因为P为质数,根据费马小定理,A^p-1=1(mod)p。又知道a^0=1(mod p),所以幂的长度不超过p的循环。

代码的步骤先是第一个得到幂的函数,第二个是BSGS(先是求m的数值,再求b mod p的值,开始枚举前一半的结果,将其放到map中,再求得幂值,如果幂为0,则判断b是否为0,为0返回1,不为0返回-1。再进行后半部分的枚举,判断map中是否有相等的值,找到第一个相等的值就可以得出对应的im-j是最小的x。主函数就是对一些特殊情况的特判之后,再进行数值对应公式调整后,开始进行直接运用BSGS函数)

代码解传送门

题目背景

小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空。

有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖。

题目描述

给你云朵的个数 NN,再给你 MM 个关系,表示哪些云朵可以连在一起。

现在小杉要把所有云朵连成 KK 个棉花糖,一个棉花糖最少要用掉一朵云,小杉想知道他怎么连,花费的代价最小。

输入格式

第一行有三个数 N,M,KN,M,K。

接下来 MM 行每行三个数 X,Y,LX,Y,L,表示XX云和 YY 云可以通过 LL 的代价连在一起。

输出格式

对每组数据输出一行,仅有一个整数,表示最小的代价。

如果怎么连都连不出 KK 个棉花糖,请输出 No Answer

这里运用到Kruscal算法。

首先是创建一个无向图,然后将无向图里面的权值大小进行从小到大的排序,开始进行权值的遍历,进行判断,是否与相连形成一个环,如果没有形成一个环,那么将权值进行相加,如果形成环那么跳过该值进行下一个判断,最后得到的就是最小生成树。

代码中关键是实现判断是否成环,是首先定义一个数组,来存放祖先,然后,将其初始化为数组下标本身,再判断路径是否相同,路劲不相同就是没有形成环。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值