摘要: 写这篇主要是 要 提醒一下 自己 不要 这么粗心!!!!!!!!一开始 把n打成m了 输出的 一团糟 半天都没看出来 后来 for 后有多加了个;又找了好久 交上去wa 原来数组又开小了 嗷嗷嗷~~#include<iostream>#include<algorithm>using namespace std;struct node{int l;int w;int flag;}p[6000];int cmp(node a,node b){ if(a.l==b.l) return a.w<b.w; return a.l<b.l;}int main(){ int 阅读全文
posted @ 2013-05-25 20:02 galaxy77 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 在黄霖的博客里看到这道题 是他们湘大比赛的一道 刚开始自己想的比较复杂 一看他 的 代码 原来这么简单 啊啊~TAT。。。看完他的思想 自己在写了一遍,其实 写的 和他差不多啦。。#include<stdio.h>#include<string.h>int main(){ int i,j,n,m,len,k,num,f[10010]; char s[10100]; while(~scanf("%d",&n)) { while(n--) { scanf("%s",s+1); len=strlen(s+1); f[0]=0; 阅读全文
posted @ 2013-05-24 22:45 galaxy77 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 约瑟夫问题总结 poj 2244 HDU 2211约瑟夫问题数学解法(转)首先看一看最原始的约瑟夫问题:1 约瑟夫环(Josephus)问题是由古罗马的史学家约瑟夫(Josephus)提出的,他参加并记录了公元66—70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷之后,他和40名死硬的将士在附近的一个洞穴中避难。在那里,这些叛乱者表决说“要投降毋宁死”。于是,约瑟夫建议每个人轮流杀死他旁边的人,而这个顺序是由抽签决定的。约瑟夫有预谋地抓到了最后一签,并且,作为洞穴中的两个幸存者之一,他说服了他原先的牺牲品一起投降了罗马。2 17世纪的法国数学家加斯帕 阅读全文
posted @ 2013-05-19 16:36 galaxy77 阅读(308) 评论(0) 推荐(0) 编辑
摘要: http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1165要是 字符串 只有几十个就可以用搜索 不过这里 最多有1000个 只能用dp啦。。。d[i][j] 前i个字符中含有j个')' 的方法数动态转移方程为d[i][j]=(d[i-1][j]+d[i-1][j-1]) (当s[i]=='('时 和s[i]==')'时 的两种情况 输出d[len][(len)/2]有个要注意的地方是 d[i][0]不能全部初始化为1 像 ()?? a[2][0] 就不可能为1 要是前i个包括 阅读全文
posted @ 2013-05-14 16:18 galaxy77 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 先学习了一下ac 自动机 http://www.cppblog.com/mythit/archive/2009/04/21/80633.html关键的几句话 :buildac 构造失败指针的过程概括起来就一句话:设这个节点上的字母为C,沿着他父亲的失败指针走,直到走到一个节点,他的儿子中也有字母为C的节点。然后把当前节点的失败指针指向那个字母也为C的儿子。如果一直走到了root都没找到,那就把失败指针指向root。query 当前字符匹配,表示从当前节点沿着树边有一条路径可以到达目标字符,此时只需沿该路径走向下一个节点继续匹配即可,目标字符串指针移向下个字符继续匹配;(2)当前字符不匹配,则去 阅读全文
posted @ 2013-05-05 22:14 galaxy77 阅读(188) 评论(0) 推荐(0) 编辑
摘要: #include<iostream>#include<algorithm>using namespace std;int i,n,j,p,w,a[1000000],ans[1000000];int main(){ while(scanf("%d",&n)!=EOF) { p=(n+1)/2; memset(ans,0,sizeof(ans)); for(j=0;j<n;j++) scanf("%d",&a[j]); for(i=0;i<n;i++) { ans[a[i]]++; if(ans[a[i]] 阅读全文
posted @ 2013-04-30 18:01 galaxy77 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 搜索http://acm.hdu.edu.cn/showproblem.php?pid=1584枚举每张未移动的牌移动到后面的第一张未移动的牌上去 比如要移动1 而 2 3 4 都移动过了 就把1移动到 5上去 因为 2 3 4 一定都移动到了 5上面#include<iostream>#include<string.h>#include<math.h>using namespace std;int a[12],vis[12],min1;void dfs(int cur,int temp){ int i,j; if(temp>=min1) return 阅读全文
posted @ 2013-04-30 17:56 galaxy77 阅读(232) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1421d[n][m] : 在前n个物品里选m对的最小疲劳当地n件不选时 d[n][m]=d[n-1][m]当第n件选是 第n件一定是与第n-1件一起组成一对 d[n][m]=d[n-2][m-1]+(a[n]-a[n-1])^2所以动态转移方程为d[i][j]=min1(d[i-1][j],d[i-2][j-1]+(a[i-1]-a[i])*(a[i-1]-a[i]));#include<iostream>#include<string.h>#include<math.h> 阅读全文
posted @ 2013-04-30 17:36 galaxy77 阅读(131) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1069#include<stdio.h>#include<stdlib.h>typedef struct abc{int x,y,z;} abc;abc a[100];//定义结构体,里边分别存,长宽高;int k;int cmp( const void *a,const void *b){abc *c,*d;c=(abc *)a;d=(abc *)b;if(c->x!=d->x) return c->x-d->x;else return c->y-d-& 阅读全文
posted @ 2013-04-30 17:22 galaxy77 阅读(166) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=4207两个数都不会超过六位数 所以可以直接用64位int 不会溢出只要注意输出格式 就好了#include<iostream>#include<string.h>using namespace std;__int64 a;int max1;int count(__int64 x){ int t=0; while(x) { x/=10; t++; } return t;}void solve(int temp,int c,int p){ __int64 v,i,ans; if(c==-1 阅读全文
posted @ 2013-04-30 13:08 galaxy77 阅读(120) 评论(0) 推荐(0) 编辑