
思维题
思维
Legendout
退役ACM银牌loser
展开
-
B. Integral Array (思维 一点点数学)
Problem - B - Codeforces题意:给你一个数组,判断是否每两个数的向下取整相除的值也在数组中。 n原创 2022-06-30 22:22:16 · 216 阅读 · 0 评论 -
D. Guess The String(思维 二分)
Problem - D - Codeforces给你两种操作来还原一个原本未知的字符串,一种是询问l到r区间里有多少不同的字符,一种是询问第i个位置是什么字符。操作1次数小于6000次,操作2次数小于27次。首先第一个我们肯定要询问出来是什么。然后考虑从左到右求解第i个字符;我们用操作1来问出1到i和1到i-1的不同字符数。如果二者相同,就说明第i个在前面出现过;那么我们就可以二分j到i和j到i-1,用操作2,直到二者相同;如果询问出来(mid到i-mid到i-1)==0,说明在mid右边还有这个字符;如果原创 2022-06-30 18:19:54 · 308 阅读 · 0 评论 -
C. awoo‘s Favorite Problem(思维)
Problem - C - Codeforces我们发现a只能往右移,c只能往左移,且ac的不能互相换位置。b作为移动媒介其实是不影响答案的。那么我们可以把b去掉,看看剩下的二者是否相同;还有就是,相对于t串,s的a不能在后面,c不能在前面,不然也换不回来。//jiangly的代码太优美了qaq...原创 2022-06-30 12:13:38 · 287 阅读 · 0 评论 -
D. Tree Queries
Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round A - D - 知乎 Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round(A-E) - 知乎orz,orz原创 2022-06-29 22:31:27 · 190 阅读 · 0 评论 -
C. Zero Path
Problem - C - Codeforces额,感觉是很妙妙的题。首先n+m为偶数那么就不能结果为偶数,即0.而且结果要是能为0,那么所有路上到结果的肯定都是偶数。那么判断可能的最大值和最小值,假如最大值大于0且最小值小于0,那么就说明可能为0的。......原创 2022-06-29 22:00:55 · 279 阅读 · 0 评论 -
CodeCraft-22 and Codeforces Round #795 (Div. 2) D. Max GEQ Sum(单调栈+区间最值)
一眼就是比较经典的区间最大值,就是单调栈题。那么再考虑举反例:就是找出以这个数为最大值的区间内,区间和大于这个数。那么就转化为单调栈+区间最大值了。由于区间左右可伸缩,那么,我们找左半区间的时候,就可以固定查找右区间为,然后在区间内找最值,线段树维护的是后缀和;那么右半区间同理,前缀和找最值即可。最后在两半区间和找有没有大于0的,有即存在反例,无则满足条件。...原创 2022-06-21 23:46:36 · 174 阅读 · 0 评论 -
Codeforces Round #793 (Div. 2) D(构造)
/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define int long long#define ll long long#define db(x) cerr<<(#x)<<" "<<(x)<<" "<<endl;#define endl "\n"#define fast std::ios::sync_...原创 2022-05-30 23:18:21 · 200 阅读 · 0 评论 -
P2633 Count on a tree (树上主席树 LCA)
Count on a tree - 洛谷## 题目描述给定一棵 n个节点的树,每个点有一个权值。有 m个询问,每次给你 u,v,k,你需要回答 $u \text{ xor last和 v这两个节点间第 k小的点权。其中 last是上一个询问的答案,定义其初始为 0,即第一个询问的 u是明文。## 输入格式第一行两个整数 $n,m$。第二行有 $n$ 个整数,其中第 $i$ 个整数表示点 $i$ 的权值。后面 $n-1$ 行每行两个整数 $x,y$,表示点 $x$ 到...原创 2022-05-30 10:13:07 · 194 阅读 · 0 评论 -
CF1268B Domino for Young (黑白染色)
Problem - 1268B - Codeforces给出一个不规则的网格。共 nn 列,每列有 a_iai 个格子。现在要将 1 \times 21×2 的骨牌不重叠的覆盖在网格上,求最多能放的骨牌数量。网格满足条件 高度左到右递减。题解:比较经典的骨牌填棋盘问题。有神仙结论就是假如黑白间隔染色后,那么染出来的东西就一定可以用1*2的骨牌填满。那么考虑填上即可。假如都一样高,那么直接横着放就行了;如果有差,那么就竖着填上差的部分再横着放;/*keep o.原创 2022-05-28 22:35:36 · 182 阅读 · 0 评论 -
Div1 序列和 (差分)
(DP/差分)代码源每日一题 Div1 序列和 - 知乎ygg yyds。不难发现其实翻转也就是交换奇偶的目的。那么就有两种情况。如yggblog所述。那么做一个最大子段和即可。/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define int long long#define ll long long#define db(x) cerr<<.原创 2022-05-30 09:42:33 · 302 阅读 · 0 评论 -
树网的核加强版 (树的直径 尺取法 思维)
树网的核加强版 - 洛谷比较明显的就是求出直径,这样路径最远的即为端点,比较好求;那么我们求出直径后可以尺取直径,统计答案。最后还有一种情况:路径上的一个分支的偏心距大于答案,这是完全可能的。那么我们再对直径上的点dfs一次,再统计一次答案即可。/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define int long long#define ll lo原创 2022-05-26 13:11:15 · 131 阅读 · 0 评论 -
组合数问题
[NOIP2016 提高组] 组合数问题 - 洛谷被提高+爆杀哩(快哭了)。看这么大的数据范围,以为是结论题,但是我弱爆的数学功底根本不支持我猜出来。结果搞搞预处理就行了555.看到2e3的n,范围,发现是可以预处理出杨辉三角的。那么考虑预处理杨辉三角的同时用二维前缀和记录答案,到时候就可以查询了。查询问题都可以这么搞呀。/*keep on going and never give up*/#include<bits/stdc++.h>using names原创 2022-05-25 21:44:03 · 77 阅读 · 0 评论 -
P4588 [TJOI2018]数学计算 (思维 线段树)
[TJOI2018]数学计算 - 洛谷直接模拟,显然是不行的,精度肯定会出问题,连续搞两个1e9的数据就回不来了。考虑把时间作为坐标,那么乘以一个数和除一个数就是单点修改,求当前x就是区间查询,得解。/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define int long long#define ll long long#define db(x) cerr&原创 2022-05-17 20:37:07 · 186 阅读 · 0 评论 -
Binary String (思维 二分)
Problem - C - Codeforces写的时候一直想贪,但是找不到贪的方向。发现只要二分选多少个1,然后枚举一遍选的是那个连续的部分即可,可以水过。当时也是一直在想头和尾怎么搞。发现有单调性但是也没想到怎么二分,码力不够啊qaq。不会时你永远可以相信二分#include <bits/stdc++.h>using namespace std;int main(){ int t; cin >> t; for (int i = 0; i <原创 2022-05-15 01:00:14 · 390 阅读 · 0 评论 -
orz orz orz
Codeforces Round #789 (Div. 2) B(贪心) C(枚举) D(思维) E(置换环) - 知乎原创 2022-05-14 11:30:33 · 79 阅读 · 0 评论 -
Hemose on the Tree (构造)
Problem - E - Codeforces懒得证明答案一定大于等于n。那么考虑怎么构造。小于n的数和大于n的数唯一的差别就是二进制上n哪一位有没有1.设根节点为n,我们每次建边都把边权和点权设为x和n+x,这样保证每次异或路径值只会为n。此时在判断一下边权和点权的分布方式,谁为x谁为x+n即可。/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define int l原创 2022-05-14 11:31:12 · 134 阅读 · 0 评论 -
Very Suspicious (思维)
Problem - D - Codeforces画画图发现每次加一条边就会增加另外两种角度的边,那么最优解就是三个方向均摊n。#include<bits/stdc++.h>#define ll long long#define lowbit(i) ((-i)&(i))using namespace std;const ll inf=1e18;const ll mod=1e9+7;ll t,n,a[100005];ll cal(ll m){ ll x=m/3原创 2022-05-14 11:30:59 · 211 阅读 · 0 评论 -
Desktop Rearrangement(模拟)
Problem - F - Codeforces就模拟一下,原来有的就不记上,没有就加上,每次改一个地方,模拟更新一下就行了。col记录每列*的个数/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define int long long#define ll long long#define db(x) cerr<<(#x)<<" "<原创 2022-05-13 16:03:19 · 245 阅读 · 0 评论 -
Codeforces Global Round 20
Codeforces Global Round 20(F,H)_不是张胖胖的博客-优快云博客orz orz orz原创 2022-05-13 16:00:32 · 246 阅读 · 0 评论 -
Insert a Progression
Problem - D - Codeforces首先在原数组中的最大值和最小值之间插入不会增加贡献;那考虑最大值和最小值之外的数。也就时插入1和x。只有两种情况:插在头尾或中间。插在头尾的贡献就是头尾的最小值,插在中间增加的也只是最小值-1)*2插x同理。#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=2e5+7;int a[maxn];in原创 2022-05-13 15:42:17 · 107 阅读 · 0 评论 -
Dolce Vita (思维)
十多天没有发CF题解了.......把几天来有点意思的题发一下吧,感觉好多QwQProblem - C - Codeforces考虑枚举每个店铺的贡献。排序后把前几个店铺一起算,用表示第个店铺能买几次。求和即可。/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define int long long#define endl '\n'#define inf 1e15原创 2022-05-13 15:24:20 · 132 阅读 · 0 评论 -
CF1668E. Half Queen Cover (构造)
cf1668E. Half Queen Cover 思维_Strezia的博客-优快云博客orz orz原创 2022-05-13 14:56:02 · 112 阅读 · 0 评论 -
no crossing (区间dp 逆向思维)
no crossing - 题目 - Daimayuan Online Judge题意:给出一个有向图,找一条恰好经过 k 个点的最短路径,要求每次选的边不能跃过之前已经经过的节点。即对于路径中的边 x→y ,不存在以前经过的点 tt 使得三者的编号满足 min(x,y)≤t≤max(x,y)输入格式第一行三个数字 n,k,m接下来m行 , 每行 3 个整数 ai,bi,ci表示存在一条从 ai→bi , 长度为ci 的有向边。解题思路:题目的意思即为,在路径上,找这样的走法:原创 2022-05-13 14:24:40 · 365 阅读 · 0 评论 -
1672D. Cyclic Rotation (思维)
逆向思维:找b后面相等的,存下来,如果不匹配看看有没有对应存着的即可。tql orz/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define int long long#define endl '\n'#define inf 1e15#define fast std::ios::sync_with_stdio(false);cin.tie(0);cout..原创 2022-05-02 12:26:56 · 305 阅读 · 0 评论 -
P1052 [NOIP2005 提高组] 过河 (dp)
[NOIP2005 提高组] 过河 - 洛谷题目描述在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,\cdots,L0,1,⋯,L(其中LL是桥的长度)。坐标为00的点表示桥的起点,坐标为LL的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是SS到TT之间的任意正整数(包括S,TS,T)。...原创 2022-05-01 22:41:22 · 598 阅读 · 0 评论 -
CF1659D Reverse Sort Sum(思维)
不会啊。给个佬的链接。思路链接:CF1659D. Reverse Sort Sum*_Strezia的博客-优快云博客原创 2022-04-25 21:05:08 · 574 阅读 · 0 评论 -
Where are you(最小生成树 图论)
链接:登录—专业IT笔试面试备考平台_牛客网题目描述小p和他的朋友约定好去游乐场游玩,但是他们到了游乐场后却互相找不到对方了。游乐场可以看做是一张n个点,m条道路的图,每条道路有边权wi,表示第一次经过该道路时的花费(第二次及以后经过时花费为0)。现在,小p要去找他的朋友,但他的朋友行踪很诡异,小p总是要遍历完这n个点才能找到他,同时小p希望总花费最小。找到朋友的方案可能不唯一(具体看样例解释),小p想知道在这所有的方案中,有多少条边在每个方案中都会被经过。输入描述:第一行两个整.原创 2022-04-24 22:44:58 · 315 阅读 · 0 评论 -
最短路 (dij 二进制)
链接:登录—专业IT笔试面试备考平台_牛客网题目描述给定长度为 n 的数列 a,如果 ai&aj≠0a_i \& a_j\neq 0ai&aj=0(按位与),则在 i,j 之间存在一条长度为 ai+aja_i+a_jai+aj 的边,求 1 至所有点的最短路。输入描述:第一行一个正整数 n。接下来一行 n 个整数 a1∼ana_1\sim a_na1∼an。输出描述:输出一行 n 个整数,第 i 个为 1 到 i 的最短路长度。不能.原创 2022-04-24 21:45:49 · 385 阅读 · 0 评论 -
Optimal Coin Change(完全背包 路径记录)
路径记录记一手。#include <bits/stdc++.h>int v, n, f[17], dp[10007], pre[10007], inf = 0x3f3f3f3f, ans[10007];int main() {// freopen("in.txt", "r", stdin); while (~scanf("%d%d", &v, &n)) { memset(dp, 0x3f, sizeof(dp)); mem原创 2022-04-21 13:15:31 · 124 阅读 · 0 评论 -
Infinite Set(dp)
一眼懂,orzD. Infinite Set 题解(思维+dp) - hunxuewangzi - 博客园 (cnblogs.com)原创 2022-04-20 22:39:58 · 124 阅读 · 0 评论 -
F. Teleporters (思维 二分套二分)
Educational Codeforces Round 126 (Rated for Div. 2) F. Teleporters 详解原创 2022-04-19 15:59:37 · 1333 阅读 · 0 评论 -
C. Tree Infection (思维 二分)
Problem - C - Codeforces题意:有一棵树,最开始都是健康的,每次可以感染任意一个节点和将已感染的节点的同父节点下一节点传染,问最小操作数。题解:一开始没啥思路,后来补题才想明白的QwQ首先将每个节点都去感染,不用传染,肯定是最劣解(有可能是唯一解)。每一个父节点下的直接子节点看作一个集合,那么问题就变成了一个数组,每次感染一个数,每次被感染的数-1,问什么时候sum为0。那么我们尽量考虑去多的传染。首先每次感染的同时是可以传染的。那么早感染的就可以传染更多值。为原创 2022-04-14 12:12:51 · 1035 阅读 · 0 评论 -
NC234866 缆车 (思维,图论,最近公共祖先)
传送门:登录—专业IT笔试面试备考平台_牛客网题目描述牛妹:“冬天到了,我们一起去坐缆车吧!”景区有 n个景点,入口在编号为 1 的景点的位置,景区内有 单向缆车,从编号为 1 的景点可以通过缆车到达任意一个其它的景点。具体来说所有景点中的道路形成了一个树状结构,树根则是编号为 1 的景点,每条树边都是从父亲指向儿子的单向边。景区改造开始了,景区现在的管理员牛牛规划出了 个结点用于改造,它将指定一个景点 作为去向这 个景点的中转景点(当然,中转景点本身也可能处在这待改造的 个...原创 2022-04-13 12:34:08 · 971 阅读 · 0 评论 -
牛牛的方格图 (二维差分)
牛牛:“你喜欢玩数独吗?”。牛牛有一个的方格图,每个格子都有自己的颜色,第 行第 列格子上的颜色记为 。对于任意两个不同位置的颜色相同的点,我们认为其覆盖了一个以它们为对角线上顶点的矩形中的所有点。现在牛牛想知道这张方格图中有多少个顶点尚未被覆盖。题解:根据你遍历的顺序差分一下就行了。#include<cstdio>#include<cstring>#include<algorithm>#include<utility>.原创 2022-04-13 10:41:55 · 285 阅读 · 0 评论 -
小牛再战(博弈论)
题目描述共有N堆石子,已知每堆中石子的数量,两个人轮流取石子,每次只能选择N堆石子中的一堆取一定数量的石子(最少取一个),取过子之后,还可以将该堆石子中剩余的石子随意选取几个放到其它的任意一堆或几堆上。等哪个人无法取子时就表示此人输掉了游戏。注意:一堆石子没有子之后,就不能再往此处放石子了。假设每次都是小牛先取石子,并且游戏双方都绝对聪明,现在给你石子的堆数、每堆石子的数量,请判断出小牛能否获胜。输入描述:可能有多组测试数据(测试数据组数不超过1000)每组测试数据的第一行是一个整数..原创 2022-04-01 19:43:58 · 690 阅读 · 5 评论 -
小牛vs小客(博弈论)
小牛和小客玩石子游戏,他们用n个石子围成一圈,小牛和小客分别从其中取石子,谁先取完谁胜,每次可以从一圈中取一个或者相邻两个,每次都是小牛先取,请输出胜利者的名字(小牛获胜输出XiaoNiu,小客获胜输出XiaoKe)(1 2 3 4 取走 2 13 不算相邻)输入描述:输入包括多组测试数据每组测试数据一个n(1≤n≤1e9)输出描述:每组用一行输出胜利者的名字(小牛获胜输出XiaoNiu,小客获胜输出XiaoKe)示例1输入23输出XiaoNiuXiao原创 2022-03-30 19:39:24 · 270 阅读 · 0 评论 -
Bracket Sequence Deletion Edu125C(思维 前缀)
链接:Problem - C - Codeforces题意:给你一个括号序列,问删掉回文前缀以及括号对需要的操作数和剩余长度。题解:另一天起来补题,刚开始看以为要栈模拟和回文串处理,想了半天马拉车,KMP和hash不会写,看了题解才发现只用处理前缀就好了,原来是题目没看懂啊(流汗黄豆)那么就很好做了。从前往后扫一遍,先考虑删括号对,’(‘ 出现时才会出现括号对,那么直接跳过中间一个,因为无论是什么都没影响,无非删括号还是回文的区别。’)‘先出现那么只有回文串的情况了,直接往后找第一个原创 2022-03-23 19:26:30 · 693 阅读 · 0 评论 -
牛客练习赛97 特别的玛格丽特 ( 排序 关于如何把数拿出来排序之后放回原来位置的做法)
链接:登录—专业IT笔试面试备考平台_牛客网题目描述special margaret.特别的玛格丽特。给定一个数组。每次可以交换数组中两个奇数或者两个偶数,可以交换无数次。问最后是否能把数组变成非降序数组?用数学语言来说,对于数组aaa,每次可以交换 aia_iai 和 aja_jaj ,当且仅当i≠ji≠ji=j 且 (ai−aj)mod2=0(a_i-a_j)\ mod\ 2=0(ai−aj)mod2=0。问经过一些操作后,最终是否能使得数组满足:对于...原创 2022-03-18 12:40:14 · 729 阅读 · 0 评论 -
P2922 [USACO08DEC]Secret Message G (字典树 trie)
[USACO08DEC]Secret Message G - 洛谷题意贝茜正在领导奶牛们逃跑.为了联络,奶牛们互相发送秘密信息.信息是二进制的,共有 MM(1 \le M \le 500001≤M≤50000)条,反间谍能力很强的约翰已经部分拦截了这些信息,知道了第 ii 条二进制信息的前 b_ibi(l \le b_i \le 10000l≤bi≤10000)位,他同时知道,奶牛使用 NN(1 \le N \le 500001≤N≤50000)条暗号.但是,他仅仅知道第 jj 条暗号的前原创 2022-03-17 21:18:23 · 430 阅读 · 0 评论 -
Neat trees(单调栈)
原题链接:登录—专业IT笔试面试备考平台_牛客网题意:给定一个长度为1e6的序列hi(1e6),求所有连续区间的最大值减最小值的和。解题思路:首先暴力枚举每一个区间必定是超时的。那么考虑每个点对于答案的贡献值,可以这样想,对于点h[i]作为最大值在多少个区间出现,作为最小值在多少个区间出现?这个点对于答案的贡献就是h[i]作为最大值出现的次数 - h[i]作为最小值出现的次数,对于每个点,求一下贡献累加即可。求每个点贡献的过程用单调栈来维护,拿求最大值的次数来举例。对于点i,找到左端原创 2022-03-17 12:41:43 · 876 阅读 · 0 评论