
算法
黑猫黑猫猫
多庆幸有你在身边。
展开
-
Codeforces Round #738 (Div. 2)ABCD1
https://codeforc.es/contest/1559A. Mocha and Math题意: 给出长度为n的序列a, 可进行如下操作任意次:选择一个闭区间[l, r], 对于任意i在[0, r - l],可以将a[l + i]替换成a[l + r] & a[r - i],操作之后使得最大值最小,输出最小的最大值。思路: 众所周知与运算只会越与越小,而且满足交换律与结合律,所以求一下所有数的与就行了。#include <iostream>#include <cs原创 2021-08-18 13:52:45 · 144 阅读 · 0 评论 -
【洛谷官方题单】 【数据结构1-4】图的基本应用(上)
https://www.luogu.com.cn/training/116#problems原创 2021-05-23 21:11:44 · 229 阅读 · 0 评论 -
Codeforces Round #719 (Div. 3) ABCD
https://codeforces.com/contest/1520A. Do Not Be Distracted!题意:给出一个长度为n的字符串,问相同字母之间是否存在其他字母,有的话输出NO,没有输出YES。思路:无脑暴力模拟啦。#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;char a[66]原创 2021-05-15 17:04:17 · 211 阅读 · 2 评论 -
Educational Codeforces Round 66 (Rated for Div. 2) D. Array Splitting
https://codeforces.com/problemset/problem/1175/D题意:给出数组a和一个正整数k,将a划分成k个连续的非空子数组,每个子数组从左到右编号1到k,然后花费是每个数乘以其子数组编号的和,求最大花费。思路:很有意思的贪心 + 前缀和。假设第i次的分割位置为p[i],前缀和数组是sum[i]cost = 1 * s[p1] + 2 *(s[p2] - s[p1]) + 3 * (s[p3] - s[p2])+…+ k * s[pk];展开得:cost =原创 2021-05-10 20:59:12 · 134 阅读 · 0 评论 -
Educational Codeforces Round 70 (Rated for Div. 2) D. Print a 1337-string...
https://codeforces.com/problemset/problem/1202/D题意:给出n,构造一个长度不超过1e5的串,仅由1, 3, 7组成,使得其为1337的子序列数量恰好为n。思路:很妙,如果只是单独构造1或7的数量会超过1e5;如果只构造1和7那就会很麻烦;所以我们构造3,很容易知道如果构造出k个3,那么就可以存在k * (k - 1) / 2个1337,n最大为1e9,所以我们可以暴力枚举求出最接近且不超过n的k,剩下的用1来凑,然后答案就形如——133333…1111…3原创 2021-05-10 20:20:10 · 147 阅读 · 0 评论 -
Codeforces Round #716 (Div. 2) ABC
https://codeforces.com/contest/1514A. Perfectly Imperfect Array题意:给出n个数组成的序列a,问是否存在一个子序列,使得子序列的元素乘积不是完全平方数。思路:只要存在一个数不是完全平方数就可以。#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>原创 2021-05-08 19:38:57 · 175 阅读 · 0 评论 -
Codeforces Round #717 (Div. 2)
https://codeforces.com/contest/1516A. Tit for Tat题意:给出n个数组成的序列a,可进行至多k次操作,每次操作选择两个数,一个+1另一个-1(操作过程中保证所有数非负),使得a的字典序最小,输出a。思路:简单贪心,让最后一个数前面的数尽量小,多出来的全加到最后一个数上。#include <iostream>#include <cstdio>#include <cstring>#include <algori原创 2021-05-07 22:05:36 · 143 阅读 · 0 评论 -
【AcWing】1250. 格子游戏
题目链接思路:并查集简单应用,虽然是二维点阵但原理上是简单的并查集,要想清楚成环的条件:本次操作需要连接的两点已经在同一个集合中。#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 210, M = 24010;typedef struct{ int x, y;}P;原创 2021-04-28 09:04:13 · 285 阅读 · 0 评论 -
【AcWing】1252. 搭配购买
题目链接思路:并查集 + 01背包#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 1e4 + 10;int n, m, w;int p[maxn], c[maxn], d[maxn], dp[maxn];int find(int x){ if(p[x]原创 2021-04-27 14:47:03 · 128 阅读 · 0 评论 -
L3-021 神坛 (30 分)
题目链接思路:暴力枚举是O(n^3),会 t,于是换一种枚举方式:可以取每个点作为极点,然后将其他点进行极角排序,相邻两向量的叉积的一半就是一个三角形的面积,这样枚举可以不漏而且将复杂度降到O(n^2)这里因为输入的都是正整数,所以不需要用double读入(会被卡),最后乘以0.5的时候转成double就行_(:з」∠)_#include <iostream>#include <cstdio>#include <cstring>#include <cma原创 2021-04-22 16:18:14 · 252 阅读 · 0 评论 -
L2-023 图着色问题 (25 分)
https://pintia.cn/problem-sets/994805046380707840/problems/994805057298481152思路:简单bfs,但是要注意颜色数一定要等于k。#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;const原创 2021-04-21 21:34:16 · 82 阅读 · 0 评论 -
L2-031 深入虎穴 (25 分)
https://pintia.cn/problem-sets/994805046380707840/problems/1111914599412858888思路:bfs就行,但是不要被样例迷惑,入口需要判断(入度为0)。#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;const int N = 1e5 + 10;原创 2021-04-21 20:08:25 · 195 阅读 · 0 评论 -
L3-008 喊山 (30 分)
https://pintia.cn/problem-sets/994805046380707840/problems/994805050709229568思路:bfs#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;const int N = 1e4 + 10, M = 1e5 + 10;int n, m, k原创 2021-04-21 08:56:08 · 184 阅读 · 0 评论 -
【AcWing】1126. 最小花费
https://www.acwing.com/problem/content/1128/思路:输入的权值取反,可以转换为求乘积最大值,套一下spfa。#include <cstdio>#include <cstring>#include <queue>#include <algorithm>using namespace std;const int N = 2020, M = 2e5 + 10;const double eps = 1e-8;原创 2021-04-19 22:15:51 · 97 阅读 · 0 评论 -
【AcWing】1113. 红与黑
https://www.acwing.com/problem/content/1115/思路:简单dfs。#include <cstdio>#include <cstring>using namespace std;int n, m, ans;char a[23][23];int dx[4] = {0, 0, 1, -1}, dy[4] = {-1, 1, 0, 0};void dfs(int x, int y){ a[x][y] = '#';原创 2021-04-18 22:22:09 · 233 阅读 · 0 评论 -
【AcWing】1112. 迷宫
https://www.acwing.com/problem/content/1114/思路:简单dfs,别忘了特判起点和终点是否可达_(:з」∠)_#include <cstdio>#include <cstring>using namespace std;const int maxn = 111;int n;bool ans;char a[maxn][maxn];int dx[4] = {0, 0, 1, -1}, dy[4] = {1, -1, 0, 0}原创 2021-04-18 22:15:28 · 162 阅读 · 0 评论 -
【AcWing】1100. 抓住那头牛
https://www.acwing.com/problem/content/1102/思路:简单bfs。#include <cstdio>#include <cstring>#include <queue>#include <algorithm>using namespace std;const int maxn = 1e5;typedef struct{ int x, cnt;}P;int n, k;bool st[m原创 2021-04-15 20:48:14 · 125 阅读 · 0 评论 -
【AcWing】1127. 香甜的黄油
https://www.acwing.com/problem/content/1129/思路:Floyd会超时,稍微估算一下,单源最短路暴力跑一遍差不多1e7。#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;const int N = 810, M = 1510 * 2;int n, m;int h[N],原创 2021-04-15 20:14:28 · 129 阅读 · 0 评论 -
【AcWing】1128. 信使
https://www.acwing.com/problem/content/1130/思路:单源最短路,spfa就能过,但数组一定要开边数的二倍_(:з」∠)_#include <cstdio>#include <cstring>#include <queue>#include <algorithm>using namespace std;const int maxn = 666;int n, m;int h[maxn], e[maxn原创 2021-04-15 16:31:23 · 125 阅读 · 0 评论 -
【AcWing】90. 64位整数乘法
https://www.acwing.com/problem/content/92/思路:蓝皮书很靠前的内容,用快速幂的思想进行的快速乘。#include <iostream>using namespace std;typedef long long ll;int main(){ ll a, b, p; cin >> a >> b >> p; ll res = 0; while(b) {原创 2021-04-13 20:40:24 · 87 阅读 · 0 评论 -
【AcWing】188. 武士风度的牛
https://www.acwing.com/problem/content/190/思路:简单bfs。#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;const int maxn = 233;typedef struct{ int x, y;}P;int n, m;char a[maxn]原创 2021-04-13 20:35:10 · 136 阅读 · 0 评论 -
【AcWing】1106. 山峰和山谷
https://www.acwing.com/problem/content/description/1108/思路:在bfs的时候,将相同高度的加入队列,和不同高度的比较,用两个flag标记一下就可以了_(:з」∠)_#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;const int maxn = 1010;原创 2021-04-13 20:09:31 · 227 阅读 · 0 评论 -
【AcWing】1098. 城堡问题
https://www.acwing.com/problem/content/1100/思路:是bfs没错,但是向四周扩展非常玄妙——通过二进制位来确定哪个方向没有墙_(:з」∠)_注意:dx和dy千万不要写反,而且一定要和方向对上(我因为这个调试半天= =)#include <cstdio>#include <cstring>#include <queue>#include <algorithm>using namespace std;co原创 2021-04-13 14:47:20 · 122 阅读 · 0 评论 -
【AcWing】1097. 池塘计数
https://www.acwing.com/problem/content/1099/思路:简单bfs。#include <cstdio>#include <cstring>#include <queue>#include <algorithm>using namespace std;const int maxn = 1010;typedef struct{ int x, y;}P;int n, m;char a[max原创 2021-04-13 14:29:10 · 100 阅读 · 0 评论 -
【今日份摸鱼】2021.04.13
AcWing 197. 阶乘分解https://www.acwing.com/problem/content/199/思路:暴力会t!首先肯定是要先筛质数,之后我们会发现,所有小于n的质数p,因为每个p的倍数里都有一个p,那么每个倍数里都至少有一个p,所以先出现了n / p次;但是对于每一个p^2的倍数,我们少算了一个p,再加上n / (p2)次,再考虑p3的倍数,以此类推。#include <iostream>#include <algorithm>using names原创 2021-04-13 08:22:47 · 82 阅读 · 0 评论 -
【AcWing】1076. 迷宫问题
https://www.acwing.com/problem/content/1078/思路:当边权都相等时,可以用bfs寻找最短路。记录路径也很重要,因为第一次搜索到的一定是最短的,所以我们可以开一个二维数组记录每个点的前一个状态是什么,然后从终点搜索起点,这样从起点开始输出就是路径啦。#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using name原创 2021-04-12 07:28:53 · 206 阅读 · 0 评论 -
【今日份摸鱼】2021.04.09
AcWing 1192. 奖金https://www.acwing.com/problem/content/1194/思路:简单的拓扑排序,开个数组维护一下最小资金就好_(:з」∠)_#include <iostream>#include <cstring>#include <queue>#include <algorithm>using namespace std;typedef long long ll;const int maxn =原创 2021-04-09 22:37:58 · 106 阅读 · 0 评论 -
【牛客】送分啦-QAQ
送分啦-QAQ今天上来选了个思维题,结果,想了原创 2021-04-09 21:49:04 · 235 阅读 · 0 评论 -
【RMQ】区间最值问题
AcWing1273. 天才的记忆https://www.acwing.com/problem/content/1275/RMQ,区间最值问题(本质是dp),又叫ST表、跳表。核心思想:先倍增预处理,再查询。优点:代码很短缺点:不能修改(线段树万岁!)f[i, j]表示从i开始,长度是2^j的区间中最大值是多少。f[i, j] = max(f[i, j - 1], f[i + 2^(j - 1), j - 1]);ans = max(f[l, k], f[r - 2^k + 1, k])设原创 2021-04-08 22:30:18 · 119 阅读 · 0 评论 -
【ICPC Latin American Regional – 2019】Problem E – Eggfruit Cake
https://codeforces.com/gym/102428/problem/E题意给出仅由’P’和’E’组成的字符串(首尾相连),问长度不超过s且至少存在一个’E’的子串有多少个。思路因为只有两种情况:包含’E’或不包含’E’。可以先求出全部的情况再减去只含’P’的情况;然后看了题解,大佬们用的尺取法,绝了,原来还可以这样写。学到了,循环串二倍处理_(:з」∠)_#include <iostream>#include <cstdio>#include <c原创 2021-04-08 15:08:01 · 329 阅读 · 2 评论 -
【每日三题flag】2021.04.07
1290. 越狱https://www.acwing.com/problem/content/1292/思路:总方案数是m^n, 第一个房间有m种方案,接下来的房间只需要和前一个不同就好,即(m - 1)^(n - 1),快速幂。#include <iostream>using namespace std;typedef long long ll;const ll mod = 100003;ll n, m, ans;ll qmi(ll a, ll k){ ll re原创 2021-04-07 08:15:05 · 94 阅读 · 0 评论 -
【AcWing】反素数
https://www.acwing.com/problem/content/200/反素数:对于任何正整数x, 其约数个数记作g(x)。若某个正整数x满足:对于任意i, i < x, 都有g(x) > g(i), 则称x为反素数。给出N,在[1, N]中,若x为反素数,则必满足:①x的约数个数一定最多②x一定最小③x = 2^C1 * 3^C2 * … * 23^C9④C1 >= C2 >= … >= C9⑤Ci之和 <= 30x的质因子必连续,即x的约原创 2021-04-02 16:33:26 · 136 阅读 · 0 评论 -
【牛客练习赛79】训练补题(一半)
队内练习赛(重现的)https://ac.nowcoder.com/acm/contest/11169A.炼金术师思路:当前数字可覆盖它之前的小于它的数字,于是自然想到用栈,模拟一下就可以了,但是要注意处理相等的情况(我因为等号WA了一发)#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <stack>using n原创 2021-03-30 20:27:06 · 80 阅读 · 0 评论 -
2021天梯赛选拔随缘补题.jpg
和去年比起来稍微强了一点点,但还是很拉胯,还要继续努力呀P1892 [BOI2003]团伙https://www.luogu.com.cn/problem/P1892思路:当时想着并查集加邻接表,但是因为过于紧张瞎写的邻接表(?)然后理所当然地写残了,骗了一半分;然后查了题解,是并查集 + 反集,出现了知识盲区——什么是反集?好像也叫种类并查集,就是说,并查集数组开2倍,[1, n]代表朋友,[n + 1, 2 * n]代表敌人如果a和b是敌,合并a + n和b,b + n和a如果b和c是敌,原创 2021-03-26 09:05:35 · 122 阅读 · 0 评论 -
【每日三题flag】2021.03.15
因为太摸了又菜,所以只能先做点简单的= = Codeforces Global Round 13 A题:https://codeforces.com/contest/1491/problem/A很简单的签到模拟题,它说啥写啥就成,直接给代码了。#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const i原创 2021-03-15 20:59:26 · 237 阅读 · 0 评论 -
【数学2-2】组合数学与计数
组合数学的灵魂大概就是原公式和3条性质叭qwq(混乱发言)还有个二项式定理、Lucas定理和catalan数来着蓝皮书上有,此处不多加赘述。P2822 [NOIP2016 提高组] 组合数问题思路:因为数据范围较小,但是询问次数较多,所以可以先预处理出所有结果,再处理询问。这里比较神奇的转换就是,可以将k整除变成 % k == 0,在求组合数的时候直接mod k,然后处理答案的时候看是否为0即可。#include <iostream>#include <cstdio>#原创 2021-03-15 18:45:55 · 134 阅读 · 0 评论 -
洛谷【数学1】基础数学问题
因为实在太菜所以想系统刷一下题,好朋友说可以先学知识点然后刷专题…目标是刷穿洛谷——!!!总之,现在,从零开始叭。P1143 进制转换思路:先转为十进制,再转为目标进制。转十进制:先乘再模十转其他:先模再除#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n, m, x;char a[111]原创 2021-03-15 18:44:54 · 381 阅读 · 0 评论 -
【数学2-1】整数与除数
洛谷的专题qwqqqqq(乱序按心情做)希望在假期结束前刷穿洛谷的专题题单!!!P3811 【模板】乘法逆元思路:首先,乘法逆元的定义:若整数b, m互质,且 b | a ,则存在一个整数x,使得 a / b 与 a * x (mod m) 同余,则称x为b的乘法逆元。乘法逆元存在的充要条件是b与模数m互质。当模数m为质数时,b^(m - 2)就是b的乘法逆元(可以由费马小定理推出)所以就是一个水的快速幂。骗您的2333333快速幂会t的(别问怎么知道的所以说我们要用线性递推求逆元。设原创 2021-03-15 18:44:02 · 82 阅读 · 0 评论