思维
文章平均质量分 62
acm思维性题目
to cling
Everything negative - pressure, challenges - is all an opportunity for me to rise.
展开
-
J - Mex Tree (思维)
【代码】J - Mex Tree (思维)原创 2022-10-10 22:46:39 · 193 阅读 · 0 评论 -
C. Recover an RBS(括号序列,思维)
问是否只有一种合法方案,使得该序列可以翻译成正确的算数表示式。现在将其中的几个字符替换为。num表示当前未确定的问号数量。输入保证至少存在一种合法方案。从左到右遍历,具体细节看代码。cnt表示左括号的数量。......原创 2022-07-23 00:29:46 · 453 阅读 · 1 评论 -
C. Doremy‘s IQ(贪心)
首先考虑到前面执行测试会影响到后面的情况,所以就可以考虑反向思考。当然也可以正向思考,只不过正向思考比较麻烦。对于方案中的第一个使q减小的测试,其实可以将其调换到最后面的没有进行进行测试的一个位置。给出一个长度为n的序列a,按次序遍历。可以跳过某个测试,q不发生变化。不断执行上面的调换,直到该位置后面所有的都进行了测试。问最多可以执行几次测试,输入最优方案的01序列。前面的部分,只有不会使q减小的进行测试。为了让会使q变小的测试尽量排在后面,直到q等于输入中q的值。的大小,都进行测试。...原创 2022-07-20 23:23:54 · 499 阅读 · 0 评论 -
Mark and Lightbulbs(思维)
给出两个长度为n的01字符串s和t。问最小需要多少次该操作,才能把s变成t?这题挺考研观察力的。原创 2022-07-16 16:51:26 · 263 阅读 · 0 评论 -
E2. Escape The Maze (hard version) (思维 + 最短路)
有一个n个点的迷宫,迷宫有n-1条边,是一棵树。A在节点1,k个朋友在k个不同的节点。每秒所有人都可以移动到相邻的一个节点中,可以同时到达同一个节点。A和他的朋友可以在同一个节点或者在一条边的中点相遇。如果A在不遇到他的朋友的情况下,可以移动到任意一个叶子节点,A获胜,否则A的朋友们获胜。A到所有朋友的最小距离,那么A就获胜。反过来就是A的朋友们获胜。问如果A的朋友获胜,这k个人中最少几个人就可以抓A。A的朋友获胜,求解最小朋友数量。如果A到叶子节点的最小距离。...原创 2022-07-16 01:28:16 · 664 阅读 · 0 评论 -
F. Equate Multisets(贪心)
给出两个长度都为n的数组a和b。每次可以对b中任意一个数进行两个操作中的一个(1)乘二(2)向下取整除二。操作顺序不限制,次数不限制,问经过一些操作后,b能否与a相同。原创 2022-07-15 00:19:33 · 772 阅读 · 2 评论 -
G. Count the Trains(思维set + 二分)
Codeforces Round #797 (Div. 3)铁轨上有 n 节车厢,每节车厢在各自的引擎驱动下可以达到一个最高速度,记录在一个序列 {ai}\{a_i\}{ai} 里. 车厢从左到右的编号依次为 1 到 n.现在让这些车厢向左尽可能快地开动,要求靠右的车厢实际速度不能超过靠左的车厢. 这样便会形成若干段速度一致的连续数节车厢,称这样的一段为一节火车. 例如序列 a=[10,13,5,2,6] 对应的车厢的实际运行速度为 [10,10,5,2,2],形成了 3 节火车.在车厢行驶时,依次收到了原创 2022-07-12 19:06:45 · 253 阅读 · 0 评论 -
D. Rating Compression(思维 + 双指针)
Codeforces Global Round 12给出一个长度为n的数组a,其中 1≤a[i]≤n1 \leq a[i] \leq n1≤a[i]≤n。b[j]=minj≤i≤j+k−1 a[i]b[j] = min_{j \leq i \leq j + k - 1}~~~a[i]b[j]=minj≤i≤j+k−1 a[i]判断 k = 1 ~ n 时,得到的b数组是否是一个排列。本题与其说是思维,不如说是结论题。其实排列自身的一个特点。此类的算法需要多做题总结。时间复杂度 O(n)O(n原创 2022-07-11 17:25:25 · 213 阅读 · 0 评论 -
D - Points and Powers of Two(思维)
CodeForces - 988D题意给你n个不同的点的坐标(一维),找出最大的子集,子集满足,任意两点之间的距离为2k,k为非负整数。思路:结果只能有三种1,2,3。即子集最大为3(原因自己思考)。坑点:注意lower_bound搜索的边界,若搜索不到则返回右边界的下一位,所以要特判一下。#include<bits/stdc++.h>#include<cstdio>#include<queue>#include<cstdlib>#inc原创 2021-09-02 12:05:44 · 111 阅读 · 0 评论 -
C. Portal(二维前缀和 + 枚举的优化)
Codeforces Round #745 (Div. 2)题意给出一个n×mn \times mn×m的矩阵,找出一个经过最少次数的修改操作之后满足以下条件的子矩阵a×ba \times ba×b。输出最小的操作次数。a ≥5,b≥4\ge 5, b \ge 4≥5,b≥4四个边界要求全部是1,四个角除外(四个角可以是1,也可以是0)中间部分要求全部都是0\quad每次操作可以将一个0变成1,也可以将一个1变成0思路\qquadWe can enumerate the two c原创 2021-10-02 15:36:15 · 389 阅读 · 0 评论 -
B. Hamming Distance Sum(思维)
传送门题意:定义两个串的哈夫曼距离距离为 现在给定两个01串a,b(|a| <= |b|),求出a串与b的所有子串(连续的子串)的哈夫曼距离之和。思路:设a和b的长度分别n和m。直接暴力的话是O(n2)算法,肯定不行。所以需要降低复杂度。可以分别考虑a串中每个字符对于答案的贡献度。提到这里顺便提一下是利用前缀和思想。若还想不明白,就再提示一下。设a中第i个字母的下标为i(从1开始),则第i个字符的贡献度为a[i]分别与b中第i个字符到第n - m + i个字符的差求和。具体看代码。#in原创 2021-09-09 22:07:11 · 160 阅读 · 0 评论 -
B - Integers Shop(贪心 + 思维)
Hello 2022(codeforces)题意给出n条线段的左右端点的坐标[l,r][l,r][l,r],以及对应的价格c。 购买这n条线段后,会获得最少覆盖一次的点对应的数字,以及位于这些线段中间但未覆盖的这些数字。有一些原因 ,商店只出售前s(1≤s≤n)s(1 \leq s \leq n)s(1≤s≤n)条线段。你需要从前s段中选出若干条线段,使得获得的数字尽可能地多,同时尽量使总价格最小。思路记录三条线段:x1:左端点最小且价值最小的线段x_1: 左端点最小且价值最小的线段x1:左端点原创 2022-01-04 10:02:25 · 623 阅读 · 0 评论 -
D. Not Adding(思维)
Codeforces Round #766 (Div. 2)题意给出含有n个数的序列a。可以对序列a进行以下操作:每次选择任意两个数,若这两个数的gcd不在这个序列中,则将这两个数的gcd加入该序列中。问:最多可以进行多少次该操作。2≤n≤1061≤a[i]≤1062 \leq n \leq 10^6 \\ 1\leq a[i] \leq 10^62≤n≤1061≤a[i]≤106思路数论。由于数列中的数范围较小,可以枚举所有的数。对于任意一个数i,将该数列中是i的倍数的数取出;然后将这些数原创 2022-01-16 21:55:22 · 506 阅读 · 0 评论 -
Squares (AtCoder Regular Contest 125)(枚举+思维)
传送门题意给你一个正整数N,找出有多少个整数对(x,y),满足如下条件,答案对998244353取模1 <= N <= 10121<= x,y <=N.x*x-y是一个完全平方数.(此处0也是完全平方数)思路x2 - y = z2x2 - z2 = y(x - z)(x + z) = y设 l = x - z, r = x + z由题意知z >= 0,又由上式可知, 1 <= l <= sqrt(n),l <= r <=原创 2021-09-10 22:34:10 · 237 阅读 · 1 评论 -
E - Sorting Queries(模拟)
E - Sorting Queries题意:有Q个询问Each query is of one of the three kinds below:1 x : Append x to the end of A.2 : Print the element at the beginning of A. Then, delete that element. It is guaranteed that A will not empty when this query is given.3 : Sort原创 2021-09-05 15:32:30 · 179 阅读 · 0 评论 -
C. Maximum Subrectangle(前缀和+思维)
传送门题意现在有一个矩阵,找出其中最大的子矩阵,保证子矩阵的元素和小于等于x。但是,这里的矩阵时通过两个行向量相乘给出,并不是直接给出的。输出一个整数,代表最大子矩阵的尺寸,也是就长乘宽。(1<= n, m <= 2000)思路简单推算可知,一个子矩阵的元素和,就等于他的长和宽在两个行向量中对应的前缀和相乘。也即sum = (a[i]+a[i+1]+...+a[j])*(b[ii]+b[ii+1]+...+b[jj])然后n2枚举出在相同长度的边情况下,最小的前缀和。最后分别枚举原创 2021-09-16 09:54:26 · 204 阅读 · 0 评论 -
C. Alice and the Cake(思维/模拟)
Codeforces Round #778 (Div. 1 + Div. 2, based on Technocup 2022 Final Round)题目输入1413272869 5412985214736 98521473732 3 132 3 361 1 1 1 1 16100 100 100 100 100 1008100 100 100 100 100 100 100 10082 16 1 8 64 1 4 32101 2 4 7 1 1 1 1 7原创 2022-03-22 17:06:09 · 479 阅读 · 0 评论 -
C. Shinju and the Lost Permutation(思维+构造)
Codeforces Round #779 (Div. 2)ProblemInput61121 222 261 2 4 6 3 562 3 1 2 3 433 2 1OutputYESYESNONOYESNOSolution首先观察可以发现,当且仅当 c 数组中 1 出现的次数为 1时,才可能有解,否则一定无解We can rotate the array such that c1=1 (initial state) because we don原创 2022-03-28 13:45:47 · 770 阅读 · 0 评论 -
B. Not Sitting(思维)
Codeforces Round #766 (Div. 2)题意给出一个n × m 的矩阵,a可以在矩阵中随意标记k个格子。a可以在任何格子,b可以在任何不被标记的格子。a想离b尽量远,b想离a尽量近。问:在满足如上条件的情况下a,b之间的距离。距离:假设a在(x1,y1)(x_1, y_1)(x1,y1),b在(x2,y2)(x_2, y_2)(x2,y2)。距离d = ∣x1−x2∣+∣y1−y2∣|x_1 - x_2| + |y_1 - y_2|∣x1−x2∣+∣y1−y2∣。原创 2022-01-16 21:35:08 · 504 阅读 · 0 评论 -
E - Divisibility by 25(思维)
传送门大佬题意给你一个整数n(1≤n≤1018,不含前导零),你能够将任意两个相邻位置上的数互换位置,每交换一次算一步,每一次交换过后的数不能有前导零。现在要求以最少的步数使这个数变为25的倍数,输出这个步数。思路:看上面大佬链接我的理解:举例:n = 1153246目的明显,即将‘2’‘5’移到最右边。(第一次移动‘5’,第二次移动‘2’)观察发现,其实无论‘2’和‘5’谁在前谁在后,每次移动都是为了移动到‘6’后面的第一位。(也即计算‘2’和‘5’相对‘6’的位置,但注原创 2021-09-02 11:51:22 · 133 阅读 · 0 评论 -
D. Almost Arithmetic Progression(思维)
传送门题意:给你一个数组a,你被允许将每个元素加一、减一或者不变,问:把这个数组变成等差数列需要的最少的操作次数,如果无法操作就输入-1.题解:对于等差数列我们只需要确定第一项和公差。这个等差数列就被确定了,所以可以只考虑该数组前两项能组合出来的情况,一共9种。然后再遍历数组验证答案即可,复杂度:O(9*n)const int N = 2e5 + 10, M = 1e6 + 7;int a[N], b[N], c[N];int main(){ IOS; int n; cin >原创 2021-08-31 23:40:11 · 357 阅读 · 0 评论 -
E. Masha-forgetful(思维 + 算法实现)
Codeforces Round #764 (Div. 3)题意给出n个长度为m的字符串,然后给出一个长度为m的字符串 s ,将m分成若各干个长度不小于2的连续字段。问是否存在一种分法,使得这些连续字段在前面的n个字符串中均出现过。如果有多组解,输入任一;无解输出-1。思路任何长度大于3的字符串均可以分成长度为2和3的字段。把n个字符串中长度为2和3的子段位置以及这些子段所在字符串的下标存起来(map<string, tuple<int, int, int>>)。pre原创 2022-01-13 18:16:31 · 444 阅读 · 0 评论