04 2014 档案

摘要:题意 :求一个最小的数对 23 38 33 于i p ezsd: 因为23 38 33 两两互素所以可以用中国剩余定理是中共剩余定理的经典模板#include using namespace std; int exgcd(int a,int b,int &x,int &y) { i... 阅读全文
posted @ 2014-04-30 21:31 _一千零一夜 阅读(160) 评论(0) 推荐(0)
摘要:题意:求1、1/x+1/y=1/z 给定z 求x,y的个数zsd:1: 要知道这个素数的因子的范围 范围为2——sqrt(n);2:带入方程得:x = n * n / k + n ;现在就变成了求x的值。又因为n一定大于k,所以转换成求n * n的分解数;因为n = p1 ^ e1 * p2 ^ ... 阅读全文
posted @ 2014-04-30 21:19 _一千零一夜 阅读(242) 评论(0) 推荐(0)
摘要:这个方法太厉害了 别人的记录一下#include#include#include#include#include#include#includeusing namespace std;#define MAX_PRIME 31700#define PRIME_NUM 3500int Primes[ P... 阅读全文
posted @ 2014-04-30 20:56 _一千零一夜 阅读(229) 评论(0) 推荐(0)
摘要:赤裸裸的求割点的题 模板zsd: while((c=getchar())!='\n') { scanf("%d",&y); edge[x][y]=edge[y][x]=1; } get... 阅读全文
posted @ 2014-04-30 19:46 _一千零一夜 阅读(128) 评论(0) 推荐(0)
摘要:题意:题意:n个同学,一些男女同学会有缘分成为情侣,格式ni:(m) n1 n2 n3表示同学ni有缘与n1,n2,n3成为情侣,求集合中不存在有缘成为情侣的同学的最大同学数。题解:独立集:图的顶点集的子集,其中任意两点不相邻最大独立集 = 顶点数 - 最大匹配数zsd:由于本题是从整个点集搜索,并... 阅读全文
posted @ 2014-04-30 15:48 _一千零一夜 阅读(345) 评论(0) 推荐(0)
摘要:题意:n个城堡 城堡之间有路 在这n个城堡里放多少人可以防卫所有的路40:(1) 11:(2) 2 32:(0)3:(0)描述的是这个图只需要在1上放一个人 就能覆盖所有的道路zsd: 1:二分图最小点覆盖=最大匹配数2:二分图最小顶点覆盖 = 双向二分图最大匹配 / 2 。证明来自:www.cn... 阅读全文
posted @ 2014-04-30 15:32 _一千零一夜 阅读(181) 评论(0) 推荐(0)
摘要:题意:n个ren m个棍子 每个棍子可以与i个人结合 问最大有多少个结合#include#includeusing namespace std;int map[111][111];int fa[111];int v[111];int n,m;int dfs(int x){ for(int i=... 阅读全文
posted @ 2014-04-30 14:43 _一千零一夜 阅读(212) 评论(0) 推荐(0)
摘要:题意://给一个p 和一个a,如果这个//p 本身就是一个素数,就输出no,如果不是素数,那么计算 ( a ^ p) % p 如果结果等于a 那么输出yes 否则输出nozsd:用__int64的时候一定要注意__int64与别的数转化的时候会出错误 所以一定要都是__int64位 //给一个p 和... 阅读全文
posted @ 2014-04-30 11:17 _一千零一夜 阅读(181) 评论(0) 推荐(0)
摘要:题意:给你一个大于4的整数m和一个真分数a/b,求最佳素数对p、q,使得a/b#includeusing namespace std; int main() { int prime[2000],k; int num[10001]; int i,l; int ... 阅读全文
posted @ 2014-04-30 10:20 _一千零一夜 阅读(483) 评论(0) 推荐(0)
摘要:这题就是 要你找出一个ASCII 的值x使得 : x^e%n==num(当前输入的数,e条件已给出)zsd:1: ASCII0-255可以枚举2: =a^11 11=1011int pow2( int a, int b ){ int r = 1, base = a; while( b... 阅读全文
posted @ 2014-04-30 09:53 _一千零一夜 阅读(256) 评论(0) 推荐(0)
摘要:题意:求n!中末尾连续0的个数 其实就是2*5的个数30! 中有5 10 15 20 25 30 是5的倍数有6个 6=30/5;6/5=1; 这个1 为255 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 100/5=20; ... 阅读全文
posted @ 2014-04-30 09:26 _一千零一夜 阅读(133) 评论(0) 推荐(0)
摘要:题意:给n,m,k;输出n经过+-*%后(n%k+k)%k==((n+1)%k)%k 输出最小路径与运算副zsd:% 只是求余数 有正负 mod 是求模 无正负、yhd:对m*k求余对 对k求余不对#include#includeusing namespace std;struct Node{ ... 阅读全文
posted @ 2014-04-30 09:04 _一千零一夜 阅读(166) 评论(0) 推荐(0)
摘要:简单题 注意__int64 的使用Problem : 1019 ( Least Common Multiple ) Judge Status : AcceptedRunId : 10599776 Language : C++ Author : xiaoniuwinCode Ren... 阅读全文
posted @ 2014-04-30 08:52 _一千零一夜 阅读(142) 评论(0) 推荐(0)
摘要:给定 ab 与飞 f1 f2 求f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.分析:1 因为mod7 0using namespace std;int main(){ int a,b,n; int f[1005]; while(cin>>a>... 阅读全文
posted @ 2014-04-30 08:49 _一千零一夜 阅读(161) 评论(0) 推荐(0)
摘要:#include #include using namespace std;int s[4],p[4];long long llmax(long long a,long long b){ return a>b?a:b;}int main(){ int t; cin>>t; int c=1; whil... 阅读全文
posted @ 2014-04-29 20:59 _一千零一夜 阅读(185) 评论(0) 推荐(0)
摘要:模线性方程的基本应用#includeusing namespace std;int exgcd(int a,int b,int &x,int &y){ if(b==0) { x=1; y=0; return a; } int d=ex... 阅读全文
posted @ 2014-04-29 15:38 _一千零一夜 阅读(120) 评论(0) 推荐(0)
摘要:好高兴 一上午做了2个题 题意:求素因子只有2 3 5 7 数 约束的个数 我用的时搜索计数法 感觉还应该有比较不错的组合数学方法#includeusing namespace std;__int64 dmax;int prime[4];void dfs(int t){ if(t>=4) { ... 阅读全文
posted @ 2014-04-29 11:47 _一千零一夜 阅读(167) 评论(0) 推荐(0)
摘要:第一次打表一言难尽 注意表的范围 因为打表 数组长度不好计算算 要有个结尾标志#includeusing namespace std;int prime[1000]={5,7,11,101,131,151,181,191,313,353,373,383,727,757,787,797,919,9... 阅读全文
posted @ 2014-04-29 10:53 _一千零一夜 阅读(247) 评论(0) 推荐(0)
摘要:没说的 暴力打表#include#includeusing namespace std;int a[62768];int b[42768];int prime[42768];int main(){ int n=0,j,i; memset(b,0,sizeof(b)); memset... 阅读全文
posted @ 2014-04-28 21:43 _一千零一夜 阅读(134) 评论(0) 推荐(0)
摘要:典型的快速幂成应用题意:求x 使得x^e%n=num#includeusing namespace std;bool funtion(int x,int e,int n,int num){// m^n % k int b = 1; while (e > 0) { i... 阅读全文
posted @ 2014-04-28 20:59 _一千零一夜 阅读(173) 评论(0) 推荐(0)
摘要:题意:求N!中末尾0的个数 其实就是5的个数 因为2*5=10 肯定n中2的个数比5的个数多#includeusing namespace std;int main(){ int n; int t,d; int sum; scanf("%d",&t); while(t... 阅读全文
posted @ 2014-04-28 20:03 _一千零一夜 阅读(101) 评论(0) 推荐(0)
摘要:% mod 比较基本的广搜 有些数论知识 第一次在节点力用了队列 挺好#include#includeusing namespace std;struct Node{ int x; int step; queue q;};int v[1000010];int n,m,k;bool bfs(){ int s=((n+1)%k+k)%k; queueq; Node now,next; now.x=n;now.step=0; q.push(now); memset(v,0,sizeof(v)); while(!q.empty()) {... 阅读全文
posted @ 2014-04-28 17:48 _一千零一夜 阅读(88) 评论(0) 推荐(0)
摘要:/**中国剩余定理(不互质)*/#include #include #include using namespace std;typedef __int64 int64;int64 Mod;int64 gcd(int64 a, int64 b){ if(b==0) return a; return gcd(b,a%b);}int64 Extend_Euclid(int64 a, int64 b, int64&x, int64& y){ if(b==0) { x=1,y=0; return a; } int64 d = Extend_Euclid(b,a%b,x,y); int6 阅读全文
posted @ 2014-04-26 19:36 _一千零一夜 阅读(685) 评论(0) 推荐(0)
摘要:一下午 终于行了基本的容斥定理收藏 2314291容斥原理编辑在计数时,必须注意无一重复,无一遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。目录1公式2严格证明3原理1▪ 分析 ▪ 答案 ▪ 试一试 4原理2▪ 例1 ▪ 例2 ▪ 例3 ▪ 例4 ▪ 例5 1公式编辑也可表示为设S为有限集,,则#includeint a[12];__int64 n;__int64 sum;int m;__int6 阅读全文
posted @ 2014-04-26 19:10 _一千零一夜 阅读(90) 评论(0) 推荐(0)
摘要:#include #include#include#include#include#includeusing namespace std;#define N 1010#define INF 0 xfffffff#define LL long longLL dp[1010];LL sum[1010];int a[1010];int min(int a,int b){ if(a>t; while(t--) { memset(sum,0,sizeof(sum)); cin>>n>>m; // for(i = 1 ;i >a[i]; sum[i] = sum[i-1 阅读全文
posted @ 2014-04-24 14:40 _一千零一夜 阅读(128) 评论(0) 推荐(0)
摘要:#includeusing namespace std;__int64 f(__int64 a,__int64 b){ __int64 t; __int64 sum=a*b; if(a<b) { t=a; a=b; b=t; } while(b) { t=a%b; a=b; b=t; } return sum/a;}int main(){ int t,n; __int64 x; __int64 lcm; scanf("%d",&t); while(t--) { scanf("%d",&n); scanf("%I64d&qu 阅读全文
posted @ 2014-04-22 18:34 _一千零一夜 阅读(93) 评论(0) 推荐(0)
摘要:#includeusingnamespacestd;voidarray2(floatarr[][4],intn){floatmax,min,sum;inti,j;for(i=0;iarr[i][j])min=arr[i][j];}cout<<max<<"";cout<<min<<"";cout<<sum<<"";cout<<sum/4<<endl;}} 阅读全文
posted @ 2014-04-22 00:05 _一千零一夜 阅读(291) 评论(0) 推荐(0)
摘要:一旦wrong anwser可以从以下几个方面考虑1 算法是否正确2 特例有没有3 题意有没有理解#include#includeusing namespace std;struct Node{ short int dest; Node *next;};struct Graph{ Node *next;}ga[20001],gt[20001];int n,m;short int path[20001];char in[20001];char out[20001];char vis[20001];short int part[20001];//char map[20001][20001];voi 阅读全文
posted @ 2014-04-19 20:30 _一千零一夜 阅读(191) 评论(0) 推荐(0)
摘要:#includeusing namespace std;struct G{ int dest; G *next;};int n,m;G *ga[20001];G *gt[20001];G *g[20001];int path[20001];int in[20001];int out[20001];int vis[20010];int part[20001];char map[20001][20001];void addedge(G *g[],int i,int j){ G *l=new G; l->dest=j; l->next=g[i]; g[i]=l;}void dfsa(in 阅读全文
posted @ 2014-04-18 19:55 _一千零一夜 阅读(133) 评论(0) 推荐(0)
摘要:强连通分量 基础题 比较简单 第一次使用链式结构 纪念一下#includeusing namespace std;struct G{ int dest; G *next;};int n,m;G *ga[10001];G *gt[10001];int path[10001];int vis[10001];void addedge(G *g[],int i,int j){ G *l=new G; l->dest=j; l->next=g[i];//注意g初始化为0 g[i]=l;}void dfsa(int u){ G *l=ga[u]; if(!vis[u]) { vis[u]=1; 阅读全文
posted @ 2014-04-18 18:58 _一千零一夜 阅读(127) 评论(0) 推荐(0)
摘要:知其然 不知其所以然 哦哦DAG的最小路径覆盖和二分图的最大匹配 DAG图的最小路径覆盖数=节点数(n)- 最大匹配数(m)注意重新构图有原理一次通过#include#includeusing namespace std;int map[122][122];int fa[122];int v[122];int n;int dfs(int u){ for(int i=1;i<=n;i++) { if(map[u][i]&&!v[i]) { v[i]=1; if(!fa[i]||dfs(fa[i])) { fa[i]=u; return 1; } } } retu... 阅读全文
posted @ 2014-04-17 18:51 _一千零一夜 阅读(171) 评论(0) 推荐(0)
摘要:转自http://www.cnblogs.com/jackiesteed/articles/2043934.htmlDAG的最小路径覆盖和二分图的最大匹配DAG的最小路径覆盖是指找最小数目的互相不相交的有向路径,满足DAG的所有顶点都被覆盖.首先给出公式:DAG的最小路径覆盖数=DAG图中的节点数-相应二分图中的最大匹配数.那么对应一个DAG,如何构造相应的二分图?对于DAG中的一个顶点p,二分图中有两个顶点p和p',对应DAG中的一条有向边p->q,二分图中有p-q'的一条无向边.二分图中p属于S集合,p'属于T集合.下面我们来解释上面公式为什么成立,思路参考b 阅读全文
posted @ 2014-04-17 18:33 _一千零一夜 阅读(372) 评论(0) 推荐(0)
摘要:最小点集覆盖==最大匹配 证明转自http://blog.csdn.net/chinachenyadong/article/details/8645145分类: Algorithm 2013-03-07 09:50 74人阅读 评论(0)收藏 举报摘自http://www.cnblogs.com/rainydays/archive/2011/03/03/1969543.html首先,最小点集覆盖一定>=最大匹配,因为假设最大匹配为n,那么我们就得到了n条互不相邻的边,光覆盖这些边就要用到n个点。现在我们来思考为什么最小点击覆盖一定<=最大匹配。任何一种n个点的最小点击覆盖,一定可以 阅读全文
posted @ 2014-04-15 18:36 _一千零一夜 阅读(297) 评论(0) 推荐(0)
摘要:无语了 同一种电话号码竟然能出现两次并且不算同一个#include#include#includeusing namespace std;char a[1111][11111];int main(){ char s[11111]; int n,i,f,j; while(cin>>n&&n) { f=0; for(i=0;i>a[i]; for(i=0;i<n;i++) { int l=strlen(a[i]); for(j=0;j<n;j++) { int l1=strlen(a[j]); if(i==j||l1<l) continue; s 阅读全文
posted @ 2014-04-13 16:14 _一千零一夜 阅读(142) 评论(0) 推荐(0)
摘要:用的时候太不细心关注细节问题了#include#include#includeusing namespace std;int map[333][333];int v[333];#define INF 999999999int min(int a,int b){ if(aw) map[x][y]=w; } printf("Case %d:\n",cas); while(q--) { scanf("%d",&w); if(w==1) //一开始全没解放 直接输出 { scanf("%d%d",&x,&y); if( 阅读全文
posted @ 2014-04-13 15:50 _一千零一夜 阅读(120) 评论(0) 推荐(0)
摘要:#include#includeusing namespace std;int sum;struct LNode{ char data; struct LNode * next;};void f1(LNode *&L){ LNode *s,*r; int n; L=(LNode *)malloc(sizeof(LNode)); cout>n; r=L; for(int i=0;i>s->data; sum++; r->next=s; r=s; } r->next=NULL;}void f2(LNode *&L){ LNode *r=L,*s; wh 阅读全文
posted @ 2014-04-02 12:26 _一千零一夜 阅读(156) 评论(0) 推荐(0)