摘要:因此,不要误以为此题没有回溯的过程,只有不断向下的过程。 对应到代码中,就是递归函数的入口点需要进行考虑。 if(ok){ //return solve(cur + 1); 这是不对的,这样将造成无法继续循环,即无法回溯。 if(!solve(cur + 1)) return 0; //返回是有条件
阅读全文
摘要:#include using namespace std; int main() { int n; bool first = true; while(cin >> n && n){ if(first){ first = false; }else printf("\n"); b...
阅读全文
摘要:#include using namespace std; typedef pairPair; int main() { int k; while(cin >> k){ int cnt = 0; vectorans; for(int y = k + 1; y <= 2*k; y++){ if(y*k % ...
阅读全文
摘要:#include using namespace std; typedef pairPair; int n; bool is_prime(int x) { for(int i = 2; i > n){ if(first){ first = false; }else cout << endl; ...
阅读全文
摘要:本题昨晚和一个大佬讨论了一下,有了一个初步的解决方案,但是今天下午实现的时候发现仍有bug。 完整的思路为: 1. d数组为反向dfs获得的新图的结构。即在新图中,u的下一个结点为v需满足,d[v] == d[u] - 1。 2. 新图为有向无环图。 3. 问题转化为:有一个DAG,边有权,给定起点
阅读全文
摘要:#include using namespace std; typedef pairPair; const int maxn = 100000 + 3; int n, m; vectorG[maxn]; int d[maxn]; bool vis[maxn]; void bfs1() { memset(vis, 0, sizeof(vis)); queueq; ...
阅读全文
摘要:一个坑:题目说的是以0 0结尾,但是while(cin >> n >> m && n && m) 无法AC,只能是while(cin >> n >> m && n)
阅读全文
摘要:有点难以置信,写得最久的一道题竟然一遍AC。 分析: 1. 这是给定起点、终点的图的最短路问题。并且并无特殊之处,首选BFS。 2. 唯一的特殊之处在于图中结点并非简单地由坐标构成,还有方向。因此,结点(或者说状态)为三元组:(r, c, direction); 3. 图主要有两种存储方式:邻接表和
阅读全文
摘要:输入:01矩阵,带有多个黑连通块。 输出:分别输出各个黑连通块内的白洞个数。 分析:突破点在于区分开洞内0和洞外0。 方案: 1.填充外围的0,全标记为数字2。 2.对每个黑连通块dfs,在dfs的过程中,如果碰到了0,则以其为出发点用dfs填充一次,全标记为2。遇到0的次数即为此黑连通块内的白洞个
阅读全文
摘要:要求:计算二维中连通块个数。 收获: 递归框架可以有两种类型: 1. 显式写明递归边界,即递归中的返回条件。 2. 限定进入递归的条件,而省掉返回条件。
阅读全文
摘要:题目不难,但有一个很大的意外的收获。 问题:当maxn定义为1024 + 10时,会run error,此时把s定义为全局变量时,AC。 结论: 这里1024 + 10本身定义小了,而由于其被定义为全局变量,恰巧对了。编译器下,即便越出了数组本身的界限,但没有非法访问,不会报错,没有任何问题。全局变
阅读全文
摘要:分析: 0. 统计每列的所有结点权值之和的一个惯性思维下的解决方案:从左至右依次找到每列所有结点,求其和。显然不现实。 正确的办法(貌似就是桶方法的思想):开辟一个sum数组,遍历一遍整棵树,在整条遍历路径中的走到的每个结点,都可以知道其所列号idx,直接sum[idx] += val。这样,遍历完
阅读全文
摘要:本题分两个步骤: 1. 给定一棵二叉树的中序和后序遍历,构造这棵树。 突破点:分析并发现两种遍历方式的一个重要特点:后序遍历结果的最后一个结点就是整棵树的根,在中序遍历结果中间某处找到它,它便再将整个树分为了左右两个部分,并且能在后序遍历结果中区分开,从而找到了一个模式。同一个模式的反复进行,即递归
阅读全文
摘要:题意:按照某种格式给定一棵二叉树的,层次遍历一下。 分析:二叉树、建树、层次遍历。 收获: 1. 如果EOF为输入结束标志 并且 每组数据需要多次读取,可以将一组数据的输入封装成一个函数,大致框架如下: 2. 此题一开始maxn = 256,作为输入缓冲区的大小,但256仅仅是L、R的最大个数,还包
阅读全文
摘要:说来惭愧,已经临近开学,昨天晚上才鼓起勇气决定开始刷题。 不抒情,直奔重点。 类型:结合队列、双端队列这类数据结构的模拟题。难度不大,但细节居多。 题意: 大体:输入为n个程序,每个程序若干种语句,每种语句时间给定。调度按照时间片方式。输出为[输出语句]中的输出内容。 额外:加入了锁机制。lock的
阅读全文