- 博客(42)
- 资源 (1)
- 收藏
- 关注
原创 乘法逆元
#include<iostream>#define ll long longll exgcd(ll a,ll b,ll &x,ll &y){ if(b==0){ x=1; y=0; return a; } ll gcd=exgcd(b,a%b,y,x); y-=(a/b)*x; return gcd;}ll inv(ll a,ll p){...
2018-11-21 18:01:31
193
原创 扩展欧几里得
扩展欧几里得:已知a, b,求解一组x,y,使它们满足贝祖等式: ax+by =gcd(a, b)ax1+by1=gcd(a,b)bx2+(a%b)y2=gcd(b,a%b)gcd(a,b)=gcd(b,a%b)ax1+by1 = bx2+(a%b)y2ax1+by1=bx2+(a-a/b*b)y2ax1+by1=ay2+b(x2-a/b*y2)x1=y2; y1=x2...
2018-11-21 14:22:30
175
原创 欧拉函数
求某个数的欧拉函数值#include<iostream>#include<cmath>#define ll long longint main(){ ll n; std::cin>>n; ll res=n; for(ll i=2;i<=sqrt(n);i++) { if(n%i==0) res=res/i*(i-1...
2018-11-20 16:26:09
179
原创 js加减乘除混合运算
function getResult(str){ // var _str=str.repalce('*','×'); // var __str=_str.replace('/','÷'); var str1=str.split(''); var str2=[]; for(var i=0;i<str1.length;i++) { if(!Number(str1[i])&am...
2018-10-27 09:27:55
3339
转载 最近点对(转)
#include <stdio.h>#include <string.h>#include <algorithm>#include <iostream>#include <math.h>using namespace std;const int MAXN = 100010;const double INF = 1e20;...
2018-10-14 11:12:07
163
原创 并查集
int p[maxn];void init(){ for(int i=0;i<maxn;i++) p[i]=i; }int findset(int x){ return p[x]!=x?p[x]=findset(p[x]):x;}void join(int x,int y){ int a=findset(x); int b=findset(y); if(a!=b...
2018-06-08 18:20:06
143
转载 居民集会
蓝桥村的居民都生活在一条公路的边上,公路的长度为L,每户家庭的位置都用这户家庭到公路的起点的距离来计算,第i户家庭距起点的距离为di。每年,蓝桥村都要举行一次集会。今年,由于村里的人口太多,村委会决定要在4个地方举行集会,其中3个位于公路中间,1个位最公路的终点。已知每户家庭都会向着远离公路起点的方向去参加集会,参加集会的路程开销为家庭内的人数ti与距离的乘积。给定每户家庭的位置di和人数ti,请...
2018-05-15 21:55:10
301
原创 已知二叉树的中序和后序遍历排列,求前序遍历
#include<iostream>#include<string>using namespace std;void Preorder(string inorder,string postorder){ if(inorder.size()>0) { char ch=postorder[postorder.size()-1]; cout<&l...
2018-03-20 21:45:45
2972
原创 洛谷p1019 单词接龙
题目描述单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at 和 atide 间不能相连。输入输出格式输入格式:输入的第一行为...
2018-03-18 22:43:22
873
原创 最小费用最大流
#include<iostream>#include<cstring>#include<vector>#include<queue>#define maxn 1005#define inf 0x3f3f3f3fusing namespace std;struct Edge{ int from,to,cap,flow,cost; Ed...
2018-03-16 22:01:51
211
原创 最短路SPFA
#include<iostream>#include<vector>#include<queue>#include<cstring>#define inf 0x3f3f3f3f#define maxn 20005using namespace std;int d[maxn],inq[maxn];vector<pair<in...
2018-03-11 16:29:16
171
原创 图(邻接表写法)
#include<stdio.h>#include<stdlib.h>#define max 20typedef struct ArcNode /*ArcNode存放邻接表中的信息,包括顶点的位置和权值,和连接下一个顶点的指针*/ { int adjvex; struct ArcNode *nextarc; int info;...
2018-03-02 19:32:36
1174
原创 二叉树遍历,路径,查看某层(邻接表写法)
#include<stdio.h>#include<stdlib.h>#define OK 1#define OVERFLOW 0#define max 50typedef struct{ char a[max]; int top;}seqstack;seqstack *s=(seqstack *)malloc(sizeof(seqstack)); ...
2018-03-02 19:31:11
795
原创 最小生成树(邻接表写法)
#include<stdio.h>#include<stdlib.h>#define max 20typedef struct ArcNode{ int adjvex; struct ArcNode *nextarc; int info; } ArcNode;typedef struct VertexNode{ char data; ArcNode ...
2018-03-02 19:28:35
3281
转载 洛谷 p1004 方格取数
题目描述设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放人数字0。如下图所示(见样例):A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0 0 0 0 21 0 0 0 4 0 0 0 0 15 0 ...
2018-03-02 19:23:41
324
原创 洛谷 1002 过河卒
题目描述棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。棋盘用坐标表示,A点(0, 0)、B点(n, m)(n, m为不超过20的整数),同样马的位置坐标是需要给出的。现在要求你计算出卒从A点能够到达B点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马...
2018-03-02 11:24:03
327
原创 快排
#include<stdio.h>int QKpass(int a[],int low,int high){ int x=a[low]; while(low<high) { while(a[high]>x&&low<high) high--; if(low<high) { a[low]=a[high]; lo...
2018-02-26 19:40:43
177
原创 网络流最大流模板dicnic
#include<iostream>#include<vector>#include<queue>#include<cstring>#define inf 0x3f3f3f3f#define MAXN 100using namespace std;struct Edge{ int from,to; int cap; int flo...
2018-02-14 11:51:40
533
原创 最大子段和
#include<iostream>#include<cmath>#include<cstring>using namespace std;int a[50005];long long dp[50005];int main(){ memset(a,0,sizeof(a)); memset(dp,0,sizeof(dp)); int n; s...
2018-02-09 12:23:18
154
原创 1133 不重叠的线段
X轴上有N条线段,每条线段有1个起点S和终点E。最多能够选出多少条互不重叠的线段。(注:起点或终点重叠,不算重叠)。例如:[1 5][2 3][3 6],可以选[2 3][3 6],这2条线段互不重叠。Input第1行:1个数N,线段的数量(2 <= N <= 10000)第2 - N + 1行:每行2个数,线段的起点和终点(-10^9 Output
2018-02-06 09:06:44
591
原创 51nod 1428 活动安排问题
有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室?Input第一行一个正整数n (n <= 10000)代表活动的个数。第二行到第(n + 1)行包含n个开始时间和结束时间。开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000Output一行包含一个整数表示最少教室的个数
2018-02-04 15:37:06
147
原创 51nod 1649 齐头并进
在一个叫奥斯汀的城市,有n个小镇(从1到n编号),这些小镇通过m条双向火车铁轨相连。当然某些小镇之间也有公路相连。为了保证每两个小镇之间的人可以方便的相互访问,市长就在那些没有铁轨直接相连的小镇之间建造了公路。在两个直接通过公路或者铁路相连的小镇之间移动,要花费一个小时的时间。现在有一辆火车和一辆汽车同时从小镇1出发。他们都要前往小镇n,但是他们中途不能同时停在同一个小镇(但是可以同时停在小镇
2018-02-02 10:09:21
269
原创 51 nod 1001 数组中和等于K的数对
给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对。例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9),(0,8),(2,6),(3,5)。Input第1行:用空格隔开的2个数,K N,N为A数组的长度。(2 <= N <= 50000,-10^9 <= K <= 10^9)第2 - N
2018-02-01 22:09:40
192
原创 51nod 1080 两个数的平方和
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1080用映射记录i,j是否已被找出过遍历i,如果i,j正好是n的的两个答案,则n-i*i开根号应该是整数,即int j=sqrt(n-i*i)和double sqrt(n-i*i)相等#include#include#include#incl
2018-02-01 13:53:13
106
转载 51nod 1289 大鱼吃小鱼
#include#includeusing namespace std;int A[100005],B[100005];int C[100005];int main(){ int n; cin>>n; int i; for(i=0;i<n;i++) { cin>>A[i]>>B[i]; } int ans=n; int flag=-1; for(i=0;i<n;i
2018-01-31 13:15:22
379
原创 51nod 1344 走格子
有编号1-n的n个格子,机器人从1号格子顺序向后走,一直走到n号格子,并需要从n号格子走出去。机器人有一个初始能量,每个格子对应一个整数A[i],表示这个格子的能量值。如果A[i] > 0,机器人走到这个格子能够获取A[i]个能量,如果A[i] 例如:n = 5。{1,-2,-1,3,4} 最少需要2个初始能量,才能从1号走到5号格子。途中的能量变化如下3 1 0 3 7。
2018-01-30 20:55:51
186
原创 51nod 1347 旋转字符串
S[0...n-1]是一个长度为n的字符串,定义旋转函数Left(S)=S[1…n-1]+S[0].比如S=”abcd”,Left(S)=”bcda”.一个串是对串当且仅当这个串长度为偶数,前半段和后半段一样。比如”abcabc”是对串,”aabbcc”则不是。现在问题是给定一个字符串,判断他是否可以由一个对串旋转任意次得到。Input第1行:给出一个字符串(字符串非空
2018-01-30 20:07:44
120
原创 51nod 2020 排序相减
“排序相减”操作是指对于任意一个四位数n,将四个数字分别进行顺序排序和逆序排序,得到两个数取相减后结果的绝对值n1,然后继续将n1中的四个数字进行顺序排序和逆序排序,得到两个数取相减后结果的绝对值n2,以此类推,最后总会得到一个数字黑洞,无法跳出。例如:样例2中4176 = 6532 - 2356Input第一行输入一个整数T,表示数据组数(1<T<10000);第二
2018-01-30 19:37:38
234
原创 归并排序
#include#includeint a[50005];int temp[50005];void merge_sort(int l,int r){ if(l<r) { int mid=(l+r)>>1; merge_sort(l,mid); merge_sort(mid+1,r); int i=l,j=mid+1; int t=l; while(i<=mid
2018-01-30 16:02:25
110
转载 最长公共子序列lcs
#include#include#includeusing namespace std;char a[1005],b[1005],s[1005];int dp[1005][1005];int main(){ cin>>a>>b; memset(dp,0,sizeof(dp)); memset(s,0,sizeof(s)); int m=strlen(a); int n=st
2018-01-29 19:58:24
105
转载 N!,求n的阶乘
#includeint ans[50000];int main(){ int n,m,x,i,j; scanf("%d",&n); x=n; i=0; while(n>0) { ans[i]=n%10; n=n/10; i++; } for(m=2;m<x;m++) { int c=0; for(j=0;j<i;j++) { ans[j]=an
2018-01-29 11:06:01
656
转载 manacher(马拉车)求最长回文子串长度
#include#include#includeusing namespace std;char str[100000];char s[200000];int r[200000];int main(){ memset(s,0,sizeof(s)); memset(r,0,sizeof(r)); scanf("%s",str); int len=strlen(str); i
2018-01-28 23:07:46
153
原创 线段树
(1)#include#define N 50000struct node{ int x,y; long long sum;}t[N<<2];int a[N];void Build_Tree(int l,int r,int i){ t[i].x=l; t[i].y=r; if(l==r) { t[i].sum=a[l]; } else { int mid=(l
2018-01-28 11:58:35
110
转载 背包
http://www.jianshu.com/p/48f2dd394608http://blog.youkuaiyun.com/kangroger/article/details/38864689
2018-01-28 10:19:45
124
原创 无向图最小生成树Prim(普里姆)算法
#include#include#define inf 0x3f3f3f3f#define N 1000+5int g[N][N];int vis[N];int low[N];int n,m;int Prim(){ int i,j,pos,res=0; pos=1; //选取一个点作为初始点 vis[pos]=1; for(i=1;i<=n;
2018-01-24 18:09:55
1248
原创 二分图最大匹配
#include#include#define N 10int g[N][N];int result[N];int visit[N];int nx,ny,ne; int find(int u){ for(int i=1;i<=ny;i++) { if(g[u][i]==1&&!visit[i]) { visit[i]=1; if(result[i]==0||
2018-01-23 13:27:33
148
原创 c++期末课程设计(单号题)
期末课程设计第1题:设计一个学生学籍管理系统学生信息包括:姓名、学号、性别和英语、数学、程序设计、体育成绩。从键盘输入数据,建立数据文件student.dat。实现对学生或学号查询,显示信息。对所有学生,按照班级计算平均成绩。分别按照英语、数学、程序设计和体育成绩排序生成结果文件。#include<iostream>#include<cstdio>#...
2018-01-11 20:12:41
5335
3
转载 求x的第k位数
#includeint len(int x){ if(x<10) return 1; return len(x/10)+1;}int f(int x, int k){ if(len(x)-k==0) return x%10; return f(x/10,k); } int main(){ int x = 23574; printf("%d\n", f(x,4)); r
2017-12-10 17:37:59
428
visual c++ 绿色版,win7,8,,10皆可用
2018-01-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人