自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(203)
  • 收藏
  • 关注

原创 ahu-730-幸运抽奖

最多情况不超过long long,先DP打表再取模。 dp[52][1300][52] 一维代表此时选择的数的个数,二维代表此时的总和,三维代表此时选的最大数。 dp[i][j][k] = dp[i-1][j-1][1]+dp[i-1][j-2][2]+…dp[i-1][j-k1+1][k1]; 有很多情况不用递推可以剪掉。 思路太繁琐,有没有人用二维DP或组合数学AC的啊!!!#inclu

2016-04-09 15:55:53 338

原创 poj-2528-线段树离散化区间

离散化就是把区间压缩 1-10有十个数其实可以变成3个点起点终点和中间的一个点,1-2有两个数那就是两个点。 lazy思想简单题#include<cstdio>#include<algorithm>#include<cstring>#define lson i<<1,l,(r+l)/2#define rson (i<<1)+1,(r+l)/2+1,rusing namespace std

2016-04-09 13:15:36 476

原创 ahu-518-塔

水DP,排个序就不超时了#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int dp[2][510000],a[60],n;bool sym[2][510000];int main(){ while(scanf("%d",&n)!=EOF) {

2016-04-08 15:11:39 344

原创 ahu-563-3次幂分解

(1)把n化成三进制; (2)x位为0不考虑; (3)x位为2考虑成3^(x+1)-3^x;为1考虑成3^x; ( 4 )还有一些细节消除多余项自己考虑。。。#include<cstdio>#include<queue>#include<stack>using namespace std;int n,t;long long thi[30]; int main(){ sca

2016-04-07 22:40:29 410

原创 HDU-1711-kmp模板

#include<cstdio>int a[1100000],b[11000],n,m,next[11000],t;void getNext(){ next[1] = 0; int i=1,j=0; while(i<m) { if(j==0||b[i]==b[j]){ i++; j++; i

2016-04-04 17:58:03 317

原创 BestCoder Round #78 (div.1) CA Loves GCD

因子分解,然后把约数为1到1000的方案都求出来,比如约数为2的方案为2^(n个数中能被2整除的个数)-1,然后从1000到1逆推,推的过程要更更新小约数的值比如推完am[8]时,am[2],am[4],am[1]都要减去am[8](因为m个数的公约数为8时那公约数一定也为2和4,)逆推可以保证最大公约数。 这么水的题都要想很长时间我真是太渣了。。。#include<cstdio>#includ

2016-04-02 22:56:06 279

原创 poj-1833-排列 stl next_permutation(a,a+n)

#include<cstdio>#include<algorithm>using namespace std;int t,n,m;int a[2000];int main(){ scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(int i=0;i<n;i++)

2016-04-01 23:08:01 369

原创 高精度模板

转自 http://www.mamicode.com/info-detail-454902.html 1.加法#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int L=110;string add(string a,string b)//只限两个非负整数相加{ s

2016-04-01 14:17:02 1573

原创 Codeforces Round #346 (Div. 2)E. New Reform 乱搞dfs

#include<cstdio>#include<cstring>#include<map>#include<algorithm> using namespace std;map<int,int>mp[110000];int next[200000],link[200000],n,m,co[200000],l,last[200000];bool sym[200000],sym2;vo

2016-04-01 12:18:20 351

原创 poj-3268-Silver Cow Party dijkstra模板题

第一遍dijkstar(求终点到起点的最短路) 第二遍dijkstra 权值反转(把mp[i][j]和mp[j][i]交换)(求各起点到终点的最短路) 水水水水水~~~~~#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int ans[1005],dis[1005],mp[1005][1005

2016-03-26 14:03:43 304

原创 poj-1797-Heavy Transportation dijkstra 水模板

求所有路径中最小权值最大的那条路径 水水水水水~#include<cstdio>#include<cstring>#include<algorithm>using namespace std;bool sym[1010];int mp[1010][1010],st,en,we,n,m,maw[1010];int dijkstra(){ memset(sym,0,sizeof(s

2016-03-26 13:15:22 336

原创 HDOJ-1428-BFS+记忆化搜索

题意难理解 1.让你先求各点到终点的最短距离 2.求起点到终点的方案数,方案满足途中经过的每个点的到终点的最短距离都要比前面经过的点到终点的最短距离要短。。。#include<cstdio>#include<cstring>#include<queue>using namespace std;#define MAX 9999999struct node{ int x,y;}n

2016-03-20 21:58:55 348

原创 HDOJ-小希的迷宫 水并查集

1.判断所有点的根节点是不是同一个 2.加点时判断两个点之前的祖宗是不是一个#include<cstdio>int am[100005],fa[100005],n,a[100005],b[100005];bool sym;void init(){ for(int i=0;i<100005;i++) { am[i] = 1; fa[i] = i;

2016-03-20 19:21:30 268

原创 快排模板

http://www.acmerblog.com/quick-sort-5789.html/* 快速排序朴素的实现 */#include<stdio.h>void swap(int* a, int* b){ int t = *a; *a = *b; *b = t;}/*取最后一个作为基准 *///划分操作的 第二种实现int partition(int * arr,

2016-03-20 17:35:33 306

原创 aoj-733-闭合折线

1.先按x从小到大排序,再按y从小到大排序,x值相同的各点数肯定为偶数且从下到上两两匹配形成一组线段 2.判断在点内点外的方法应该会几何的都知道。。。毕竟我这种渣货都能熟练敲出来。#include<cstdio>#include<cmath>#include<cstdlib>struct point{ int x,y;}p[20000],p1;int cmp(const void

2016-03-20 15:19:29 400

原创 codeforces-Goodbye2015- New Year and Ancient Prophecy

第一次做这种难度的题刚开始做一点思路没有,看完别人的思路做出来以后感觉好简单我居然当时没有思路! 1.先求最长连续子串。因为后面要比较两个字串的大小如果在下面DP的时候在一次次比较两个数的大小妥妥会爆的。 2.DP (1)dp[i][j]代表最末尾为s[i]s[i+1]…s[j]这个数时的方案数,如果末尾为s[i]s[i+1]…s[j]这个数的方案可以,那这些方案同样适用s[i]s[i+1]

2016-03-20 15:12:16 322

原创 codeforces-Good Bye 2015-New Year and Domino

有点容斥原理的意思。。。#include<cstdio>long long dp[505][505],n,m;char mp[505][505];int main(){ while(scanf("%d%d",&n,&m)!=EOF) { for(int i=1;i<=n;i++) scanf("%s",mp[i]+1); for(in

2016-03-19 19:53:44 284

原创 poj-1611-The Suspects

并查集。。。 怎么分?想起了人民公社化。。。刚开始每个人在一个小社里。后来人际交流嘛各种互相介绍结果开始合成大社。总结和编号为0的人在一个大社的总人数。#include<cstdio>#include<algorithm>int n,m,l,fa[30005],am[30005],faGroup[30005];void init(){ for(int i=0;i<n;i++)

2016-03-19 15:19:19 238

原创 poj-2236-Wireless Network

并查集简单题 题意表面是1000*20000的数量级 其实最坏只需要(1+1000)*1000/2次合并就行了。。。#include<cstdio>int n,d;char order[10];struct node{ int x,y;}a[2000];int fa[2000],am[2000],st[2000];void init() { for(int i=1;i<

2016-03-19 14:18:09 291

原创 HDU-1176-免费馅饼

题意没申清 刚开始以为在s点s+1和s-1的馅饼也可以捡和0和10不能到(题意坑也不说清楚)最后发现就是水DP。。。 没做任何优化除了用了个滚动数组。。。#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int dp[2][13];int th[100005][1

2016-03-18 21:20:00 534

原创 HDU-1159-最长公共序列模板。。。

简单但总忘只能记录了。。。#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;char s1[600],s2[600];int dp[600][600];int main(){ while(scanf("%s %s",s1+1,s2+1)!=EOF)

2016-03-17 19:48:03 348

原创 HDOJ 1078 FatMouse and Cheese 记忆化搜索模板

记忆花搜索和普通搜索的区别 前者dp思想从终点推到起点也就是祖宗的最优值从他的子孙中的最优值选取 后者枚举从起点到终点刷新一遍#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int dp[200][200],mp[200][200],n,k,bu[4][2] = {0,1,0,-1,1,0,-

2016-03-16 21:09:41 740

原创 Hdoj-1074-状压dp

n个课程就是一个有n位置的二进制数,然后从0(也就是还没写作业)到(1<< n)-1(也就是全写完DP求最优解) 比如说 要完成四门作业的话此时要推dp[1011](第1,2,4门作业完成最少扣得分)那它就是由 dp[1001],dp[0011],dp[1010]三个状态转移的最优解, 置于顺序输出则先由0011转移再由1001转移再由1010转移(物品从n-1到0进行选取也就是先把下表大的作业

2016-03-16 15:28:29 432

原创 codeForces-Longest Subsequence

#include<cstdio>#include<cstring>using namespace std;int a[1100000],b[1100000],n,k, c[1100000];int main(){ while(scanf("%d%d",&n,&k)!=EOF) { memset(b,0,sizeof(b)); int i1 =

2016-03-15 21:04:09 295

原创 hdoj-1251-tire树模板

#include<cstdio>#include<cstring>using namespace std;struct tire{ int cnt; tire *next[26];}; tire *root = new tire;void BuildTire(char *str){ tire *p = root; int l = strlen(str);

2016-03-12 16:20:36 313

原创 ahu-557容斥原理

用容斥求1-n中能被2-i中素数整除的个数ans其中 i*i<=n;然后结果为n-ans-1;#include<cstdio>int pri[10005],pri2[10005],i1,n,ans;void toGetPrim(){ for(int i=2;i<=10001;i++) if(!pri[i]){ for(int j=2;j*i<=10001;j++

2016-03-12 14:16:15 391

原创 hdoj-1796 容斥水题

第一发略坑#include<cstdio>#include<iostream>#include<algorithm>using namespace std;__int64 n,m,ans,sum,a[20],b;__int64 lcm(__int64 a,__int64 b){ int a1 = a,b1 = b; while(b){ long long

2016-03-11 22:11:50 257

原创 hdoj-1800-Flying to the Mars ELFhash模板

#include<cstdio>#include<cstring>#define max 3007int n,am[max],ans,hash[max];inline int ELFhash(char *str){ int h = 0,k; while(*str) { h = (h<<4) + *str++; k = h&0xf0000000L;

2016-03-08 21:51:42 258

原创 Hdoj-5637Transform

题意 s^t^w = 0, w为选取a1,a2,a3。。。an.2的0次方,2的1次方,2的2次方。。。2的16次方 选几个数异或出来的,w = s^t;最多31个数用bfs把生成w(0-100000)的步骤都求出来。#include<cstdio>#include<queue>#include<cstring>using namespace std;int a[50],n,m,no1,no

2016-03-08 11:47:56 219

原创 codeforces633D Fibonacci-ish map容器

map就是建一个红黑书 把每个元素的值都加进树种,当查找这个元素的值时算法复杂度logn 关于map的用法: map#include<cstdio>#include<cstring>#include<map>#include<algorithm>using namespace std;map<int,int>mp;map<int,int>mp2;int n;int main()

2016-03-01 13:11:51 294

原创 codeforces-A Trivial Problem 判断n!末尾0的个数模板

即判断n!有多少个5#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#include<iostream>#include<queue>#include<stack>#include<set>#include<vector>#include<ctime>using namespace std;i

2016-03-01 12:52:29 322

原创 poj-1584 判断凸包算法+极角排序+判断点在几何内外 模板

几何问题的重点 1 精度问题 有时答案一直错不是因为算法错误 而是精度没有处理好 2 代码能力 几何代码量较大 要不断练习熟能生巧,否则因为一个bug可能要查错很长时间#include<cstdio>#include<cmath>#include<stack>#include<algorithm>using namespace std;struct point{ double

2016-03-01 12:36:23 867

原创 poj-1408-计算两线相交点坐标模板

4个点 (a1,b1) (a2,b2)组成一条线 (c1,d1) (c2,d2)组成一条线 x= ( (a2-a1)(c2-c1)(d2-b2) +(b2-b1)*(c2-c1)*a2 -(d2-d1)*(a2-a1)*c2 ) / ( (b2-b1)*(c2-c1) -(d2-

2016-02-26 20:52:41 476

原创 Poj-2031 最小生成树+几何

用最短距离使几个球联通,最小生成树,两点距离为几何知识。#include<cstdio>#include<algorithm>#include<iostream>#include<cmath>using namespace std;struct edge{ int x,y; double v;}e[20000];int fa[200],am[200];double a

2016-02-25 21:03:56 402

原创 hdoj-1532-edmondsKarp最大流算法模板

#include<cstdio>#include<queue>#include<cstring>using namespace std;int m,n,mp[205][205],a,b,c,path[205],flow[205];int bfs(){ queue<int>qu; qu.push(1); memset(path,-1,sizeof(path));

2016-01-14 16:44:32 742

原创 poj-3020-二分图最大匹配

知识点 1.最小边覆盖 = 定点数-最小点覆盖; 2.建图; 3为无向图 所有最小点覆盖要/2;#include<cstdio>#include<cstring>int dis[405][405],t,n,m,x[5] = {0,0,1,-1,0},y[5] = {1,-1,0,0,0},am[100][100],ans,link[405],usedif[405];char mp[100

2016-01-14 08:58:00 495

原创 poj-3041-匈牙利算法模板

求最小点覆盖数 = 最大匹配数#include<cstdio>#include<cstring>bool way[505][505],usedif[505];int n,m,a,b,link[505];bool dfs(int s){ for(int j=1;j<=n;j++) { if(!usedif[j]&&way[s][j]) {

2016-01-14 00:07:02 413

原创 poj-3687-Labeling Balls

1, 拓扑排序让编号小的尽量越轻,在输入的条件下,先保证第一个球最轻的前提下,再保证第二个球最轻,在前两个前提下再保证第三个球最轻。 2、依次输入编号1-n的球的重量审清题意、 3 所有人的第一反应都是先把最轻的搞出来再一个个搞,这贪心不对,因为假如第二次取最轻的小球只有编号三无父节点,你把重量二给编号三然后此时编号二还是有父节点(假设编号八是编号二的父节点)此时编号二重量最轻是四,如果

2016-01-13 17:23:16 399

原创 拓扑排序模板

两种类型依情况使用,多数使用第二种dfs#include <iostream> using namespace std; int map[502][502], indegree[502], m, n, pur[502]; void topsort() { int i, j, k=1; for(i=1; i<=n; i++) { f

2016-01-13 14:37:43 312

原创 poj-1258-最小生成树kruskal模板

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int n,l1,a,fa[200],am[200];struct edge{ int x,y,v;}e[20000];void init(){ for(int i=0;i<n;i++)

2016-01-11 17:24:05 520

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除