- 博客(22)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 题目1
点击打开题目链接 题目大意:N 个人来自不同学校,相同学校的人需要站在一排,每排人数为K 人。 问那个学校的人不满足。详见题目。 大致思路: 统计每个学校的人数,输出不能被K整除的那个,简单说 统计数字出现次数,输出不能被K整除的数字。借鉴他人思路,用二进制统计一下。将每个数转化为二进制,用一个数组统计一出现的次数,按位统计1的个数。我们可以假设,
2016-04-28 16:07:09 503
原创 SPFA 最短路 带负权边的---- 粗了解
SPFA(Shortest Path Faster Algorithm)是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算。算法大致流程是用一个队列来进行维护。 初始时将源加入队列。 每次从队列中取出一个元素,并对所有与他相邻的点进行松弛,若某个相邻的点松弛成功,则将其入队。 直到队列为空时算法结束。这个算法,简单的说就是队列优化的bellman-ford,利用了
2016-04-26 21:28:19 3737 6
原创 欧拉图
欧拉图的判定欧拉通路和欧拉回路——必须是存在欧拉回路的图才能称为欧拉图,仅仅是存在欧拉通路不称为欧拉图 无向图的欧拉通路1.图连通可以用dfs去判断图连通或者用高效一点的并查集。用dfs的话其实就是遍历一遍图,并记录图有多少个连通分量,一般来说,在主函数中调用了多少次dfs就是有多少个连通分量。当连通分量数为1时说明图连通,大于1则不连通。用并查集的话,判断
2016-04-26 21:14:24 975 1
原创 hdu2544 迪杰斯特拉题目优化
点击打开题目链接迪杰斯特拉的用法不多讲,详见 点击打开链接 。下面两个代码:这个是用邻接矩阵存图的迪杰斯特拉。#includeint main(){ int e[1005][1005],dis[1005],book[1005],i,j,n,m,t1,t2,t3,u,v,min; int inf=9999999; while(scanf("
2016-04-24 21:29:51 422
原创 迪杰斯特拉--数组模拟邻接表优化
存图改用数组模拟邻接表的方式:数组模拟邻接表详见 邻接表的数组实现 。迪杰斯特拉 详见点击打开链接。#include #include #include using namespace std;const int MAX_SIZE=110;const int INF=2e9+1e8;int start[MAX_SIZE],terminal[MAX_SI
2016-04-24 10:42:18 460
原创 快速幂
long long ksm(long long a,long long b){ long long c=1; while(b) { if(b&1) c=a*c%Mod; a=a*a%Mod; b>>=1; } return c;}
2016-04-22 18:37:13 388
原创 花式GCD
#include#include#include#include#include#includeusing namespace std;int gcd(int a,int b){ return b?gcd(b,a%b):a;} int gcd1( int a, int b){ int r; while(b>0) { r=a%
2016-04-22 08:34:15 427
原创 四叉树 bnuoj
点击打开题目链接建树+广搜一棵树;最下面有更段代码。#include#include#include#include#includeusing namespace std;int maze[20][20];struct node{ int num; node *next[4];};void init_tree(node *root){
2016-04-20 21:01:46 878 1
原创 逆康拓展开展开
逆康拓展开和康拓展开差不多,因为X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! ,其中a[i]为当前未出现的元素中是排在第几个(从0开始)。这就是康托展开。康托展开可用代码实现。X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[2]*1!+a[1]*0![1]
2016-04-17 20:47:38 365
原创 全排列 STL
#include#include#includeusing namespace std;int main(){ int T,i,n; int a[9]= {1,2,3,4,5,6,7,8,9}; cin>>T; while(T--) { cin>>n; while(1) {
2016-04-16 18:36:53 386
原创 魔板拼图
点击打开题目链接题目大意:给你一个2X4的魔板,问你最少多少步骤能拼成 0 1 2 3 4 5 6 7 0 代表空的地方 如图:这是最终 状态。Sample Input0 1 2 3 4
2016-04-16 13:03:27 1064
原创 为什么要写博客?
为什么要写博客?我觉得!写博客就是为了。避免讲重复的题目,浪费时间!写博客也是为了加深对这道题目的理解!如果,你写的博客能让别人看懂!那么你的学术交流是不成问题的!一道题目,如果是值得我们做的题目,不是水题的题目,我们就应该掌握其中的精髓!看看其中的解题方法,技巧,思路!写博客,不仅仅是粘一个题目,加一个代码!程序员最讨厌的就是看代码!尤其是没有注释的代码!我们会选择看思路,避开去看代码!个人的编
2016-04-12 22:27:46 653 2
原创 nyoj 998
nyoj 998 点击这里打开题目链接 给你一个数N,使得在1~N之间能够找到x使得x满足gcd( x , N ) >= M,求解gcd(x,N)的和思路:一开始想到暴力法做,超时 ,后来借鉴学长经验AC:大致思路: 用欧拉函数求 ,euler(n) 表示 1到n与n互质的数的个数, 如果n能够被 i 整除 , 则euler(n/i)等价
2016-04-12 21:26:49 598
原创 欧拉函数
欧拉函数 编辑在数论,对正整数n,欧拉函数是小于n的数中与n互质的数的数目。此函数以其首名研究者欧拉命名(Ruler'so totient function),它又称为Euler's totient function、φ函数、欧拉商数等。 例如φ(8)=4,因为1,3,5,7均和8互质。 从欧拉函数引伸出来在环论方面的事实和拉格朗日定理构成了欧拉定理的证明。中文名 欧拉函数 外文名 Rul
2016-04-12 18:58:07 771
原创 背包问题
1. 01背包为题描述:s件物品, 背包容量为 m ,给出每件物品的cost,与 value 求在背包容量内最大的价值是多少? #include#define max(a,b) a>b?a:bint main(){ int n,s,m,v,w,i,j,k; scanf("%d",&n); while(n--) { int DP[25]={0}; scanf("
2016-04-12 13:44:31 381
转载 容斥原理
在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。[1] 中文名容斥原理外文名Principle of inclusion-exclusio
2016-04-11 21:37:18 401
原创 GDUT 积木积水 2*n 时间复杂度
题意Description现有一堆边长为1的已经放置好的积木,小明(对的,你没看错,的确是陪伴我们成长的那个小明)想知道当下雨天来时会有多少积水。小明又是如此地喜欢二次元,于是他把这个三维的现实问题简化成二维的问题。设雨量无穷、积木不透水、积木间无缝连接,问在这个二次元的世界里,已放置好的积木会有多少单位的积水量? Input第一行包含一个整数T(T≤100),
2016-04-10 20:50:37 944 3
原创 并查集 水题
题目链接#include #include#include#include#include#include#include#include#includeusing namespace std;const int INF =2100000000;int pre[1010];void Init(int n){ for(int i
2016-04-07 19:26:27 391
原创 最小生成树,并查集的思想 nyoj1239
#include#include#includeusing namespace std;int n,pre[10010],cnt;struct node{ int x,y; int val;} p[10010];void init(){ for(int i=0; i<10010; i++) pre[i]=i;}int cmp(nod
2016-04-04 21:20:27 368
原创 hdu(1007) 最近点对 分治法
最近点对一般想到枚举 ,一一枚举时间复杂度为n^2;枚举时候一些炒作是多余的,有了分值算法的思想 ,把一些问题分个击破,再回到整体。题目链接 以这道题为例,我们可以把他按照x轴的升序分成多个子区域先在子区域中求最近点距离,然后将相邻两个子区域合并,看看两个子区域中有没有更小的。大致思想就是这样的。设计算法:递归将问题分成一小个问题。在找区域里面的最近点先将他按照
2016-04-04 19:14:14 887
原创 最长公共子序列
#include#include#include#include#include#include#include#include#includeusing namespace std;int main(){ char s1[1010],s2[1010]; while(scanf("%s",s1)!=EOF)
2016-04-02 15:52:52 284
空空如也
Count primes ---ACM 题目
2016-09-20
TA创建的收藏夹 TA关注的收藏夹
TA关注的人