先说结果,本场考试三傻逼题,我这个逗比只有220,虽然虐了rank2 70分,但在我校比较没有任何意义,这都不能AK真是见了鬼了
本次考试考的是初等数论,T1约数T2T3唯一分解,T1各种不爽,T2T3各种无聊
T1 War
题意
有N个点,点有权,ij间边的权值为gcd(wi,wj),任意两点间可连边,求最大生成树。n,wi<=1e6。
扯淡
一看到数据范围整个人都吓傻了
然后这道题我是最后做的...
我们发现wi<=1e6,这显然是暗示我们开桶的节奏
对于每个数wi,找它的约数
约数相同的用一个链表串起来
然后再遍历每个约数的链表 这里有一个技巧 比如链表有abc个元素 并不用两两尝试ab,bc,ac连n*(n-1)/2条边 只需要ab,bc这样连n-1条边
要是前者那我们还不如普通暴力 脑补一下这么做正确性显然 连边什么的用并查集
然后我找约数用了sqrt(n),于是复杂度nsqrt(n)
我们可以轻松过掉1e5,但1e6有点卡啊
听说大家都打的普通暴力,以至于也没啥动力,只想弃疗
然后数据除了1e3全是1e6,我就呵呵呵呵呵了,被卡成n^2一样的30分
那么知道正解后我更想骂自己傻逼
为什么要用点找边呢!难道不会用边找点么!
为什么要用数找约数呢!当然是要用约数找数啊!
这就是sqrt和log的区别!
为什么艾氏筛法高效!就是因为每找到一个素数后让它作为约数直接j+=i!
果然我对算法理解还不够深!不过有了这次的经历那必是刻骨铭心了!
这实在是不难想,我为什么想不到呢!
因为当时只想弃疗没想着优化,习惯也不好,没想有没有更快的等效处理方法直接去打?我怎么能这样!
题解
从大到小枚举每个数作为gcd,把wi开个桶直接找点连边
T2 Homework
题意
有一个数x,已知和a的gcd为a1,和b的lcm为b1,求x的可能情况。
扯淡
无聊题,就是有点麻烦
关于为什么是90分我也不太清楚>.< 极端情况?
题解
大力分解质因子
根据gcd=min(ei,ej), lcm=max(ei,ej)讨论一下就好
T3 Game
题意
1~n的数随你选,选了乘起来,乘起来必须是平方数,求最大的平方数。
题解
这就是道一眼题
我们发现
作为平方数每一个ei肯定是偶数
那么我们先贪心 把1~n乘起来
对于那些pi的ei是奇数的,就舍去一次方,相当于去掉了这个素数,也不会有其他影响,必是对的
这次还是有很多遗憾
但结果也不是很差的样子(然而我校是神校)
感觉这种考试相对考得好 也就是可以让自己的心情好一点
不过这次考试还是有意义的
至少让我对于“不要用数找约数,要用约数找数”这一点刻骨铭心
虽然一直都知道,但真正用起来却不一定反映的过来,很多知识都是这样
明天终于不考了...我终于可以屯题了...