X-man

导航

随笔分类 -  ACM--搜索

1 2 下一页

A. Xor-tree
摘要:题目意思:给一颗n个节点的树,每个节点有一个值要么是0要么是1,改变某个节点的值时,它的儿子不变,它儿子的儿子翻转,它儿子的儿子的儿子不变,如此类推。给定各个节点的目标值,求最少的翻转次数,使得达到要求。题解思路:贪心+Dfs判断当前节点的值,与目标值比较1.当前节点值由其上上一个节点值是否需要改变... 阅读全文

posted @ 2014-07-05 16:16 雨钝风轻 阅读(637) 评论(0) 推荐(0)

hdu 4474 Yet Another Multiple Problem
摘要:题意: 找到一个n的倍数,这个数不能含有m个后续数字中的任何一个题解:#include#include#includeusing namespace std;queueque;int used[10];int flag[10010],pre[10010],value[10010];int n,m;void print(int n){ if(n!=-1) { print(pre[n]); printf("%d",value[n]); }}void bfs(){ for(int i=1; i<=9; i++) { if(!u... 阅读全文

posted @ 2013-10-31 20:46 雨钝风轻 阅读(312) 评论(0) 推荐(0)

hdu 1978 How many ways
摘要:#include#include#includeusing namespace std;int m,n,ans;int mat[101][101],vis[101][101];bool v[101][101];int Dfs(int x,int y){ if(xm||y>n) return 0; if(x==m&&y==n) return 1; if(v[x][y]!=false) return vis[x][y]; for(int i=0;i=10000) vis[x][y]%=10000; ... 阅读全文

posted @ 2013-10-14 16:29 雨钝风轻 阅读(184) 评论(0) 推荐(0)

POJ 3710 Christmas Game
摘要:知识储备: 解决办法(奇偶去环): (1) 对于长度为奇数的环,去掉其中任意一个边之后,剩下的 两个链长度同奇偶,抑或之后的 SG 值不可能为奇数,所 以它的 SG 值为 1; (2) 对于长度为偶数的环,去掉其中任意一个边之后,剩下的 两个链长度异奇偶,抑或之后的 SG 值不可能为 0,所以它 的 SG 值为 0;#include#include#include#includeusing namespace std;vectoredge[105]; //邻接表int mat[105][105]; //存放边的数量int low[105],dfa[105]; //Ta... 阅读全文

posted @ 2013-10-05 17:09 雨钝风轻 阅读(231) 评论(0) 推荐(0)

hdu 3590 PP and QQ
摘要:知识储备: Anti-SG 游戏和 SJ 定理 [定义](anti-nim 游戏)  桌子上有 N 堆石子,游戏者轮流取石子。  每次只能从一堆中取出任意数目的石子,但不能不取。  取走最后一个石子者败。 [结论] 先手必胜当且仅当: (1)所有堆的石子数都为 1 且游戏的 SG 值为 0; (2)有些堆的石子数大于 1 且游戏的 SG 值不为 0。 叶子节点的 SG 值为 0;中间节点的 SG 值为它的所有子节点的 SG 值加 1 后的异或和。只能说入门时候的搜索是硬伤Orz,写个Dfs都得参考更严谨的代码(考虑到输入顺序不一定从根节... 阅读全文

posted @ 2013-10-05 16:33 雨钝风轻 阅读(337) 评论(0) 推荐(0)

hdu 4111 Alice and Bob(中档博弈题)
摘要:copy VS study1.每堆部是1的时候,是3的倍数时输否则赢;2.只有一堆2其他全是1的时候,1的堆数是3的倍数时输否则赢;3.其他情况下,计算出总和+堆数-1,若为偶数,且1的堆数是偶数,则一定输;4.不在上述情况下则赢。#includeint main(){ int js=0; int _case,i,n,x; int flag1,flag2,flag,sum; scanf("%d",&_case); while(_case--) { js++; flag1=0; flag2=0; flag... 阅读全文

posted @ 2013-10-03 10:41 雨钝风轻 阅读(599) 评论(0) 推荐(0)

hdu 1515 Anagrams by Stack
摘要:题解:第一:两个字符不相等(即栈顶字符与目标字符不相等);这种情况很容易处理,将匹配word的下一个字符入栈,指针向后挪已为继续递归。第二:两个字符相等(即栈顶字符与目标字符相等);这种情况有两种选择 (1)字符出栈,并将目标word的指针向后挪一位,继续递归;(2)将匹配word的下一个字符入栈,指针向后挪一位,继续递归;每一次递归用path记录下来路径。当目标word的指针超过最后一位了,说明成功,此时将path输出。#include#include#includeusing namespace std;char str1[1005],str2[1005];int len1,len2;ch 阅读全文

posted @ 2013-10-02 20:08 雨钝风轻 阅读(247) 评论(0) 推荐(0)

hdu 2553 N皇后问题(一维数组详尽解释)
摘要://一维数组解法(注释详尽)//num皇后可以表示第num列,然后枚举num皇后所在的行//二维数组对角线转换为坐标的关系#include#includeint map[15],hang[15],ans[15];int n,cnt;void Dfs(int num){ int i,j,k; if(num>n) { cnt++; return ; } for(i=1;i#include int count[15];//n的最大范围是10,打表!int k,cal;//k个大小的棋盘放的数目int map[15][15];//棋盘int d... 阅读全文

posted @ 2013-09-20 21:12 雨钝风轻 阅读(383) 评论(0) 推荐(0)

hdu 4739 Zhuge Liang's Mines
摘要:#include#includeusing namespace std;#define Max 40struct Node{ int x,y; bool flag;} p[Max];bool cmp(Node p1, Node p2){ if(p1.y#includeusing namespace std;#define Max 40struct Node{ int x,y; bool flag;}p[Max];/*bool cmp(Node p1,Node p2){ if(p1.xans) ans=num; for(i=0;i<n;i+... 阅读全文

posted @ 2013-09-18 19:10 雨钝风轻 阅读(276) 评论(0) 推荐(0)

hdu 4277 USACO ORZ (Dfs)
摘要:题意: 给你n个数,要你用光所有数字组成一个三角形,问能组成多少种不同的三角形时间分析: 3^15左右 #include#includeusing namespace std;sets;int _case,n,sum;int ai[20];int Dfs(int a,int b,int c,int m){ if(m==n) { if(a>b||b>c) return 0; if(a&&b&&c&&a+b>c) { s.insert(a*sum*sum+b*sum+c); } ... 阅读全文

posted @ 2013-09-13 17:07 雨钝风轻 阅读(172) 评论(0) 推荐(0)

hdu 1010 Tempter of the Bone
摘要:#include#include#includeusing namespace std;#define Max 9struct Node{ int x,y; char c; bool flag;} map[Max][Max],st,en;int f[4][2]= {0,1,0,-1,1,0,-1,0};int n,m,t;//int step;int myfabs(int x){ if(xt) return 0; if((myfabs(x-en.x)+myfabs(y-en.y)+t-step)%2)//剪枝 return 0; ... 阅读全文

posted @ 2013-09-12 22:09 雨钝风轻 阅读(170) 评论(0) 推荐(0)

hdu 4272 LianLianKan
摘要:解题思路: 1.贪心(错误):无论取就近的数删除还是最远的数删除,均不对; 相应测试数据: 3 2 4 4 1 3 1 2 1 1 1 4 4 3 1 3 2 2 1 1 2.搜索(可以水过数据,必须处理各个数出现偶数次,否则会超时) 处理1: mapmp;for(int i=1; i::iterator it;for(it=mp.begin(); it!=mp.end(); it++){ if((it->second)%2==1) { t=0; break; } ……} 处理2:while(~s... 阅读全文

posted @ 2013-08-27 17:13 雨钝风轻 阅读(245) 评论(0) 推荐(0)

hdu 1016 Prime Ring Problem
摘要:#include#include#include#define Max 41bool prime[Max];int ans[Max];bool flag[Max];int n;void Myprime(){ int i,j; memset(prime,true,sizeof(prime)); prime[2]=true; for(i=2;i<sqrt(Max+0.1);i++) { if(prime[i]) { for(j=2;i*j<Max;j++) prime[i*j]=false; ... 阅读全文

posted @ 2013-07-26 18:06 雨钝风轻 阅读(182) 评论(0) 推荐(0)

4619 Warm up 2
摘要:#include#include#includeusing namespace std;bool point1[110][110];bool xf[110][110];bool yf[110][110];int tmp,ans;//int d[4][2]={{0,-1},{0,1},{1,0},{-1,0}};int dfs(int i,int j){ if(i110||j>110)return 0; if(xf[i][j]&&point1[i+1][j]) { point1[i+1][j]=false; tmp++; dfs(i+1... 阅读全文

posted @ 2013-07-25 17:05 雨钝风轻 阅读(227) 评论(0) 推荐(0)

hdu 3419 The Three Groups
摘要:#include<string.h>#include<stdio.h>#include <iostream>using namespace std;bool vis[15];int a,b,c,s,res,e[15];int data1,data2,data3;//求s个数的全排,并判断是否满足:data1*data2==data3void perm(int k)//k从1开始{ int i; if(k==s+1)//s=a+b+c { data1=data2=data3=0; for(i=1; i<=a; i++) data... 阅读全文

posted @ 2013-06-10 17:43 雨钝风轻 阅读(257) 评论(0) 推荐(0)

hdu 1372 Knight Moves
摘要:#include<stdio.h>#include<string.h>#include<queue>using namespace std;struct node{ int x; int y; int step;} cur,next,st,ed;int dir[8][2]= {-1,-2,-2,-1,-2,1,-1,2,1,2,2,1,2,-1,1,-2};char start[4],end[4];int map[10][10];queue<node>q;int judge(int x,int y){ if(x<0||x>7||y&l 阅读全文

posted @ 2013-06-01 19:40 雨钝风轻 阅读(135) 评论(0) 推荐(0)

hdu 4501 Zipper
摘要:#include<string.h>#include<iostream>#include<string>using namespace std;string s1,s2,s3;int vist[201][201];int dfs(int a,int b,int c){ if(s3[c]=='\0') return 1; //s3搜完前提是条件都满足 if(vist[a][b]) return 0; //前面已经搜过了 vist[a][b]=1; if(s1[a]==s3[c] && dfs(a+1,b,c+1)) return 阅读全文

posted @ 2013-06-01 15:10 雨钝风轻 阅读(149) 评论(0) 推荐(0)

hdu 2141 Can you find it?
摘要:超时代码:#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int a[510],b[510],c[510];int main(){ int l,n,m,s; int i,j,k,p,x; int _case=0;; while(scanf("%d %d %d",&l,&n,&m)!=EOF) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,size 阅读全文

posted @ 2013-05-31 12:43 雨钝风轻 阅读(173) 评论(0) 推荐(0)

hdu 1242 Rescue
摘要:#include<stdio.h>#include<string.h>#include<queue>using namespace std;struct node{ int x,y; int time; friend bool operator<(node a,node b) { if(a.time>b.time)return true;//越小越优先 return false; }}in,im;int f[4][2]= {{-1,0},{1,0},{0,-1},{0,1}};int n,m;int startx,starty,ans;... 阅读全文

posted @ 2013-05-12 11:30 雨钝风轻 阅读(196) 评论(0) 推荐(0)

hdu 1312 Red and Black
摘要:#include<stdio.h>int w,h,ans;char a[30][30];int d[4][2]={{0,-1},{0,1},{1,0},{-1,0}};int dfs(int i,int j){ int ii,jj; for(int k=0;k<4;k++) { ii=i+d[k][0]; jj=j+d[k][1]; if(ii<h&&jj<w&&ii>=0&&jj>=0&&a[ii][jj]=='.') { ans++; a[ii][jj]='#& 阅读全文

posted @ 2013-05-09 18:37 雨钝风轻 阅读(200) 评论(0) 推荐(0)

1 2 下一页