- 博客(32)
- 收藏
- 关注
原创 日记
复习组原 和 写C#课设的一天。---------------------------------------------------------------------------------------------------------
2018-01-04 22:33:53
261
原创 关于欧拉函数的一些理解
先丢上定义phi(x)=x*∏(pi-1)/pi; //pi为x的所有因子。/pi 相当于区间长度x分为pi部分,每个小部分有一个与数与x的不互质,所以乘(pi-1)..性质 1. x为质数 phi(x)=x-1;2、gcd(a,x)==1 有a^phi(x)=1(mod x);3.根据1,2性质 可以证明费马小定理 当x为质数&&gcd(
2017-10-31 21:27:16
642
原创 HDU 6069 求区间[L,R]每个数的k次方的因子数之和
缺乏知识点 1.约数定理: num=p1^c1 * p2^c2 * ....* pn^cn p代表素数 c代表对应幂次 num对应的因子数= (c1+1)*(c2+1)*......*(cn+1)2.一个数num 大于sqrt(num)的素因子 数量 只能 为0或者1 可以解决的问题:1.所有求一个数num的因
2017-08-07 00:29:22
1452
原创 同余最短路
题意大致就是 一张无向图 每条边可以多次经过 问s,到t 的不小于k的最短路 (或者仅仅等于k的最短路)取m=2*min(s到下一个点的最短路径): 如果一条路径长度sum可行 那么sum+m也是可行的 然后 dis[i][j]表示从起点s到i点 ,路径长度%m==j 的最短路径 最后就是利用同余的性质去跑最短路spfa题目 HDU 60
2017-08-05 19:11:33
1291
原创 关于二分图最大匹配等于最小点覆盖的证明
假设一个二分图给出了最大匹配数为M,那个M条边都是独立的(在X,Y集合都没有交点) ,结论1.覆盖M条独立边至少需要M个覆盖点结论2.图中所有的边都能被最大匹配的边的点所覆盖(如果有边没被最大匹配边的点所覆盖的话,那么肯定就不是最大匹配啦)结论3.最大匹配的一条边只对应一个覆盖点如果最大匹配的一条边选了2个未覆盖点 那么只有这种一种情况 红色边代表最大匹配,2-5选了两个未
2017-07-05 09:26:51
1828
原创 ZOJ - 3529 K - A Game Between Alice and Bob sg函数~
sg函数打表。一开始我是这么打的表。天真以为nlogn应该可以。但是跑了很久。。。。void gsg() { memset(sg, 0, sizeof(sg)); sg[0]=0; for (int i = 1; i < 5000024; i++) { memset(Hash, 0, sizeof(Hash)); for (int j = 1; j*j <= i; j++)
2017-04-27 21:35:44
457
原创 华南理工大学2017WPS杯-B Homework of Physics
道理和鸡蛋测层数的题目一样。具体看(转载)鸡蛋测层数设DP[i][j]//表示用i个鸡蛋,有j次机会测试能达到的最大层数。转移方程:DP[i][j]=DP[i-1][j-1]+DP[i][j-1]+1; //DP[i-1][j-1]就是碎了当前的鸡蛋,那么剩下i-1个鸡蛋,j-1次机会所能达到的最大层数。DP[i][j-1]就是没碎当前鸡蛋,j-1次机会所能到达的最大层数。+1就
2017-04-25 02:57:33
534
原创 HDU 2509 Be the Winner (Anti-Nim)
Anti-Nim博弈,最后取完就为输。定义:P=各堆异或值和为0,N各堆异或值和不为0. 1代表所有堆中只有一堆充裕堆(数量>=2) ,2代表所有堆中超过一堆充裕堆 ,0代表无充裕堆(即是所有堆皆为0) 堆中数量为1称为孤单堆有以下结论:1:) P1,P2,N0状态为必胜。2:) N2,P0状态为必输。证明:转载
2017-04-20 22:54:51
551
原创 Fibonacci again and again HDU - 1848
需要理解SG函数,自行百度。(至今证明还没有完全看懂)结论: 公平组合游戏(ICG),都符合 :多个游戏的结果=各子游戏的异或和。sg【i】=mex(sg【j】| j为i的后继(比如现在是5个苹果,每次只能拿2个,那么3个苹果就是5个苹果的后继))//简单来讲就sg【i】是当前集合的最小的非负整数那么这道题我们可以预处理sg【i】的值,最后把sg[n]^sg[m]^sg[p]就
2017-04-19 20:24:17
395
原创 ZOJ 3956 Course Selection System
01背包如果你能发现C不变,H越大,公式值越大,这题就可以用01背包写了C代表容量~dp[i]代表到使用前i种所能达到最大的H值#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #include #include #inc
2017-04-15 21:30:42
500
原创 ZOJ 3953 Intervals
这题其实就是在算最大不重叠区间数的升级版。首先讲一下最大不重叠区间数如何求; 将所有区间按y小到大排序。然后按顺序放区间,线上记录ansr(最右下标值)在放一个新的区间的时候,判断此区间的x是否大于ansr,如果是就更新ansr,否则不变,到最后就能算出最大不重叠区间数但是这次问的是对应的下标位置不能同时有3条边重叠,所有我们维护2个值,ans1(重叠边为1条最右下
2017-04-15 21:13:07
495
原创 HDU1542 Atlantis 基于线段树的扫描线
该题求的是矩形的面积和(重叠部分只算一次)思路:利用二分离散化坐标(因为是浮点数),以横轴建立坐标系,矩形的上下边的长度作为区间去构造线段树,维护cnt[]数组(表示当前边属于下边还是上边,下边为-1,上边为1)和sum[]数组(当前区间覆盖的边的长度),一开始我觉得很难看得懂,我也是调了别人AC的代码很久才明白的。#pragma comment(linker, "/STACK:1
2017-04-11 21:04:43
307
原创 数位DP总结
数位DP基于动态的思想,记录状态以至于不用重复的计算,能够处理大规模的数其时间复杂度为O(状态数*转移数) //状态数是dp数组的大小,转移数是for循环大小(这个时间我也不是很想得通,某大佬讲的。。)基本模板如下:基本的三种题型:1): 求1~n数字中包含某些数字特征的数量和(如数字子串中是否有13等)2):求1~n数字中各个位数相加能够整除某个数的数量和(如123各
2017-04-03 20:58:42
1547
1
原创 Codeforces 55D - Beautiful numbers
能注意到1~9的最小公倍数是2520,所以我们只需要维护一下到dex位前的数字组成的lcm,和num最后只需要判断num是否除以lcm就可以了但是DP[20][2555][2555] 是要超内存的所以我们需要离散一下第二维,因为1~9组成的lcm的数量其实很有限(思考怎么算出所有的lcm)所以需要新建Hash[50]数组压DP[20][50][2555];还要此题有一个最坑
2017-04-03 19:03:32
346
原创 HDU 3652 B-number
此题在询问包含13的基本上还要求此数要整除13(如果连询问包含13的数位都不会的话,建议先看看更基础的这题 HDU 2089 不要62)对于能否整除13,我们只需要在dfs的时候维护一个%13的数(num),然后在每次枚举下一位的时候num=(num*10+i)%13最后只需要判断余数是否为0就可以了。至于为什么可以这么做,因为:123=((1*10+2)*10+3)
2017-04-02 22:24:41
415
原创 HDU 2089 不要62
很裸的数位DP,只需要dfs的时候维护dt状态值就行了dt==2 说明此数字不吉利dt==1 说明有6没2dt==0 说明到dex位此数字还是吉利的代码如下~#include #include #include #include #include #include #include #include #define INF 0x3f3f3
2017-04-02 21:56:04
427
原创 2017广东工业大学程序设计竞赛决赛-G题-等凹数字
这题在求回文串的基础上还要等凹。可以视为LightOJ 1205的升级版,不知道如何写回文串的数位DP可以打开链接LightOJ 1205因为这题只需要加多2维,最高位的数字以及前一位(用于判断升降) (此思想来自于点击打开链接)在回文串的前半部分不能大于pre,后半段不能小于pre。然后最后判断是否全为一个数字就可以了。#pragma comment(linker,
2017-03-29 12:35:13
729
原创 LightOJ 1205
关键维护三个变量start,dex,flag,分别代表开始位,当前位,开始位到当前位是否回文。#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #include #include #include #include #inclu
2017-03-29 12:15:11
529
原创 关于大整数相乘
由于int范围有限,对于大整数相乘必定不能直接用*符号,而是用char型数组记录,通过模拟乘法达到大整数相乘的效果,假定a数组长度为A,b数组长度为B。求出来的大整数长度有三种可能,1.A+B(最后一位无进位),2.A+B+1(最后一位有进位),3.0(数a或者数b其一为0)(不要忽略这种可能,我就是忽略了这个一直WA....)代码如下,void bigmultiply_m
2016-05-27 21:20:31
1248
2
原创 关于大整数相加与相减
大整数相加核心:void bigadd_methods(char *a, char *b, char *c) { //确保数组a长于数组b int A = strlen(a), B = strlen(b), add, k = 0; for (int i = 0; i<A; i++) { if (B - i>0&&k) add = a[A - 1 - i] + b[
2016-05-25 22:28:45
1631
原创 Uva 129 Krypton Factor(困难的串)
运用回溯法,是否包含两个相邻的的字串只需要判断当前串的后缀代码如下:#include #include #include #include #include #include #include #include using namespace std;int n,l,cnt,times=0;int A[99];int dfs(int cur){
2016-05-18 22:05:41
514
原创 Uva 524 Prime Ring (素数环)
有什么问题评论问,必回!!!!代码如下:#include #include #include #include #include #include #include #include #define max 16*16+5using namespace std;int isp[max],vis[max],A[max];int n,rows=0;
2016-05-17 21:04:52
454
原创 UVa 10976 Fractions Again?!
只需要枚举y,即可得到x,关键知道枚举y的范围,因为x>=y, 所以1/x.~~代码如下:#include #include #include #include #include #include #include #include using namespace std;struct node{ double x; double y;}dat
2016-04-29 11:35:54
437
原创 UVa 11059 Maximum Product
这题本应属于最大连续子序列(动态)的题,但n小于等于18,所以直接枚举起点和终点,然后求最大值就可以了。注意一点的是si的最大值为10,所以乘积最大为 pow(10,18), 所以要用 long long 存下乘积值代码如下:#include #include #include #include #include #include #include #
2016-04-29 10:58:29
393
原创 UVa 725 Division
只要枚举fhhij即可得到abcde了~~然后再判断10个数字是否完全不同即可,不过这题的输出格式有点刁钻,可以留意下代码如下#include #include #include #include #include #include #include #include using namespace std;int panduan[10];int ma
2016-04-28 21:54:29
551
原创 HDU 5671 Matrix
这题直接用枚举是要TLE的,关键步骤是要用4个数组来存下变化的行数,列数,行数增加的数与列数增加的数,最后输出是就通过这个4个数组作导索来输出数据还有一点就是交换行,列数 数组时要记得交换行,列增加数 数组时间复杂度为:O(q+m*n)代码如下:#include #include #include #include #include #includ
2016-04-28 20:08:34
448
原创 HDU 5665 lucky
题意简化为给你一个集合,集合里面的数均为非负整数,问你这个集合的数通过加法(1个数可以用多遍)能否得到任意自然数。其实就是判断集合里面是否有1,,~~但是这里有个小坑就是还要判断是否有0的情况,,(当初我认为自然数是没有0的,所以BC上就被Hack了。。)代码如下:#include #include #include #include #include
2016-04-18 21:11:49
483
原创 UVA 1025 A Spy in the Metro(城市里的间谍)
本题思路为以时间为“序”,用dp[i][j]表示时刻i,在车站j还需要等待多少时间边界条件为dp[T][n]=0.在1个车站 可以有3种决策: 1:等1分钟 2:搭向左去的车。
2016-04-07 21:59:34
1002
原创 TYVJ 1214 硬币问题
描述 有n种硬币,面值为别为a[1],a[2],a[3]……a[n],每种都有无限多。给定非负整数s,可以选取多少个硬币使得面值和恰好为s?输出硬币数目最小值和最大值输入格式第1行n第2行s第3到n+2行为n种不同的面值输出格式第1行为最小值第2行为最大值-------------------------------
2016-04-05 21:36:29
798
原创 NYOJ 16 矩形嵌套
描述有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度)。例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中。你的任务是选出尽可能多的矩形排成一行,使得除最后一个外,每一个矩形都可以嵌套在下一个矩形内。输入第一行是一个正正数N(0每组测试数据的第一行是一
2016-04-03 16:06:28
568
原创 HDU 2084 数塔
本题可用递推法和递归法。其状态转移方程为:dp[i][j] = num_of_power[i][j] + max(dp[i + 1][j], dp[i + 1][j + 1]);1(递推法): 使用递推方式,从数塔底部往上推,关键是要注意边界和计算的顺序。 Time:46MS Memory:1656K 代码如下:#include #include #
2016-03-31 21:10:09
495
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人