算法竞赛题解
文章平均质量分 67
分享一些自己的算法竞赛题解思路与源码。
FengLing255
这个作者很懒,什么都没留下…
展开
-
2020 icpc 昆明 B. Chessboard 有源汇有上下界最小费用可行流 强制满流
给一个n×m(n,m≤50)的二维网格,每个格子可以什么都不放,或者放一个黑色棋子,或者放一个白色棋子。对于每一个格子放黑色/白色棋子都会获得对应的代价。每行以及每列的黑棋个数-白棋个数都分别有各自的[l,r]的限制。求最小代价。原创 2022-11-01 16:16:54 · 431 阅读 · 0 评论 -
2021 ICPC Southeastern Europe Regional Contest I. Flood Fill 最大点权独立集
给定两个n×m大小的二维网格(n,m≤100),每个格子要么黑色要么白色。两个网格的差异定义为对应位置格子颜色不同的数量。你可以对第一个网格进行任意次操作,每次操作选择一个同色四连通块将其颜色反转(反转后该连通块会与周围同色连通块合并),使得两个网格差异最小。求最小的差异。原创 2022-11-01 13:37:35 · 262 阅读 · 0 评论 -
【板刷 educational round】Educational Codeforces Round 3 A - F
总结A. USB Flash Drives题意给你一些U盘,每个U盘能存储一定大小的数据,求存储一定大小的数据至少需要多少U盘。思路将U盘从大到小排序,贪心选就是最优的答案。复杂度 O(nlogn)O(n \log n)O(nlogn) 。代码#include <bits/stdc++.h>using namespace std; signed main() { ios::sync_with_stdio(false); cin.tie(0);原创 2022-04-30 04:14:01 · 471 阅读 · 0 评论 -
【板刷 educational round】Educational Codeforces Round 2 A - F
总结A - Extract Numbers题意给定长度为 10510 ^ 5105 的字符串,逗号和分号将其分为若干字串,判断每个字串是否为整数的形式。思路模拟,复杂度 O(n)O(n)O(n) 。代码import restr = input()lst = re.split('[,;]', str)ans1 = []ans2 = []for s in lst: if s.isdigit() and (s == '0' or s[0] != '0'): a原创 2022-04-28 03:19:52 · 422 阅读 · 0 评论 -
【板刷 educational round】Educational Codeforces Round 1 A - F
总结A - Tricky Sum题意给定正整数 n(n<=109)n (n<=10^9)n(n<=109),iii 从 111 到 nnn ,如果 iii 为二的整次幂,减去 iii ,否则加上 iii 。思路考虑从 111 加到 nnn ,可以使用等差数列求和公式,再减去其中所有 222 的整次幂的两倍。复杂度 O(T⋅logn)O(T \cdot logn)O(T⋅logn)。代码#include <bits/stdc++.h>using namespace原创 2022-04-24 15:40:32 · 715 阅读 · 5 评论 -
CodeForces Good Bye 2021: 2022 is NEAR D – Keep the Average High
题意给定 a1,a2,⋯ ,ana_1, a_2, \cdots, a_na1,a2,⋯,an 共 nnn 个数,以及一个整数 xxx 。要在数组中选择尽量多的数,使得原数组任意一个长度大于 1 的子数组满足以下条件之一至少有一个元素没有被选择al,al+1,⋯ ,ar≥x∗(r−l+1)a_l, a_{l+1}, \cdots , a_r \geq x * (r-l+1)al,al+1,⋯,ar≥x∗(r−l+1)思路观察条件 al,al+1,⋯ ,ar≥x∗(r−l+1)a_原创 2022-04-21 15:46:24 · 356 阅读 · 1 评论 -
2018 ICPC Asia Nakhon Pathom Regional Contest L – Largest Allowed Area
题意给定一个 r 行 c 列的 01 矩阵,求至多包含一个1的正方形子矩阵的最大边长。思路使用前缀和维护矩阵,可以在 O(1)O( 1 )O(1) 的时间计算任意子矩阵中 1 的个数。枚举所有的点,对于点 (i,j)( i , j )(i,j),二分所有以该点为左上角的正方形子矩阵的边长,找到满足条件的最大正方形的边长。总体复杂度为 O(T∗n2logn)O( T * n^2logn )O(T∗n2logn),本道题目卡常,需要用到快读等算法,并对绝对时间进行极致的优化。代码#include原创 2022-04-21 15:42:16 · 118 阅读 · 0 评论 -
简单BFS 紫书 UVA 1600 巡逻机器人(Patrol Robot)
题目链接: https://vjudge.net/problem/UVA-1600思路开了一个二维数组buf记录图的信息。Node中额外开了一片内存用来储存穿墙信息。这道题一定要注意将点标记为visited的位置。第一次提交将语句写在了下方代码现在注释掉的位置,这样是不对的,例如下面这组数据112 2020 1 1 1 0 1 1 0 0 1 1 1 0 1 1 0 0 1 1 10 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 10 1 1 1 0 1 1原创 2021-03-28 21:37:13 · 165 阅读 · 0 评论 -
紫书刷题 UVA 712 S树(S-Trees)
题目: https://vjudge.net/problem/UVA-712思路我想用题目中给出的第二组输入为例。3x3 x1 x2000100114000010111110000可以看做二进制数000,可以转化为十进制的0,00010011中的第0位就是答案0010可以看做二进制数001,可以转化为十进制的1,00010011中的第1位就是答案0111可以看做二进制数111,可以转化为十进制的7,00010011中的第7位就是答案1110可以看做二进制数011,可以转化为十进原创 2021-03-22 22:25:51 · 189 阅读 · 0 评论 -
紫书刷题 UVA 673 平衡的括号(Parentheses Balance)
题目:https://vjudge.net/problem/UVA-673思路和简单的一道栈的题,但我还是WA了两次。遍历字符串。遇到空格时continue。遇到(或[时,把字符压入栈中。遇到)或]时,判断栈顶是否相吻合,若吻合就pop出去,若不吻合,直接false。当然判断栈顶前要检查一下栈是否为空,若为空也要false掉。遇到垃圾字符要false掉。遍历结束后判断一下栈是否为空,若不为空,也是false的。代码:#include <cstdio>#include &原创 2021-03-22 20:50:20 · 234 阅读 · 0 评论 -
紫书刷题 UVA1572 自组合(Self-Assembly)
UVA1572一道有向图的简单题。难的是有向图模型的提取。题目原文核心思路就是,将正方形的每一个边看做结点,每一个正方形看成通路(边)。输入样例:3A+00A+A+ 00B+D+A- B-C+00C+1K+K-Q+Q输出样例:boundedunbounded注意事项:注意一下下面代码中solve函数和dfs函数中的逻辑关系就行,没有什么特别的。代码:#include <cstdio>#include <cstring>int g[52][52];原创 2021-03-18 21:22:26 · 243 阅读 · 1 评论 -
紫书刷题 UVA12171 雕塑(Sculpture)
// UVa12171 Sculpture// Rujia Liu#include<cstdio>#include<cstring>#include<queue>#include<algorithm>using namespace std;const int maxn = 50 + 5;const int maxc = 1000 + 1;// original dataint n, x0[maxn], y0[maxn], z0[maxn原创 2021-03-15 22:46:43 · 347 阅读 · 1 评论 -
紫书刷题 UVA210 并行程序模拟(Concurrency Simulator)题解
前排提醒: 我就是个新手,水平一般.UVA210题目原文Programs executed concurrently on a uniprocessor system appear to be executed at the same time, but in reality the single CPU alternates between the programs, executing some number of instructions from each program before sw原创 2021-02-06 02:22:02 · 383 阅读 · 0 评论 -
紫书刷题 UVA1595 题解
前排提醒: 我就是个菜鸟,水平很低.UVA1595The figure shown on the left is left-right symmetric as it is possible to fold the sheet of paper along a vertical line, drawn as a dashed line, and to cut the figure into two identical halves. The figure on the right is not lef原创 2021-02-02 02:16:18 · 232 阅读 · 0 评论 -
PTA 重排链表 题解
前排提醒: 我就是个菜鸟,代码很差.L2-2 重排链表给定一个单链表 L1→L2→ … →Ln-1→Ln,请编写程序将链表重新排列为Ln→L1→Ln-1→L2→ … 。例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3。输入格式:每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N (≤105)。结点的地址是5位非负整数,NULL地址用−1表示。接下来有N行,每行格式为:Address Data Next其中Address是结点地址原创 2021-01-27 09:39:47 · 704 阅读 · 0 评论