Codeforces 300E(数学)】的更多相关文章

题意:给定k个数字,求最小的正整数n,使得“n的阶乘”是“这k个数字的阶乘的积”的倍数.1<=k<=1e6,数字ai满足1<=ai<=1e7 分析:如果我们能对着k个数字的阶乘的结果分解质因数,那么就可以根据每个质因数的指数来二分最后的答案 问题的关键就是如何分解a1!a2!a3!a4!..... 先可以预处理出1..MAX每个数在式子中出现了多少次(对于ai,也就是1~ai中间所有数字出现次数+1),这可以用差分做 我们知道了cnt[1..MAX]后,接下来就是考虑分解了 我们从…
http://codeforces.com/contest/1004/problem/D 题意:网格图给定到中心点的曼哈顿距离数组, 求该图n,m及中心点位置 首先可以观察到距离最大值mx一定在某个角上, 可将它调整到位置(n,m) 设中心点(x, y) 则可以得到 n-x+m-y=mx 再注意到假若图无限大, 则对每个距离d的取值一定有4*d个 即第一个取值数<4*d的d可以调整为中心点的x坐标 然后就可以暴力枚举因子判断了 #include <iostream>#include &l…
昨天训练赛的题..比划了好久才想出来什么意思 之前想的是暴力for循环求出来然后储存数组 后来又想了想 自己萌的可以.. 思路就是求出来每个人与他的右边的人在一起能拿钱的概率(V(或)的关系)然后*2000 又想起高考概率无情的2分...哭一会先 另外 这题的输出我没看懂...试了好几遍才过...(好吧我承认我看答案了) #include<stdio.h> #include<string.h> #include<algorithm> #include<math.h…
题意:给定N个数a1,a2,a3...aN,现在要求最小的n满足 n!/(a1!*a2!*...*aN!) 是一个正整数的最小的n. 分析:这题的想法很明确,就是分解a1!*a2!*...*aN!,把其分解成质因子相乘的形式,这个都很熟悉了,然后就是对每一个质因子二分搜索出一个数字下界,最后求其中最大的一个数,问题的关键就是如何分解这样一个表达式成一个质因子相乘的形式.使用一个cnt数组来表示每一个数的在乘积中出现的次数,然后从后往前假设一个数出现了k次,那么如果这个数是素数则不用更新,如果一个…
大意: 给定n元素序列, q个操作: (1)区间乘 (2)单点除(保证整除) (3)区间求和对m取模 要求回答所有操作(3)的结果 主要是除法难办, 假设单点除$x$, $x$中与$m$互素的素因子可以直接欧拉求逆, 其余因子维护一个向量即可. 这种沙茶题结果各种细节出错改了一个多小时......太菜了 #include <iostream> #include <algorithm> #include <cstdio> #include <math.h> #…
很有趣的一道题,题解戳这. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; + ; + ; int a[maxn], f[maxm]; int main() { int n; scanf("%d", &n); ; i < n; i++) scanf("%d"…
B. Mushroom Scientists time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output As you very well know, the whole Universe traditionally uses three-dimensional Cartesian system of coordinates. In th…
题面 传送门 分析 假设k是固定的,那访问到的节点编号就是\(1+(a·k \mod n )\),其中a为正整数. 通过找规律不难发现会出现循环. 通过题目中的图片我们不难发现 只有k=1,2,3,6得到的四种结果,而其他的情况都和这4种结果的某种一样 所以我们只要考虑n的因数即可 对于固定的k我们发现访问到的节点为1,1+k,1+2k.....n-k+1,一共\(\frac{n}{k}\) 项,根据等差数列求和公式和为\(\frac{n(n-k+2)}{2k}\) 所以我们只要在\(O(\sq…
题面 传送门 分析 通过二分答案,我们显然可以求出数组中最大的数,即等差数列的末项 接着随机取一些数组中的数,对他们两两做差,把得到的差取gcd即为公差 例a={1,5,9,13},我们随机取了1 9 13,两两的差为8,4,12,取gcd为4 已知末项和公差即可求出首项 可以证明错误的概率< \(1.86185\times10 ^{-9}\) 具体证明我也不懂,可以看cf官方题解,需要用到莫比乌斯反演 注意生成随机数时不能直接用rand(),因为rand()的返回值<32768,而n很可能&…
真是脑残...擦 具体题解在这里 http://www.cnblogs.com/windysai/p/3619222.html 原本我为了防止两个数冲突,设置了好多判断,结果发现,如果两个数冲突,另外找两个 i,s+1-i输出就行了,因为两个数冲突 和必定为s+1,反正最后只是要求总和相同,找两个没有访问过得数输出不就行啦...我真是太脑残了,看别人的代码多简单,自己写了这么多不是WA就是TLE...哎..思维怎么总转不过弯呢 #include <iostream> #include <…