D. Treasure Island】的更多相关文章

A - Treasure Island Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Description standard input/output Announcement   Statements Pirate John Silver has found a map depicting exactly one island in a sea. The…
D. Treasure Island dfs大法好== 写半天bfs疯狂MLE dfs标记掉路上的一些点 然后再跑一遍dfs #include<bits/stdc++.h> using namespace std; #define int long long #define sc(x) scanf("%I64d",&x); #define read(A) for(int i=0;i<n;i++)scanf("%I64d",&A[i]…
[Codeforces 1214D]Treasure Island(dfs) 题面 给出一个n*m的字符矩阵,'.'表示能通过,'#'表示不能通过.每步可以往下或往右走.问至少把多少个'.'变成'#',才能让从(1,1)出发不能到达(n,m) \(n \times m \leq 10^6\) 分析 第一眼还以为是最小割,一看数据范围感觉会TLE.实际上搜索就可以了. 首先发现答案肯定是0,1,2中的一个(输出rand()%3),因为最多用2个'#',把(1,1)右侧和下方堵住就可以了. 然后注意…
All of us love treasures, right? That's why young Vasya is heading for a Treasure Island. Treasure Island may be represented as a rectangular table n×mn×m which is surrounded by the ocean. Let us number rows of the field with consecutive integers fro…
题意 题目链接给你一个地图,'#'代表水,'.'代表陆地,'?'代表擦去的地图,可能是'#'也可能是'.'.地图中本该只有一块相连的陆地,若只有一种方案则输出确定的地图.若有多种方案,则输出‘Ambiguous’,若无答案,则输出‘Impossible’. 分析 将所有‘.’进行dfs扫一遍,dfs时遇到的‘?’当作'.',因为被'#'包围的'?'一定代表‘#’.一边记录相连的陆地数量b,一边记录当前相连陆地的总格数s0.如果b==1,就对每个遇到过的'?',将其置为'#‘,再dfs一遍,如果扫…
主题链接:点击打开链接 意甲冠军: 特定n*m矩阵 # 是墙 . 和字母是平地 最多有26个字母(不反复出现) 以下k个指令. 每一个指令代表移动的方向和步数. 若以某个字母为起点,依次运行全部的指令,不论什么过程都不会撞到墙或走出地图.则这个字母合法. 按字典序输出全部合法的字母.若没有字母合法则输出' no solution' 预处理一下前缀和然后暴力. #include <cstdio> #include <iostream> #include <algorithm&g…
题目链接:https://vjudge.net/problem/2728294/origin 思路:可以抽象成管道,先试试能不能找到一个通道能通到终点, 如果可以则封锁这个通道,一个石头即可, 再试试能不能找到另一个通道能到达终点, 如果可以则再用一个石头封锁这个通道. 整个题目抽象成能不能找出两个独立的通道(如果不能说明需要公用一个管道),从起点流到终点. 为了充分利用格子,最合理化找出通道,应该选择靠边的方法找格子. #include <stdio.h> #include <iost…
题意:https://codeforc.es/contest/1214/problem/D 给你一个n*m的图,每次可以往右或者往下走,问你使(1,1)不能到(n,m)最少要放多少 ‘ # ’ . 思路: 最多是2,不能到(n,m)是0,接下来就是判断1. 也就是判断有没有一个点所有路径必须经过. 第一遍dfs往下走优先,第二遍dfs往右走优先,判断两次走法有没有除了起点和终点其他相同的点,如果有就是有截断点. #define IOS ios_base::sync_with_stdio(0);…
题目链接:传送门 思路: 仔细观察可以发现,答案最多就是2,只要把(2,1)和(1,2)堵住就可以了. 答案是0的情况就是初始状态下,(1,1)就已经不可达(n,m)了,很好判断. 所以重点就是区分答案为1和答案为2的情况. 如果答案为1的话,就说明从(1,1)到(n,m)的所有路径都经过同一个点(这样的点至少一个). 实际上,求出(1,1)出发可达的所有点的集合S1,和所有可达(n,m)的点S2.这里用dp来跑可以O(nm).其中坐标要压成一维的(因为n.m的范围没有给出),否则不好开内存.…
本文只看粗体即可,太多catch语句.两个例子均来自libconfig包的example文件夹下面,. 例子一: #include <iostream> #include <iomanip> #include <cstdlib> #include <libconfig.h++> using namespace std; using namespace libconfig; // This example reads the configuration fil…