摘要:
点我看题目题意 : 中文题不详述。思路 :因为还牵扯到层的问题,所以用三维的解决,不过这个还是很简单的BFS,六个方向搜一下就可以了,一开始交的时候老是超时,怎么改都不对,后来看了一个人写的博客,他说用C++交300ms,G++交600ms,我就改成C++交了,果然AC了,不过。。。。用了900ms。。。。。我也懒得改了,也不知道为什么G++交超时#include #include #include #include #include #include #include using namespace std ;int mapp[51][51][51] ;bool vis[51][51][51 阅读全文
摘要:
点我看题目题意 : 这个人在左下角,地铁在右上角,由很多格子组成的地图,每一条边都是一条路,每一条边都是100米。还有的可以走对角线,问你从起点到终点最短是多少。思路 : 其实我想说一下,,,,,这个题基本都是用DP做的,这是为什么呢?好吧,这要从我最近要刷BFS题开始,于是二货自己很厉害的用BFS做完了,所以就给我推荐了,我其实没看出来能用BFS来做。。。。。。。//URAL 1119#include #include #include #include #include using namespace std;int n,m ;bool ch[1100][1100] ;bool vis[1 阅读全文
摘要:
点我看题目题意 :中文不详述。思路 :因为这个题加了一个要求就是路径数目得是x的倍数。所以在原来算法的一维dis数组增加到二维,用来存走的路径数%x。也可以用spfa做。#include #include #include #include using namespace std ;#define LL long longconst int maxn = 110 ;const int maxm = 10010 ;bool vis[maxn][maxn] ;const LL INF = 1LL dist[i][j]) { min... 阅读全文
摘要:
点我看题目题意 : 一个新的多米诺骨牌游戏,就是这个多米诺骨中有许多关键牌,他们之间由一行普通的骨牌相连接,当一张关键牌倒下的时候,连接这个关键牌的每一行都会倒下,当倒下的行到达没有倒下的关键牌时,这个关键牌也会倒下,然后与这个关键牌相连接的所有行都会倒下,每一行有两个端点也就是两个关键牌,可以从任意一个端点开始倒下,也可以从两个端点同时开始倒下,从第一张骨牌开始倒,最后倒下的牌的位置以及时间。思路 : 先利用Dijkstra求出每张关键牌倒下的时间time[i],即求出第一张关键牌到其他关键牌的最短路径,然后求出众最短路径中最大的那个,即为time1。再计算每一行倒下的时间,每一行的两个关键 阅读全文
摘要:
点我看题目题意 : 中文不详述。思路 :就是DFS一下,只要到达终点条数就加1,然后再注意一下方向,因为我就是没注意方向WA了,只能向上向右走,x是行,所以向上是x-1,向右是y+1,因为我没弄好,结果就废了。。。。。。#include #include #include #include using namespace std;int m,n,sx,sy,ex,ey ;int mapp[30][30] ;int vis[30][30] ;int dire[2][2] = {{0,1},{-1,0}} ;int cnt ;void DFS(int x,int y){ if(x == ex... 阅读全文
摘要:
点我看题目题意:中文不详述。思路 :上上上场比赛让一个BFS给虐了,上次比赛让一个三维的给废掉了。。。。。。。所以急于从水题刷起。。。。。。还因为数组开小了WA了5,6次#include #include #include #include using namespace std;int m,n,sx,sy,ex,ey ;int mapp[17][17] ;int vis[17][17] ;int mpx[400],mpy[400] ;int dire[4][2] = {{0,-1},{-1,0},{0,1},{1,0}} ;int flag ;int step ;void DFS(int x 阅读全文
摘要:
#include #include #include int mapp[210][210] ;bool vis[210] ;using namespace std;int N,M ;void DFS(int u){ vis[u] = true ; for(int i = 1 ; i <= N ; i++) if(!vis[i] && mapp[u][i]) DFS(i) ;}int main(){ int T ; scanf("%d",&T) ; while(T--) { scanf("%d %d",&N,& 阅读全文
摘要:
链接A. Valera and Xtime limit per test:1 secondmemory limit per test:256 megabytesinput:standard inputoutput:standard outputValera is a little boy. Yesterday he got a huge Math hometask at school, so Valera didn't have enough time to properly learn the English alphabet for his English lesson. Unfo 阅读全文
摘要:
点我看题目题意 :就是有两个熊孩子要把一个正方形上的草都给烧掉,他俩同时放火烧,烧第一块的时候是不花时间的,每一块着火的都可以在下一秒烧向上下左右四块#代表草地,.代表着不能烧的。问你最少花多少时间可以烧掉,如果烧不掉就输出-1思路 :这个题因为可以同时向上下左右同时烧过去,所以一看我就知道是BFS,但是知道没用啊,我做不出来啊,我一开始没想过来,以为两个人烧很麻烦,其实就是向普通的那样做,不过来个6重for循环就行了,其实就是看看有几个块,如果块的个数超过两个就为-1,两个的话,分别开始烧,哪个块里有最长路,就是烧的那个时间,不过你要枚举有最长路的那个的块的每一个可烧的点,从而找出时间最短的 阅读全文
摘要:
点我看题目题意 : 中文题不解释。思路 :先算了第3个第4个,算的时候发现只要在已经枚举出来的前边的状态中往后添加字母就行了,如果两个的都已经表示出来了,那第三个就可以在每个第二个后边加一个,在第一个后边加两个。#include #define LL __int64LL a[51] ;void chart(){ a[1] = 3 ; a[2] = 6 ; a[3] = 6 ; for(int i = 4 ; i < 51 ; i++) a[i] = a[i-1]+a[i-2]*2 ;}int main(){ int n ; chart() ; w... 阅读全文