数论
文章平均质量分 69
流年冲淡时光
这个作者很懒,什么都没留下…
展开
-
HDU5391米勒拉宾
米勒拉宾模板直接套,主要就是一个威尔逊定理,在初等数论中,威尔逊定理给出了判定一个自然数是否为素数的充分必要条件。即:当且仅当p为素数时:( p -1 )! ≡ -1 ( mod p ),但是由于阶乘是呈爆炸增长的,其结论对于实际操作意义不大。注意特判四就行了#include#include#include#include#include#include#include原创 2015-08-16 11:56:53 · 833 阅读 · 0 评论 -
HDU5495求俩个1~n的数列按照相同的规则重排后的LCS
这题智商低,想了很久没有想到怎么做,其实想通了很简单,由于俩个数列都是1~n的排列,所以在每个位置的a[i]和b[i]建一条边,然后通过样例可以很明显看出来,建边之后会形成n多个环,而每个环视相互独立的,对于长度大于1的每个环都可以以牺牲一个值得代价取得最长公共子串。总有那么些巧妙地题是我这种智商低的想不到的。#include#include#include#include原创 2015-10-04 03:22:07 · 853 阅读 · 2 评论 -
Codeforces Round #324 (Div. 2) 数论乱搞过
可惜脑子不够快,手速也不够快,第二题想了好长时间才发现是一个很简单的规律,就是3^(3*n)-7*n;也就是每个位置都可以选一到三三个数,然后减去全部都是六的情况就行了,而且n为1的情况hint也给了,就很简单了,然而我还是想了半天。第三题构造题,也没什么说的。然后做第四题的时候已经没有时间了,可惜了,第四题表面上是一个数论题,然而其实乱搞就能过,没什么说的,不明白的看代码:#in原创 2015-10-07 16:14:28 · 370 阅读 · 0 评论 -
hdu5497删除一个序列的连续m个数使得逆序对数最少
题解:g_igi表示在ii前面比a_iai大的数的个数, f_ifi表示在ii后面比a_iai小的数的个数, 这两个都可以用树状数组轻松求出来. 那么对于一个长度LL的连续子序列, 删掉它之后逆序对减少的个数就是这段区间中g_igi的和 + 这段区间f_ifi的和 - 这段区间的逆序对个数. 求区间逆序对个数只要用一个树状数组维护就好了,原创 2015-10-04 21:28:06 · 857 阅读 · 2 评论 -
UVA1973*3用七个碎片拼成正方形,正方体的旋转和平移,即矩阵变换
状态搜索题,重点不是状态,而是这道题的代码,以及空间想象能力,当然,做个几个星期,以我的水平也不见得做的出,看了一下别人的代码和题解,基本上理解了,这里先讲一下,正方体的变换:1、首选我们要根据碎片,求出所有碎片的不重复的三维构形,可以推论得到碎片的最多不同构形有6*4=24种,其中6表示,无论是碎片还是立体都会有6个面,依次使6个面朝向自己,这样相当于有6种不同的旋转方式了(对于原创 2015-10-09 21:52:51 · 1319 阅读 · 0 评论 -
codeforces round #332
A题讨论四种情况就行,不多说。B题建立hash表就行了,找不到就是impossible,对应的坐标多了就是第二种,否则就是第一种,输出就行了,代码写的有点乱:#include#include#include#include#include#include#include#include#include#include#define LL __int64using原创 2015-11-21 16:33:31 · 402 阅读 · 0 评论 -
CF #328C题最小公倍数乘法溢出
这次只做了A,B俩题竟然没掉rating,amazing,而且A题忘记特判被别人黑了,交了俩发再次AC。A题注意特判,相等的情况,由于是A先,所以相等的时候是A赢,读了题竟然忘记了。B题乱猜的,写了几个发现是(n-2)^2,然后就交了,最后答案规律竟然真的是这个,然而并不能说明白为什么。C题其实也很简单,主要我竟然没有看出求LCM会乘法溢出。乘法溢出这里只要把公式变形一下特判下就行了。原创 2015-11-01 13:18:17 · 479 阅读 · 0 评论 -
UVA529加深迭代搜索,起点为1,终点为n,数列中的每个数由前面俩个数的和组成的最短数列
看到最短就应该想到bfs,然而并不行,这题是加深迭代搜索,控制深度,这里深度我试着用30,29,40前面俩个可行,最后一个WA了,自己感觉最后提个应该不是WA,而是T,系统给了WA。注意这里最大的一个剪枝,就是如果一个数翻ans-cur倍仍然小于n,这个数肯定不行。具体细节看代码:#include#include#include#include#include#include原创 2015-11-02 12:41:36 · 394 阅读 · 0 评论 -
连续序列分成m段,最大值最小化,二分经典
这题比较巧妙地去猜答案,二分,重点是怎么求m段的连续和是否满足,这里用了一个贪心,不大于x,就一直把线往后移,大于的话就加一条线。#include#include#include#include#include#include#include#include#includeusing namespace std;const int maxn=1e6+10;const原创 2016-03-03 19:58:32 · 2478 阅读 · 2 评论 -
Codeforces Round #344 (Div. 2) C题数列的前n个数进行m次升降排序
这题,当时做的时候想了半天没思路,其实也很简单,只是刷题少,没想到而已。这题还是比较巧妙地。首先我们要发现如果r1变成多个按r降序的排列。然后第二点,也是很难想到的一点就是,每次前面那个数列和后面再次排列的数列相比,多出来几个数,而这几个数要不是大数,要不是小数,而且后面在排序的时候,前面多出来这几个数是不会变的。所以这里有个辅助数组b[maxn],存储要用的数字按从小到大原创 2016-03-04 20:46:10 · 546 阅读 · 0 评论 -
UVA714给出n个数分成m个部分,使和最大的最小
这题,小白书上有讲,所以当时也没多想直接二分,分完之后,发现有问题,他说前面的尽量小,这里就要贪心,从后面贪心,只要和值不大于二分的值就一直二分,然后发现还是不对,看了别人的,忽略了一个问题,二分的时候x的初始值不能是零,因为我写的判断二分的函数比较特殊,所以如果判断的值小于全部的数也能过,所以,这里x的初值注意取全部数的最大值。#include#include#include原创 2016-03-24 17:57:19 · 1951 阅读 · 0 评论 -
leetcode之卡特兰数
这题用的一个递推关系是AC的,其实写一下很容易就能推出来公式,当然如果了解卡特兰公式的话可以很容易看出来,然后就可以用公式简化时间复杂度,这里我自己不是很了解卡特兰公式,所以用的递推,然后讨论下卡特兰公式:令h(0)=1,h(1)=1,catalan数满足递推式[1] :h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)*h(0) (原创 2016-11-18 13:08:43 · 1277 阅读 · 0 评论 -
HDU5496求整数序列的子串的并集和,map的简单使用
脑子笨想了好久才想懂这题是怎么回事,首先自己比赛的时候受上一场的BC的影响,感觉和上一场的C题类似,想都没想就直接开撸了,然后后来发现自己理解错题意了,这里就是按照题解说的来做的。考虑每个数字对最终答案的贡献. 对于每个数, 我们只算它出现在连续相同元素的第一个时的贡献, 这样会使计算简便很多. 假设这个数是a[i]a[i], 那么i后面的随便选有2^{n-i}2n−i种.原创 2015-10-04 18:58:53 · 805 阅读 · 0 评论 -
CF582A给出n个数的相互GCD,求这n个数,map的使用
反正比赛的时候没想到怎么做,主要应该还是智商问题,比赛的时候胡思乱想很久,没想到怎么做:其实也很简单:题意:由n个数,可以构成一个n*n的gcd矩阵 (每两个数之间)现在给你n*n个数(任意序),求出 矩阵对应的 n个数(任一合法答案)可知: 最大的数必然是要求的数。。。(不可能存在两个数的公约数是他)(如果最大的数有多个,那么MAX与MAX的公原创 2015-10-04 22:02:43 · 731 阅读 · 0 评论 -
UVA165连续邮资问题
这题由于大神题解写的比较详细,所以copy一下,原文链接:http://blog.csdn.net/shuangde800/article/details/7755452题目大意:某国家发行k种不同面值的邮票,并且规定每张信封上最多只能贴h张邮票。 公式n(h,k)表示用从k中面值的邮票中选择h张邮票,可以组成面额为连续的1,2,3,……n, n是能达到的最大面值之和。例如当h=3,k原创 2015-10-02 22:12:31 · 665 阅读 · 0 评论 -
UVA10061求不同进制的n!的数字位数和末尾零的个数
这题自己做的话估计很难做出来,本人比较菜,而且智商不够,同时看了别人题解了解了下斯特林公式,虽然此题并不能用斯特林公式,精度问题会WA,介绍下斯特林公式:普通计算时:N!=1*2*3*4*5*............*N;如果要计算N!后得到的数字,则我们可以知道其等于lgN!+1lgN!=lg1+lg2+lg3+lg4+lg5+....................翻译 2015-08-04 21:25:18 · 490 阅读 · 0 评论 -
uva10392不要被题目骗了,LL质因数分解
这题题目说的好吓人,然而还是用LL水,差点被吓到,质数分解原创 2015-08-04 22:03:57 · 592 阅读 · 0 评论 -
HDU5428质因数分解变形式
这题当时一定是脑抽了,已经想到了是质因数分解之后的最小俩个质因数的相乘,竟然还写错,int以内的质数有很多,看来我是想多了。其实最简单的方法就是把每个数质因数分解之后加入vector中排个序即可,然后直接直到vector的个数,很简单。另外注意这题要用LL。#include#include#include#include#include#include#include原创 2015-09-07 18:26:21 · 585 阅读 · 0 评论 -
小白书暴力之除法,最大乘积,分数拆分,双基回文数
除法;输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define LL原创 2015-09-09 11:19:24 · 645 阅读 · 0 评论 -
HDU5478取模恒等式
这题刚开始自己推公式,推了好久并没有推出来,最后队友A的,据说是直接让n等于1,然后用快速幂去求a得幂,然后直接用c去减这个值就是b,然后再用50个不同的n值去验证,如果等式均成立,即使一对符合的值,个人不喜欢做这些感觉逻辑不是很严密的题,但是事实就是这样,往往有些题逻辑不会很严密的让你感觉绝对对,因为由于学术有限,很多东西我们是很难验证的,所以有时做题也需要猜想。贴上队友代码原创 2015-09-26 21:00:29 · 902 阅读 · 0 评论 -
UVA10344五个数从前往后进行加减乘运算能否得到23
这个题刚开始想着是加减运算,就想着去开个stack,然后进行递归调用,然后发现用stack做函数参数好像并不能得到正确的答案,然后就想了其他办法,就是把每次运算的结果作为第一个参数,把要用的下一个运算数在数组a中的下标作为另外一个参数,当第二个参数为6时,即运算完毕,然后判断是否为23就行了。#include#include#include#include#include#i原创 2015-09-25 17:15:10 · 482 阅读 · 0 评论 -
hdu5491求二进制比一个数大的数
求d的最小增量,注意为0的特判,以及1的个数不能改变的情况,然后其他情况找到最小的位0的位置变成1,然后根据s1的大小去改变后面的1就行,具体的看代码:#include#include#include#include#include#include#include#include#include#include#include#include#define LL l原创 2015-09-27 17:23:44 · 964 阅读 · 2 评论 -
HDU5429大数模板
这题直接套大数模板就行了,我硬是要写一发double试试,结果果断WA了n多发,最后还没过。也许是我修为太浅,不能找到double的正确AC姿势。而且发现一般这种题基本上都是考大数的,用double基本上过不了,除了一些特殊的题目。#include#include#include#include#include#include#include#include#include原创 2015-09-07 19:42:25 · 346 阅读 · 0 评论 -
小白书之回溯法求素数环
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define LL long longusing namespace std;const int N=101;int A[原创 2015-09-11 20:14:30 · 520 阅读 · 0 评论 -
HDU5430欧拉函数求小于等于n的数中与n互质的数的数目
思路;欧拉函数即为第一个思路,至于欧拉函数的证明,弱渣渣表示不会,反正欧拉函数是求比n小的数中与n互质的数的数目。这题直接百度欧拉函数,复制粘贴上就过了。#include#include#include#include#include#include#include#include#includeusing namespace std;int eular(原创 2015-09-07 20:06:36 · 567 阅读 · 0 评论 -
HDU5481求数轴的并集的长度
首先考虑一个问题,就是关于覆盖的问题:若某个区间没有被其它区间覆盖,则该区间在子集中出现的总次数为:2^(n-1)次(总子集数-去掉该区间的子集总数)若某个区间被覆盖了1次,即有2个区间重叠,那么该区间在子集中出现总次数为:2^(n-1)+2^(n-2)次(第1个区间在子集中出现的次数+第2个区间在子集中出现且第1个区间不出现的总次数)…………可以得到原创 2015-10-01 09:01:24 · 737 阅读 · 0 评论 -
人人网笔试题第三题之找规律简单数论
选择题一通胡蒙,做了两道编程题,第三题不会,学的太差了,难受第三题是一个数论,之前数论题做得少,理论也懂,不会,先看代码:#include #include #include #include #include #include #include #include #include #include #include #include #pragma warnin原创 2017-03-19 22:53:03 · 697 阅读 · 0 评论