![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
思维题
文章平均质量分 58
练习思维
__Rain
这个作者很懒,什么都没留下…
展开
-
D.Say No to Palindromes(前缀和优化查询
D. Say No to Palindromes题意:定义一个字符串是好串,当且仅当 sss 不包含任何长度大于等于 222 的回文子串。给定一个长度为 nnn 的字符串(仅包含 a,b,ca,b,ca,b,c 三种字符)和 mmm 个询问,每次询问查询一个区间 [l,r][l,r][l,r],求将字符串 Sl...rS_{l...r}Sl...r 变成好串至少需要修改多少字符。思路:因为字符串的组成仅有 333 种字符模拟一下好串的特征,初始为 aaa,添加一个 bbb,下一个只能添加 cc原创 2022-03-11 21:36:40 · 444 阅读 · 0 评论 -
edu cf 123 C(思维 D(统计有效操作
C. Increase Subarray Sums题意:给定一个长度为 nnn 的序列 aaa 和 xxx定义 f(k)f(k)f(k) 表示给 kkk 个不同位置的 aia_iai 增加 xxx 后,序列的连续子串的最大值输出 n+1n+1n+1 行,第 iii 行输出 f(i)f(i)f(i)思路:数据范围满足 n2n^2n2 算法考虑先预处理出来长度为 iii 的子串的最大价值无论 kkk 为多少,f(k)f(k)f(k) 一定取自某个长度的子串,并且加上一定的修改值对于每个 k原创 2022-02-23 11:35:00 · 485 阅读 · 0 评论 -
Division (差分+贪心模拟
Division题意:给定一个正整数序列 aaa 以及 kkk,每次操作可以选择一个区间 [l,r](r−l+1>=k)[l,r](r-l+1>=k)[l,r](r−l+1>=k),然后把区间内的每个数除以 222 向下取整。问是否能通过一些操作使得所有数变为 111,如果可以,请输入操作次数最少的具体操作方案,如果有多种输出任意一种。思路:对于给定的每个数预处理一下可以操作的次数然后问题就变成了,每次可以选择一个合法的区间,对区间内所有数减 111,是否存在操作使得最后的数全部原创 2022-02-15 23:57:33 · 493 阅读 · 0 评论 -
B. Find The Array(构造题
B. AND Sequences题意:给定一个长度为 nnn 的序列,定义一个序列是好序列:a1&a2...&ai=ai+1&ai+2&...an(i∈[1,n]a_1\&a_2...\&a_i=a_{i+1}\&a_{i+2}\&...a_n (i\in[1,n]a1&a2...&ai=ai+1&ai+2&...an(i∈[1,n]思路:code:...原创 2022-02-06 13:49:53 · 281 阅读 · 0 评论 -
Codeforces Global Round 15 D(三进制枚举
D. Array Differentiation题意:给定一个序列 aaa,长度为 nnn,判断是否存在这样一个序列 bbb,满足 i,j,k∈[1,n]i,j,k\in[1,n]i,j,k∈[1,n],ai=bj−bka_i=b_j-b_kai=bj−bk思路:把 bib_ibi 看作点权,aia_iai 看作边权,因为图中有 nnn 个点,nnn 条边因此存在解时,当且仅当,存在一个环,从权值和为 000大概长这样数据非常小,n<=10n<=10n<=10原创 2022-02-05 08:06:14 · 278 阅读 · 0 评论 -
D(交互+位运算
D. Take a Guess题意:给定两种查询or i jor \ \ i \ \ jor i j 查询 ai∣aja_i|a_jai∣aj 的值and i jand \ \ i \ \ jand i j 查询 ai&aja_i\&a_jai&aj 的值思路:a+b=a∣b+a&原创 2022-02-04 16:19:50 · 160 阅读 · 0 评论 -
模拟题(贪心+思维
A. Meximum Arraycode:#include<bits/stdc++.h>#define endl '\n'#define ll long long#define ull unsigned long long#define ld long double#define all(x) x.begin(), x.end()#define eps 1e-6using namespace std;const int maxn = 2e6 + 9;const int mo原创 2022-01-29 23:27:02 · 443 阅读 · 0 评论 -
ABC 234 E(预处理+stl
E - Arithmetic Number题意:定义一种满意数:把这个数的每一位拆出来,可以形成公差为 d (0<=d<=9)d \ (0<=d<=9)d (0<=d<=9) 的等差数列给出一个数 nnn,找出不小于 nnn 的第一个满意数思路:暴力预处理所有的满意数插入 setsetset 或者 mapmapmap,二分查找即可code:#include<bits/stdc++.h>#define endl '\n'#d原创 2022-01-22 15:02:28 · 469 阅读 · 0 评论 -
ABC 231 E(记忆化搜索 F(树状数组处理二维偏序
E - Minimal payments题意:给定 nnn 种货币,a1=1,ai<ai+1a_1=1,a_i<a_{i+1}a1=1,ai<ai+1,并且保证了 ai+1 % ai=0a_{i+1} \ \% \ a_i = 0ai+1 % ai=0给出 XXX 元,要求给定支付的货币数量与找零货币数量之和最小思路:数据很小,考虑记忆化搜索,贪心的从大货币开始遍历假设当前是 xxx 元,枚举到了第 iii 个货币我们拿出原创 2022-01-21 12:55:29 · 452 阅读 · 0 评论 -
二维对角线差分
XCPCcode:#include<bits/stdc++.h>#define endl '\n'#define ll long long#define ull unsigned long long#define ld long double#define all(x) x.begin(), x.end()#define eps 1e-6using namespace std;const int maxn = 2e5 + 9;const int mod = 1e9 + 7;原创 2022-01-20 09:25:15 · 375 阅读 · 0 评论 -
CCPC 2019 哈尔滨 E(建图+拓扑dp计数+计算贡献 I(思维
E. Exchanging Gifts题意:给定 nnn 个序列,每行一个,有两种给出方式111 kkk a1,a2...aka_1,a_2...a_ka1,a2...ak, (ai<=n)(a_i<=n)(ai<=n) 表示第 iii 个序列有 kkk 个数222 xxx yyy (x,y<=i−1)(x,y<=i-1)(x,y<=i−1) 表示第 iii 个序列由第 xxx 个与 yyy 个按照 x,yx,yx,y 的顺序拼接而成求第 nnn 个序列原创 2022-01-19 20:35:00 · 288 阅读 · 0 评论 -
#762 (Div. 3) E. MEX and Increments(贪心构造
E. MEX and Increments题意:思路:贪心加模拟code:#include<bits/stdc++.h>#define endl '\n'#define ll long long#define ull unsigned long long#define ld long double#define all(x) x.begin(), x.end()#define eps 1e-6using namespace std;const int maxn = 2e原创 2021-12-21 13:16:02 · 591 阅读 · 0 评论 -
#760 (Div. 3) D(贪心 E(推式子
D. Array and Operations题意:给定一个长度为 nnn 的数组,mmm 次操作,每次选择两个不同位置的数删去,得分为 ⌊xy⌋\lfloor\frac{x}{y} \rfloor⌊yx⌋,求最小得分。思路:因为最后剩下的数要加入到分数,因此贪心的尽量剩下更小的,每次加分二者比值向下取整,肯定选出一个较小的与较大的,然后得分为 000,当选出两个相同的数时就会产生 111 的贡献code:#include<bits/stdc++.h>#define endl '原创 2021-12-15 14:38:27 · 350 阅读 · 0 评论 -
#757 (Div. 2) C(位运算+推式子 D1(最小化前缀gcd求和,dp
C. Divan and bitwise operations题意:给定一个长度为 nnn 的非负整数序列,mmm 个条件,每次给定区间 [l,r][l,r][l,r],以及这段区间所有数的或起来的值 xxx。求所有该序列所有子序列的异或和思路:题解题解中 CCC 讲的很好理解首先先明确长度为 nnn 的序列,子序列有多少个,对于每个数选或不选,显然有 2n2^n2n 个子序列,其中包括了空子序列把每一位分开考虑设第 iii 位有 kkk 个 111,则有 n−kn-kn−k 个 000一原创 2021-12-10 20:01:05 · 340 阅读 · 0 评论 -
#710 (Div. 3) F(找规律
F. Triangular Paths题意:初始给定一个数字三角形,无限大的大概长这样,一个节点有两种边,初始向下或者向右下,花费 111 可以更改为另一条给定 nnn 个点,坐标 (r,c)(r,c)(r,c) 表示第 rrr 行第 ccc 列求从 (1,1)(1,1)(1,1) 开始走,走完这 nnn 个点的最小花费思路:这些边都是向下指的,每次必然下降一层,因此访问这 nnn 个节点的顺序是一定的,就是按照他们的层数访问,所以最小代价即为相邻节点的路径的代价和然后分类讨论,找规律计算原创 2021-12-09 21:19:39 · 85 阅读 · 0 评论 -
#710 (Div. 3) D. Epic Transformation 优先队列模拟 || 思维+贪心
D. Epic Transformation//使用优先队列模拟操作#include <bits/stdc++.h>using namespace std;#define qc ios::sync_with_stdio(0)#define ll long long#define pb push_backll x;map<ll, ll>b;vector<ll>uni;int main() {// qc, cin.tie(0); int t; ci原创 2021-05-03 13:13:25 · 134 阅读 · 1 评论 -
#702 (Div. 3) G. Old Floppy Drive(思维+二分
G. Old Floppy Drive题意:给定一个循环数组和 xxx,从第一位开始累加,直到 sum>=xsum >= xsum>=x 为止,问需要累加多少次或者永远不能达到思路:先求一个数组和 sumsumsum 和最大前缀和 pre_maxpre\_maxpre_max如果满足 pre_max<x && sum<=0pre\_max<x \ \&\& \ sum <= 0pre_max<x&n原创 2021-12-08 13:36:21 · 393 阅读 · 0 评论 -
# 756 div3 E1 E2(dfs F(双指针
E1. Escape The Maze (easy version)题意:一个人从节点 111 开始出发,但是有 kkk 个阻碍,起点在 xix_ixi 节点,如果中途遇到阻碍则会输掉游戏,每秒只能移动到相邻的节点,也可以不移动。判断他能不能一定走到一个叶子节点,而不碰到阻碍。思路:显然他能胜利的条件就是存在一个叶子节点,111 到叶子节点的距离小于 kkk 个阻碍到叶子节点的距离ans[i]ans[i]ans[i] 数组表示阻碍到节点 iii 的最小距离dfsdfsdfs 暴搜两次即可先原创 2021-11-26 10:41:23 · 3105 阅读 · 0 评论 -
牛客-旅行商问题 (思维+记忆化搜索
旅行商问题题意:给定 nnn 个点,n−1n-1n−1 条边,求从 111 开始每个点都访问一次的最小路径长度,不需要回到起点思路:显然给定了一树,我们每次访问一个分支时,如果还有其他分支没有访问,就必须回退然后继续遍历,模拟几个例子就可以发现,我们可以贪心,找到一个主链最长的遍历路线,可以访问分支节点时就访问并回退,按这个顺序最后的遍历总路长最小。显然主链的只遍历了一遍code:#include<bits/stdc++.h>#define endl '\n'#define l原创 2021-11-17 15:59:16 · 282 阅读 · 0 评论 -
ABC 227 D(二分
D - Project Planning题意:给定 nnn 种小球,每种小球 AiA_iAi 个。要求每 mmm 个互不相同的小球可以在一起放到一个盒子里,求最多可以放多少个盒子。思路:先说说二分的正确性二分答案每次 checkcheckcheck 的肯定是盒子数量 midmidmid,因为每个盒子不能出现重复的小球,因此每种小球至多取 min(mid,Ai)min(mid,A_i)min(mid,Ai) 个,取完 nnn 种小球的总数量为 sumsumsum,而装成 midmidmid 个原创 2021-11-15 21:22:26 · 530 阅读 · 3 评论 -
牛客月赛40 (求子集gcd=x)
来点gcd题意:给定一个含有 nnn 个数的序列,mmm 次询问,每次查询给出一个整数 xxx,问是否能在序列中选出一些数,满足这些数的 gcd=xgcd=xgcd=x,如果只选出一个数,那么 gcdgcdgcd 就等于这个数。思路:首先要使选出的数的 gcd=xgcd=xgcd=x,那么这些数一定都是 xxx 的倍数。考虑到 n<=2000n<=2000n<=2000,可以预处理所有答案,对于要查询的答案 iii,枚举 iii 的倍数,如果这个倍数出现过就进行 gcdgcdgcd原创 2021-11-06 16:55:02 · 149 阅读 · 0 评论 -
ABC 225 E(排序
E - 7code:#include<bits/stdc++.h>#define endl '\n'#define ll long long#define ull unsigned long long#define ld long doubleusing namespace std;const int maxn = 1e5 + 9;const int mod = 1e9 + 7;ll n, m;struct Point{ int x, y; bool operator&原创 2021-10-31 20:53:21 · 130 阅读 · 0 评论 -
#748 div3 D2(同余
D1. All are Same题意:给一个数组,选择一个数 kkk,每次选一个数减 kkk,要求最后减完,所有的数都相等,求最大的 kkk。如果 kkk 可以任意选择,则输出 −1-1−1。思路:首先特判掉所有数都相等的情况,输出 −1-1−1然后他要求最后所有的数都相等,那么就相当于每个数都减了 pip_ipi 个 kkk,最后剩下 www即 ai=k∗pi+wa_i=k * p_i + wai=k∗pi+w,转化一下意思就是求所有数同余,最大的模数是多少求一下差分,扫一遍求原创 2021-10-14 16:04:39 · 86 阅读 · 0 评论 -
2021 RoboCom 世界机器人开发者大赛-本科组(初赛)
7-2 芬兰木棋 (25 分)被这题背刺了,最后才想明白wa点,想了一个小时,草了code:#include<bits/stdc++.h>#define endl '\n'#define ll long longusing namespace std;const int maxn = 1e5 + 9;const int mod = 1e9 + 7;const int inf = 0x3f3f3f3f;ll n, m;int x[maxn], y[maxn], p[maxn]原创 2021-10-11 20:08:14 · 1012 阅读 · 0 评论 -
ABC 221 D(不用桶的差分,求被覆盖了k次点的个数
D - Online games题解code:#include<bits/stdc++.h>#define ll long longusing namespace std;const int maxn = 2e5 + 9;int ans[maxn];void work(){ int n;cin >> n; int a, b; vector <pair<int,int> > v; int cnt = 0; for(int i = 1原创 2021-10-04 09:15:39 · 155 阅读 · 0 评论 -
ABC 218 C、D(思维 E(最小生成树 F(最短路
C - Shapes比较有意思的一道题存到vector一个一个匹配就行code:#include<bits/stdc++.h>#define ll long longusing namespace std;const int maxn = 2e2 + 9;const ll mod = 998244353;const ll inf = 0x3f3f3f3f;ll n, m, k;ll sum = 0;char s[maxn][maxn], t[maxn][maxn];ch原创 2021-09-12 15:23:28 · 258 阅读 · 0 评论 -
E 113 div2 C 组合数学(全排列中的比例
大佬题解C. Jury Meeting题意:nnn 个数,代表每个人可以发言次数,要求每个人发言不能连续发言,例如 1,21,21,2,1发言,2发言,然后还是2发言,这个情况就不行。然后求排列个数,满足这个条件。思路:首先可以想到最大值如果不止 111,那么直接输出 nnn的全排列就完了如果最大值和次大值差值大于 111,输出 000,无论如何都无法满足最后剩下最大值仅有一个,次大值至少一个的情况我们统计一下次大值的个数,然后一个条件是显然的:最大值右边至少有一个次大值,然后考虑插空法,设有原创 2021-09-09 14:11:43 · 130 阅读 · 0 评论 -
#742 div2 B 思维 C 思维 D 思维 (纯思维场
B. MEXor Mixup首先我们肯定要选 [0,a−1][0,a-1][0,a−1] 区间内的 aaa 个数,然后用 000 到 a−1a-1a−1 的异或和判断还需要添加几个数。设 000 到 a−1a-1a−1 异或和 为 xxx ,如果 xxx^b=ab=ab=a,但是我们不能选 aaa,所以可以再选两个数,这两个数异或为 aaa,其他情况只需要添加一个数即 xxx^bbb。注意:^ 运算符级别小 ==,所以我们要写成 (x(x(x^b)b)b),还有一点就是预处理异或和,否则会 tle。原创 2021-09-06 17:43:01 · 95 阅读 · 0 评论 -
前缀和、 差分
[NOIP2013-积木大赛#include<bits/stdc++.h>#define ll long longusing namespace std;const int maxn = 2e5 + 9;const ll mod = 1e9 + 7;ll n, m, k, Q;ll h[maxn];void work(){ cin >> n; for(int i = 1; i <= n; ++i) cin >> h[i]; ll ans =原创 2021-09-05 16:39:35 · 129 阅读 · 0 评论 -
ABC 217
E - Sorting Queries优先队列模拟#include<bits/stdc++.h>#define ll long longusing namespace std;const int maxn = 2e5 + 9;const int mod = 998244353;ll n, m, k, l, Q;ll a[maxn];priority_queue <int, vector<int>, greater<int> > q;void原创 2021-09-04 21:48:57 · 123 阅读 · 0 评论 -
ABC 216 补题 E(二分+大根堆模拟
D - Pair of Balls模拟#include<bits/stdc++.h>#define ll long long#define _ 0using namespace std;const int maxn = 2e5 + 9;ll n, m, x, y;struct node{ vector <int> v; int pos;}a[maxn];vector <int> id[maxn];queue <int> q;int原创 2021-08-31 19:43:40 · 206 阅读 · 0 评论 -
牛客月赛37 E ( 构造 I (二分 G ( 模拟
加减虽然想到二分了但是不会写check#include<bits/stdc++.h>#define ll long longusing namespace std;const int maxn = 1e5 + 9;ll a[maxn], sum[maxn];ll n, k, ans;inline ll check(int l, int r){ int mid = (l + r) / 2; ll x = a[mid] * (mid - l + 1) - a[mid] * (r原创 2021-08-28 00:05:22 · 314 阅读 · 2 评论 -
Deltix Round, Summer 2021 C(思维,计算贡献
C. Compressed Bracket Sequence不得不说师弟确实强,先贴一下他的代码#include<bits/stdc++.h>using namespace std;const int N = 1e3 + 10;int a[N];long long sum[N];int main(){ int n; scanf("%d",&n); for(int i = 1; i <= n; i++) scanf("%d",&a原创 2021-08-30 18:54:52 · 108 阅读 · 1 评论 -
2021ccpc 网络赛 补题 Time-division Multiplexing(二分) && Power Sum && Function
Power Sum-hdu-7105这个题要知道一个性质:(x+1)2(x+1)^2(x+1)2−-−(x+2)2(x+2)^2(x+2)2−-−(x+3)2(x+3)^2(x+3)2+++(x+4)2(x+4)^2(x+4)2===444用四个数为构造 nnn 贡献 444 的大小,然后 nnn modmodmod 444 =0,1,2,3=0,1,2,3=0,1,2,3,我们还可以发现 1=11=11=1,4−1=34-1=34−1=3,−1−4−9+16=2-1-4-9+16=2−1−4−9+1原创 2021-08-29 10:46:16 · 588 阅读 · 2 评论 -
#740 div2 B (思维,枚举
B. Charmed by the Game题意:两个人打球,谁先发球不确定。A发球并且胜利是 A Hold,输掉就是 B Break,B获胜B发球并且胜利是 B Hold,输掉就是 A Break,A获胜给你两人获胜的场次,Alice获胜 aaa 次,Bob获胜 bbb 次,求所有可能的发生 Break 的次数。#include <bits/stdc++.h>#define ll long longusing namespace std;void solve(){原创 2021-08-25 23:29:02 · 72 阅读 · 0 评论 -
#723 (Div. 2) B 规律 C1 反悔贪心
B. I Hate 1111 思路1:可以打表前5000个数 可以猜测1099是最后一个无法表示的数,那么前1100个直接暴力判断,后边的输出YES,可以发现ac了~思路2:分析每个全1的数111=11∗10+1,多出来了1,很麻烦,接着搞1111=11∗100+11,可以11111=11∗1000+11∗10+1,又多出来了1?那岂不是可以转化?于是转化为111 ∗ 100 + 11 111 * 100 + 11111∗100+11111111=11∗10000+11∗100+1111原创 2021-05-29 09:17:21 · 107 阅读 · 0 评论 -
#739 (Div. 3) E 字符串模拟
E. Polycarp and String Transformation题意:初始一个字符串 sss 和一个空串 ttt,每次操作把 sss 加到 ttt 后边,并且选择 sss 字任意一种字符,并删除全部的这种字符,直至 sss 串为空。给你一个操作完的串 ttt,求串 sss,不存在输出 −1-1−1。思路:从后往前扫一遍 ttt 串,每次新出现一种字符,就是倒数第几个被删除的,vector存一下然后 reverse一下就可以得到删除字符的顺序。设 cnticnt_icnti 为第 iii 个被原创 2021-08-22 16:32:38 · 64 阅读 · 0 评论 -
ABC#214 D 连通块+并查集 E 区间贪心+并查集
D - Sum of Maximum Weights 并查集#include<bits/stdc++.h>#define ll long longusing namespace std;const int maxn = 1e5 + 9;ll n, m;int f[maxn];struct node{ int x, y, z, sum;}e[maxn];bool cmp(node a, node b){ return a.z < b.z;}int find(in原创 2021-08-14 22:01:54 · 242 阅读 · 0 评论 -
# 681 div2 A 思维 B 思维 C 贪心 D 思维
A. Kids Seating满足所有数 gcd不为1,且无法相互整除选择数的范围是 111 ~ 4n4n4n,从 4n4n4n 开始倒着输出 nnn个偶数即可B. Saving the City题意:1代表雷,0代表空,花费a可以引爆连着的雷,也可以花费b埋下一颗地雷,求引爆所有的雷的最小花费对于全是0和只有一段1的情况特判即可1的段数大于1,那么对于两段1来说,要么分别#include<bits/stdc++.h>#define ll long longusing name原创 2021-08-14 11:59:30 · 95 阅读 · 0 评论 -
# 683 div2 A 思维 B 思维 C 贪心 D dp(LCS变形)
A. Add Candies题意:n个位置,第 iii 个位置的值是 iii,第 iii 次操作除了选择的位置以为外,每个位置都加 iii。求一个方案使得最终的所有位置数相等比较有意思的一道题考虑 nnn 的前 nnn 项和sumsumsum作为最终的相等值因为操作是第 iii 次选择一个位置,除了这个位置之外的数都加 iii1—>sum 不用加12—>sum 不用加2…发现通解就是 n次操作,从1到n依次输出即可B. Numbers Box题意:给你一个矩阵,每个位置有一个原创 2021-08-13 23:07:37 · 58 阅读 · 0 评论