09 2011 档案
摘要:该题是一个DFS的应用,该题的关键在于建立一个结构体来存储要你填入的数据,这要就不会像无头苍蝇一样乱搜索,同时也会剪枝不少;同时就是判断横竖不能又重复的,也就是不能等于你要填入的数据,还有一点就是每个小3*3的矩阵要是1-9不能重复,这里就对该坐标x/3*3就可以了;#include<stdio.h>#include<stdlib.h>#include<string.h>struct node{ int x,y; }q[100];int map[9][9],res,flag;bool judge( int n,int num ){ for( int i=0;
        阅读全文
                
摘要:这题就是是一个最小生成树问题,题目意思,给你一个数n接下来有n-1行,每一行代表一个地点与多个地点相连结,例如:A 2 B 12 I 25代表A与连接2地方B,I并且价钱为12,25;#include<stdio.h>#include<stdlib.h>struct t{ int x,y,time;}kru[1024];int set[27];int find( int x ){ return set[x]==x?x:set[x]=find( set[x] ); }int cmp( const void *a,const void *b ){ return ( ( t.
        阅读全文
                
摘要:这个题是AC自动机的模版题;#include<stdio.h>#include<stdlib.h>#include<string.h>struct node{ int flag; node *ch[26],*fail; }*q[1000024];node *empty( ){ node *t=( node * )malloc( sizeof( node ) ); memset( t->ch,NULL,sizeof( t->ch ) ); t->flag=0 ; t->fail=NULL ; return t; }void build_
        阅读全文
                
摘要:这题就是注意一下当状态为1是就把这两给点合并到一个集合;#include<stdio.h>#include<stdlib.h>struct t{ int x,y,flag,cost; }kru[5024];int set[124];int cmp( const void *a,const void *b ){ return ( ( t * )a )->cost-( ( t * )b )->cost; }int find( int x ){ return x==set[x]?x:set[x]=find( set[x] ); }int kruscal( i...
        阅读全文
                
摘要:我用G++提交就TLE了,而用C++提交就过了,这题就是一个并查集与克鲁斯卡尔。#include<stdio.h>#include<stdlib.h>struct t{ int x,y,cost; }kru[25024];int set[524];int cmp( const void *a,const void *b ){ return ( ( t * )a )->cost - ( ( t * )b )->cost; }inline int find( int x ){ return set[x]==x?x:set[x]=find( set[x] ); .
        阅读全文
                
摘要:刚开始知道要用记忆化搜索,然而自己仍然去试了一下暴力DFS,TLE之后我就死心了,就利用记忆化搜索,就是用一个标记hash标记已经拜访过的;#include<stdio.h>#include<stdlib.h>#include<string.h>char num1[224],num2[224],num3[424];int len1,len2,len3,flag,hash[224][224];void DFS( int a,int b,int c ){ if( len3==c ) { flag=1; return ; } if(...
        阅读全文
                
摘要:该题是一道记忆化搜索,这题与HDU 1248 漫步校园是一样的,这里不解释了。#include<stdio.h>#include<stdlib.h>#include<string.h>const int inf=0x7fffffff;struct t{ int x,y; }q[1000024];int n,m,hash[1024],dis[1024],map[1024][1024];void empty(){ for( int i=0;i<=n;i++ ) { hash[i]=0; dis[i]=inf; ...
        阅读全文
                
摘要:刚开DIY做这题时以为就是一个简单的BFS题目,后来才知道这是一题记忆化搜索题目,用一个简单的公式就是:记忆化搜索=搜索形式+动态规划的思想;这题的思想就是:先用BFS求出n到任何一点的最短距离(跟迪杰斯特拉一样),这就是利用了动态规划的思想;然后,再用DFS进行搜索,这里就要就行记忆化的搜索,具体就是,如果到该点的最短距离的路的条数已经知道那么就不需要再往下求了。#include<stdio.h>#include<stdlib.h>#include<string.h>constint inf=0x7fffffff;struct node{ int x,y;
        阅读全文
                
摘要:该题我直接用的暴力搜索,因为之最大只有4*4,这个题最重要的是标记;#include<stdio.h>#include<stdlib.h>int max,map[6][6];int flagx(int i,int j, int n){ int re=0; for( int k=i;k<n;k++ ) { if( map[k][j]=='X' ) break; if( map[k][j]=='.' ) { map[k][j]=i; re++; ...
        阅读全文
                
摘要:用dfs会超时,而且BFS不剪枝的话也会超时。。。三维搜索。。。搜索题,三维BFS,设定前后上下左右6个方向搜索1.刚开始一直WA,我就一直找不出错误,后来在看这个题时才发现自己犯了个严重的错误,刚开我就把城堡四周赋值为1,后来就没这样初始化了;现在想想吧太不应该了;2、要认清剪枝的重要性,剪枝非常有利于提高代码的效率,就这题而言,若没有if(a+b+c-3>t) {printf("-1\n");continue;}(起点与终点间最短路径大于时间限度),虽然没超时;#include<stdio.h>#include<stdlib.h>struc
        阅读全文
                
摘要:该题TLE了几次,后来才发现要用奇偶剪纸,如果起点到终点的步数为偶数那么不管你怎样走,步数一定为偶数;#include<stdio.h>#include<stdlib.h>#include<string.h>char map[10][10];int flag,M,N;int d[8]={ -1,0,0,1,1,0,0,-1 };void DFS( int x,int y,int n,int T ){ // printf( "afsad" ); if( flag || n>=T ) return; for( int k=0;k<
        阅读全文
                
摘要:该题是一道字典树的题目,就是是要你翻译一下,如果你学了字典树就会发现这是一道水体;#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct t{ char num[12]; t *ch[26]; int flag; }tire;tire *empty(){ tire *t=( tire * )malloc( sizeof( tire ) ); for( int i=0;i<26;i++ ) t->ch[i]=NULL; memset( t->num,...
        阅读全文
                
摘要:该题刚开始用最原始的方法,先筛出质数,再利用X=( p1-1)*( p2-1)*....*( pn-1)*( p1^(q1-1))*( p2^( q2-1))*...*( pn^( qn-1)),我就测试了一下3--3000000发现要好长的时间我就知道这种方法一定会超时;后来看了解题报告,才知道有如下的线性筛选法( 我个人刚开始不太喜欢线性法,因为我与其比较过其他的筛选法,发现并没有那么快,并且还要开那么大的数组,后来发现线性筛选法可以与好多的题目的结合处理特别好,现在也开始钟情它了);在程序中利用欧拉函数如下性质,可以快速求出欧拉函数的值(a为N的质因素)(1) 若(N%a==0 &
        阅读全文
                
 
                    
                
 浙公网安备 33010602011771号
浙公网安备 33010602011771号