思维
文章平均质量分 50
思维题
半碗无糖蓝莓冻
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #806 (Div. 4) G. Good Key, Bad Key(贪心)
贪心原创 2022-07-13 12:54:59 · 342 阅读 · 1 评论 -
Codeforces Round #782 (Div. 2) B. Bit Flipping(思维)
链接 B. Bit Flipping题意给出一个长度为 nnn 的 010101 串,进行 kkk 次操作,每次操作选定一位,该位不变,其他位 1−>0,0−>11->0,0->11−>0,0−>1,求 kkk 次操作后得到的最大 010101 串,并输出每一位的操作次数。思路这算复健的第一场cf,结果B卡了半天。=.=逆向思维,操作 kkk 次,就是每个位置都会被异或 kkk 次,每次选中其中一位,该位置少异或一次,从左往右考虑,尽可能多的位置为1。AC代码原创 2022-04-19 20:35:30 · 491 阅读 · 1 评论 -
LightOJ 1292 - Laser Shot(计算几何)
链接 Laser Shot题意给出n个点,问一条线最多经过几个点;思路刚开始想的直接暴力 n3n ^ 3n3 ,T了一页,后来优化了函数,卡过去了;看了别人的博客,发现可以用map记录斜率,把代码优化成 n2log(n)n^2log(n)n2log(n)的;AC代码n3n ^ 3n3#include <bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long原创 2021-09-14 22:27:18 · 136 阅读 · 0 评论 -
LightOj 1206 - Race Track(计算几何 + 点到线段最短距离)
链接 Race Track题意给出两个多边形,一个在内,一个在外,保证两个多边形没有任何相交,现在要在多边形内放一个圆,能自由穿行,求最大半径;思路在两个多边形内自由穿行,就是找内多边形的点到外多边形的边的最短距离的最小值,枚举即可;写题解的主要原因是对这个最短距离的求法有了较为清晰和美观的模板;double get_point_distance(PDD a, PDD b) { return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (原创 2021-09-14 20:48:53 · 138 阅读 · 0 评论 -
LightOj 1190 - Sleepwalking(计算几何 + 射线法判断点和多边形关系)
链接 Sleepwalking题意给出一个点和一个多边形,判断点是否在多边形内(点在多边形边上也算多边形内部);思路对于点来说,每次去遍历多边形的每条边:如果点在多边形上,直接输出在多边形内;如果射线和多边形的这条边平行,则跳过本次循环;对于射线经过多边形的点的情况,我们把经过的点假设在射线的上侧即可;剩下的就是普通情况,求是否相交即可;最后看穿越了几次多边形,如果是偶数则说明没在多边形内,否则就在多边形内;AC代码#include <bits/stdc++.h>#原创 2021-09-13 20:37:56 · 122 阅读 · 0 评论 -
2021东北省赛 J. Transform(计算几何 + 罗德里格斯旋转公式)
链接 J. Transform题意给出两个点求第二个点绕从原点到第一个点这条轴旋转 rrr 或 −r-r−r ,得到两个点,输出 zzz 坐标最大的那个点;思路刚开始想的旋转坐标轴,然后旋转点,再旋转回去,过于复杂了;这个题用 罗德里格斯旋转公式 可以直接秒v′⃗=v⃗+sinθ∗k⃗×v⃗+(1−cosθ)∗k⃗×(k⃗×v⃗)\vec{v'}=\vec{v} + sin\theta*\vec{k}\times\vec{v} + (1-cos\theta) * \vec{k} \times(\原创 2021-09-11 16:56:22 · 247 阅读 · 0 评论 -
Codeforces Round #740 (Div. 2) D2. Up the Strip(dp)
链接 D2. Up the Strip题意懒得写了,看我的D1博客吧D1思路更改一下dp方式,dp[i]dp[i]dp[i] 表示从 nnn 到 iii 有多少种方式,然后从后往前进行遍历更新 dpdpdp 数组;对于 iii,然后对于每个除数,例如 222 ,发现只有 2i,2i+12i,2i+12i,2i+1 才能通过除 222 得到 iii ,对于3…分析一波发现成块状分布,取那一段的和即可, 用后缀和维护即可;AC代码#include <iostream>#include原创 2021-09-10 23:34:13 · 139 阅读 · 0 评论 -
STDOJ pyf的树(树形dp)
题目思路首先我们需要两个数组:cntcntcnt 数组记录每一个节点的子节点个数dpdpdp 数组在第一个 dfsdfsdfs 中记录的是以 111 为根节点,每个节点对树价值的贡献;在第二个 dfsdfsdfs 中记录的是以 iii 为根节点整个树的价值;第一个 dfsdfsdfs 没什么可以说的,重点在第二个 dfsdfsdfs ,我们从 111 为根节点开始,用 dp[1]dp[1]dp[1] 去更新与 111 相连的子节点,一直递归下去…dp[j]=dp[j]−cnt[j]+dp[原创 2021-09-10 21:58:15 · 110 阅读 · 0 评论 -
STDOJ pyf的圆圈 & [HAOI2008] 下落的圆盘(计算几何)
链接luogu 下落的圆盘题目思路每个圆只会被它后面的圆盘覆盖,然后对于每个圆求一下覆盖的圆弧的角度,最后让 2∗π−angle2*\pi - angle2∗π−angle即可;对于角度的计算,我们只需要算出 ∠BAC\angle BAC∠BAC 和 ∠BAD\angle BAD∠BAD 即可,然后算出覆盖的圆弧的角度范围 l=∠BAD−∠BACl = \angle BAD - \angle BACl=∠BAD−∠BAC, r=∠BAD+∠BACr = \angle BAD + \angle B原创 2021-09-10 21:42:32 · 100 阅读 · 0 评论 -
STDOJ pyf会魔法(dp / 分层图 + 堆优化dijkstra最短路)
题目思路dpdpdp :dp[i][j]dp[i][j]dp[i][j]表示从 111 走到 iii 用了 jjj 次魔法的最小值;然后用堆优化的 dijkstradijkstradijkstra,每次取队头判断即可,具体的判断条件看代码;分层图:我们可以对其建立一个 (k+1)(k + 1)(k+1) 层的新图来进行求解,原图层代表使用了 000 次的魔法,其他的图分别表示使用了 111 次、222 次 ...k...k...k 次的魔法,然后就可以连边了(如图所示);AC代码dp#in原创 2021-09-09 23:10:25 · 181 阅读 · 0 评论 -
Educational Codeforces Round 113 (Rated for Div. 2) C. Jury Meeting(思维 + 数学)
链接 C. Jury Meeting题意给出一组序列,每个元素依次减一,如果没有一个元素连续两次或者以上次数减一就说明这个序列是好的,求这个序列满足条件的序列数量;思路首先对于这个序列所有情况为 n!n!n!;每个序列对于最大值进行三种情况的讨论:如果最大值个数大于 111 ,那这个序列就都是好的序列,直接输出 n!n!n!;如果序列中没有 max−1max-1max−1 这个数,那么直接输出 000,因为无论如何最大的数都会连续多次减一;如果最大值个数为 111,并且存在 max−1ma原创 2021-09-09 21:15:37 · 105 阅读 · 0 评论 -
Codeforces Round #742 (Div. 2) D. Expression Evaluation Error(思维 + 贪心)
链接 D. Expression Evaluation Error题意给出一个十进制数 sss,分成 nnn 个数,这 nnn 个数十进制和为 sss,要让 nnn个数十一进制和最大;思路尽量按照数字的每一位拆分,如1405,就拆成1000,400,5;如果这样不符合条件,我们再去拆低位,因为拆低位比拆高位的产生的影响更小;所以我们尽量去把我们拆的每一位整成 10x10^x10x ,同样是1405,如果拆成1000,400,5,不满足数量的话,我们还要把400拆成4个100,5拆成5个1,这样从最原创 2021-09-07 08:16:01 · 97 阅读 · 0 评论 -
Codeforces Round #741 (Div. 2) D. Two Hundred Twenty One (easy & hard version)(思维 + 前缀和)
链接 D2. Two Hundred Twenty One (hard version)题意给出以个只包含 +++ 和 −-− 的字符串,奇数位为 111,偶数位为 −1-1−1,+++ 为 111,−-− 为 −1-1−1,每一位的值 =(奇or偶)=(奇or偶)=(奇or偶)数位 ∗(+or−)* (+or-)∗(+or−);给出 qqq 个询问,问需要删除几个数才能保证区间内的所有值加起来为 000;easy−versioneasy-versioneasy−version:用前缀和处理,如果 s原创 2021-09-05 21:00:09 · 106 阅读 · 0 评论 -
STDOJ 仅仅是位运算 & 计蒜客-T3156 算术大师(位运算 + 思维)
链接 算术大师题目思路首先是与:都为 111 才是 111 ,所以只需要找到 lll 和 rrr 的二进制位最后相同的一位即可,后边的都是 000;或:只要有一个为 111,则为 111 ,同样找到二进制最后相同的一位,后边都是 111;异或:相同为 000,不同为 111;异或性质: x ^x = 0, 0 ^ x = x;所以可得 f(l,r)=lf(l,r) = lf(l,r)=l^(l+1)⋅⋅⋅⋅⋅⋅(l+1) ······(l+1)⋅⋅⋅⋅⋅⋅^rrr =f(0,l−1)原创 2021-08-23 23:32:04 · 141 阅读 · 0 评论 -
STDOJ 真简单题 & Codeforces Round #605 (Div. 3) E. Nearest Opposite Parity(反向建图 + 最短路)
链接 E. Nearest Opposite Parity题目思路正向建图,每个点跑一遍 bfsbfsbfs 会超时;反向建图,然后找到一次就可以满足题意的点作为起始点,然后由起始点继续拓展即可;AC代码#include <iostream>#include <cmath>#include <algorithm>#include <cstring>#include <map>#include <vector>#原创 2021-08-23 17:45:41 · 79 阅读 · 0 评论 -
STDOJ 与神明画押(容斥原理)
题目思路直接算不好算,所以先算所有的情况,然后减去不满足题意的情况即可;所有的情况:nnn 个人每个人 mmm 种选择,mnm^nmn;不满足题意的情况:先选定第一个人的颜色,然后后边的人每个人就只有 m−1m-1m−1 种选择,第一个人有 mmm 种选择,m∗mn−1m*m^{n-1}m∗mn−1;对于不满足题意的情况的解释:假设我们有三种颜色红黄蓝,对于 AAA 先确定一个颜色,假如 AAA 选择红,那么与他相邻的 BBB 就只有蓝和黄可以选择,假设 BBB 选择了蓝,那么与 BBB 相邻原创 2021-08-23 16:33:40 · 126 阅读 · 0 评论 -
STDOJ 假简单题(按位枚举)
题目思路其实在cf上做过类似的,比赛的时候没想······就是暴力,每个砝码三种状态,0不选,1左边,2右边;枚举每种法码的状态即可;AC代码#include <iostream>#include <cmath>#include <algorithm>#include <cstring>#include <map>#include <vector>#include <string>#include原创 2021-08-23 16:03:05 · 125 阅读 · 3 评论 -
Codeforces Round #638 (Div. 2) C. Phoenix and Distribution(思维)
链接 C. Phoenix and Distribution题意给出一个字符串,分成 kkk 个,求 kkk 个中字典序最大的最小值;思路开 vpvpvp 的时候思路是对的,没调出来,vpvpvp 刚结束就出来了,什么毛病(bushi就只需要看两步第一步先看最小的字符数量:如果小于k,那么直接输出倒数第二小的一个字符就可以;如果大于k,那么就看k后面的字符是不是都相等,如果都相等,均分,如果不相等直接全都加到一个上面去就可以;至于为什么这样做,在纸上写写就好;AC代码#include原创 2021-08-21 22:56:34 · 60 阅读 · 0 评论 -
AcWing第十一场周赛 3797. 最大化最短路(bfs + 思维)
链接 最大化最短路题意给出 nnn 个点 mmm 条边的无向图,指定 kkk 个点为特殊点,必须选择两个特殊点,在它们之间加一条边,求出从 111 到 nnn 最短路的最大值;思路先预处理出从1-各点的最短路,从n-各点的最短路;假设两个特殊点为 a,ba,ba,b,则从 111 到 nnn 最短路有三种情况:不经过 a,ba,ba,b,则对最短路无影响;经过 a→ba\rightarrow ba→b,则最短路为dist1[a](从1-a的最短路)+dist2[b](从b-n的最短路)+1;原创 2021-08-14 09:02:46 · 70 阅读 · 0 评论 -
Codeforces Round #618 (Div. 2) E. Water Balance(贪心)
链接 E. Water Balance题意给出一个数组,可以进行一种操作,将连续的子数组的所有数变成它们的平均值,可以进行无数次这样的操作,问能达到的最小字典序的数组是什么;思路首先知道,当前边一段的平均值大于后边的数时,把后边的数加进来肯定会使前边的平均值变小;所以进行贪心考虑,从第一个数开始考虑,后一个平均值的小于前一个平均值,合并,后一个平均值大于前一个平均值,单独成段,考虑这段能不能和后面合并成小的,再和前面的合并。AC代码#include <bits/stdc++.h>原创 2021-08-13 17:02:46 · 80 阅读 · 0 评论 -
Codeforces Round #618 (Div. 2) D. Aerodynamic(计算几何 + 思维)
链接 D. Aerodynamic题意给一个严格的凸包,然后让它的边始终在原点上,运动产生一个轮廓,问这个轮廓是否和原来的凸包相似。思路手画一下样例,自己再画几个图形,会发现只有中心对称图形是符合题意的;然后求出中心点,对于凸包的每一个顶点,去求对称的点是否存在即可;AC代码#include <bits/stdc++.h>#define mes memset#define mec memcpy#define x first#define y second#define原创 2021-08-13 16:41:56 · 65 阅读 · 0 评论 -
Codeforces Round #689 (Div. 2) C. Random Events(思维)
链接 C. Random Events题意给出一个长度为 nnn 的序列,给出 qqq 个操作(r,p)(r,p)(r,p),表示从 [1,r][1,r][1,r] 升序排列的概率是 ppp ,问最后序列升序排列的概率;思路首先从后往前遍历,确定 a[i]!=ia[i] != ia[i]!=i 的第一个位置 ididid,对于 ididid 左边的排序对答案没有贡献,而对ididid 右边排序,只要成功一次就可以,所以我们只需要算出排序不成功的总概率 ansansans,答案就是 1−ans1-an原创 2021-08-09 22:31:27 · 73 阅读 · 0 评论 -
Codeforces Round #685 (Div. 2) D. Circle Game(思维 + 博弈)
链接 D. Circle Game题意UtkarshUtkarshUtkarsh 和 AshishAshishAshish 玩游戏,初始点在 (0,0)(0,0)(0,0) 每次只能在横坐标或者纵坐标上加 kkk,之后的点和初始点的距离不能超过 ddd, 不能操作的人就输了,AshishAshishAshish 先手;思路上一个人怎么操作,下一个人就反着来即可,假如上一个人让横坐标加 kkk,则下一个人就让纵坐标加 kkk;算一下最后还能不能走一步,如果可以,则先手赢,不可以则后手赢;AC代码原创 2021-08-09 17:06:30 · 83 阅读 · 0 评论 -
POJ - 2826 An Easy Problem?!(计算几何 + 思维)
链接 An Easy Problem?!题意两个木板,问能接多少雨水;思路考虑多种情况:不相交一个木板与x轴平行长木板挡住接水第三种情况大概是这样的情况都考虑周全即可;AC代码#include <iostream>#include <cmath>#include <algorithm>#include <cstring>#include <map>#include <vector>using n原创 2021-08-05 21:31:10 · 104 阅读 · 0 评论 -
Codeforces Round #736 (Div. 2) F1. Gregor and the Odd Cows (Easy)(皮克定理)
链接 F1. Gregor and the Odd Cows (Easy)题意简单版本的题中的坐标都是偶数给出 nnn 个坐标点,其他坐标点都是????,三个坐标点是肯定可以构成一个三角形的,问构成的三角形里有奇数个????;思路首先很容易想到皮克定理,2S=2a+b−22S = 2a + b - 22S=2a+b−2,其中 SSS 是三角形坐标,aaa 是三角形内部的点,bbb 为三角形的边上的格点数;把式子转化一下 2S=b+2(a−1)2S = b + 2(a - 1)2S=b+2(a−1原创 2021-08-02 18:59:03 · 192 阅读 · 0 评论 -
2021牛客暑期多校训练营5 Boxes(思维)
题意有 nnn 个盒子,每个盒子里有白球或者黑球,每个的概率是 12\frac{1}{2}21,给出一个大小为 nnn 序列,a[i]a[i]a[i] 为打开一个盒子的代价,每次打开后都知道里面球的颜色,你可以支付 ccc 代价来知道有多少个黑球,求知道盒子里球是什么颜色的最小数学期望;思路首先不支付代价,那我们就需要把所有盒子都打开,即 sum(a)sum(a)sum(a);支付代价后就知道了黑球的数量,然后对 aaa 序列排序,从最小的开始开,当开到后缀数组都为同色的时候也就知道了所有盒子里球原创 2021-08-01 01:05:21 · 157 阅读 · 0 评论 -
2021牛客暑期多校训练营5 King of Range & 名作之壁 (单调队列 + 尺取法)
链接 名作之壁题意给出一个大小为 nnn 的序列,找出 max−min>kmax - min>kmax−min>k 的区间个数;思路尺取法:像尺子????一样取一段,通常是对数组取一对下标,即所选区间的左右端点,根据实际情况不断推进左右端点以得出答案。尺取法比暴力枚举区间效率快很多,是一种高效的枚举区间的方法,一般用于求取有一定限制的区间个数或最短的区间;名作之壁和 King of Range是一样的题只是数据范围不同;选择一个区间 lll,rrr,找到 maxmaxmax ,原创 2021-07-31 23:52:11 · 117 阅读 · 0 评论 -
AcWing第十场周赛 3789. 隐藏字符串(思维)
链接 隐藏字符串题意给定一个字符串 sss,如果 ttt 为 sss 的子串或者子串的各个下标在 sss 中构成等差数列就称 ttt 隐藏在 sss 中;求字符串 sss 中隐藏次数最多的字符串的次数;思路经过分析,只有两个字符或者一个字符构成的子串隐藏次数是最多的,而这两种都不用去考虑等差数列这个条件,所以题目就变得很简单,直接暴力即可;AC代码#include <bits/stdc++.h>#define mes memset#define mec memcpy#defi原创 2021-07-31 22:03:18 · 125 阅读 · 0 评论 -
Codeforces Round #735 (Div. 2) C. Mikasa(贪心 + 位运算)
链接 C. Mikasa题意给出一个 nnn,mmm 求 nnn ^ {0,1,2,⋅⋅⋅⋅⋅⋅,m}\left\{0,1,2,······,m\right \}{0,1,2,⋅⋅⋅⋅⋅⋅,m} 没有出现过的最小非负整数;思路首先,假设 kkk 为 nnn ^ {0,1,2,⋅⋅⋅⋅⋅⋅,m}\left\{0,1,2,······,m\right \}{0,1,2,⋅⋅⋅⋅⋅⋅,m} 没有出现过的最小非负整数,则 nnn ^ xxx === kkk,可知 x>mx > mx>m;原创 2021-07-30 19:37:43 · 109 阅读 · 0 评论 -
Codeforces Round #728 (Div. 2) C. Great Graphs(思维)
链接 C. Great Graphs题意给出大小为 n 的 a 序列,a[i]表示从 1 号点出发到 i 号点的最短距离;构造一个图,满足 a 序列,求总的边权和最小;思路首先可以想到答案小于等于0,我们只要构造 1 号点连向其余所有点边权为 a[i],再从所有点连回 1 号点边权为 -a[i],这样答案就为0了;想要缩小这个答案,就要减少正权边的数量,增加负权边的数量;本题的编号其实问题不大,我们对边权进行排序,连一条最大的正权边,然后其他点由这个点去扩展,同时在 i < j 的地方连原创 2021-07-29 10:31:04 · 173 阅读 · 1 评论 -
2021牛客暑期多校训练营4 Average(二分 + 前缀和)
题意给出大小为 n 的 a 序列,大小为 m 的 b 序列,构成一个矩阵,矩阵的元素 Wi,j = ai + bj,求矩阵大小至少为 x * y 的平均值;思路假设要求一个 u * v 的矩阵的平均值,根据题意可知矩阵平均值为(a1+a2+...+au)∗vu∗v+(b1+b2+...+bv)∗uu∗v\frac{(a_1 + a_2 + ...+ a_u) * v}{u*v} + \frac{(b_1 + b_2 +...+b_v) * u}{u * v}u∗v(a1+a2+...+au)∗原创 2021-07-27 11:51:56 · 124 阅读 · 0 评论 -
Codeforces Global Round 15 C. Maximize the Intersections(思维)
链接 C. Maximize the Intersections题意给出一个数 n,圆上顺时针的有编号为 1 - 2n 的点,初始状态下,给出 k 条弦,问连接剩下的点所得到的在圆内的交点数目,最大是多少;思路假设有 2n 个点,易知当连接 i 和 i + n 的时候剩下的边和这条边产生交点数最多,因为当连接 i 和 i + n 时,两侧的点数相同,可以产生最大的交点数;将剩余的点按上述的方法连接,两两分配,最后再求一下交点数;注意:是不用考虑初始状态下的的边的,因为初始状态下的每条边产生的交点原创 2021-07-27 11:08:17 · 228 阅读 · 0 评论 -
Codeforces Global Round 15 D. Array Differentiation(按位枚举 + 思维)
链接 D. Array Differentiation题意给出一个大小为 n 的 a 序列,问是否有一个 b 序列满足 a[i] = b[j] - b[k];思路因为 a[i] = b[j] - b[k] 且 a 序列和 b 序列的大小一样,先将 a 序列中的一个数用 b1 和 b2 去构造,然后剩余的数我们用新的 bi 和 b1 b2 中的一个数去构造,当 b 序列构造完 n 个后,发现 a 序列中还有一个数不知满足不满足题中的条件,所以可知如果满足条件,那么剩余的那个 a 序列的数是一可以由 b原创 2021-07-26 23:08:35 · 324 阅读 · 2 评论 -
2021牛客暑期多校训练营1 Knowledge Test about Match(乱搞QWQ + 思维)
题目给定两个长度为 n 的数组a={0,1,2,3,......n−2,n−1}a=\left \{ 0,1,2,3,......n - 2,n-1 \right \}a={0,1,2,3,......n−2,n−1}b={a0,a1,a2,a3,......an−2,an−1}b=\left\{a_0,a_1,a_2,a_3,......a_{n-2},a_{n-1}\right\}b={a0,a1,a2,a3,......an−2,an−1}任意调整 b 数组中元素的位置,求min∑原创 2021-07-25 20:25:40 · 91 阅读 · 0 评论 -
2021牛客暑期多校训练营1 Escape along Water Pipe(bfs + dfs)
题意给出一个 n * m 的水管图,要从(1,1)顶部走到(n,m)底部,每走一步之前,可以选择一个管道集合旋转相同的角度,要求在 20nm 步前走到终点或者输出无解;思路先 bfs 记录 st[i][j][k],然后 dfs 回搜路径,根据路径输出角度即可;特别说明一下st[i][j][k] = l,说明(i,j)由上一个点通过k走到,而上上个点通过l走到上一个点套娃(bushitmp[i][j] = x代表x管道从i进入 从j出来具体看代码(代码有注释QWQ)即可;AC代码#inc原创 2021-07-24 23:00:34 · 113 阅读 · 1 评论 -
2021牛客暑期多校训练营1 Game of Swapping Numbers(思维)
题意给出 n 大小的数组 A,B,可以选择交换 A 数组中的两个数,求 max ∑i=1n∣Ai−Bi∣\sum_{i = 1}^{n}\left | A_i - B_i \right |∑i=1n∣Ai−Bi∣;思路把∣Ai−Bi∣\left | A_i - B_i \right |∣Ai−Bi∣在数轴上表示就是 AI 和 Bi 的距离;n = 2 时,交换偶数次答案不变,交换奇数次和交换 1 次的情况相同;n > 2 时,确定如下情况交换 Ai 和 Aj会使结果更优会发现结原创 2021-07-22 22:23:50 · 74 阅读 · 2 评论 -
2021牛客暑期多校训练营2 Stack(思维)
题意已知若干时刻的栈大小,构造一个序列,依次加进栈中,如果栈顶的元素比加入的这个元素大,则弹出栈顶的元素再加入这个元素;思路统计每个时刻栈的大小的次数,然后进行前缀和处理,前缀和数组 ans 是单调递增的;b数组是非递减序列;当 i 时刻和 j 时刻栈的大小一样,则就是说 i 时刻到 j 时刻弹出了 j - i 个数,就可以让 i 时刻的a[i] = ans[b[i]],j 时刻的a[j] = ans[b[i]] - 1;(b[i] = b[j]);因为 ans 为递增,且 b 为非递减,所以原创 2021-07-21 21:55:46 · 86 阅读 · 0 评论 -
Codeforces Round #733 (Div. 1 + Div. 2) D. Secret Santa(思维 + 贪心)
链接 Secret Santa题意有n个人,编号从1 - n,第i个人想给第a[i]送礼物,给出n和a数列,保证每个人都可以收到礼物,求最大满意度(第i个人成功的将礼物送给了a[i],则满意度+1);思路满足第一个想给i送礼物的人,然后剩下的人随机送;最后再扫一遍,保证没有人自己给自己送礼物;当扫到自己给自己送礼物的人i,让i送给a[i](i原本就想送给a[i]),然后送给a[i]的那个人送给i即可;AC代码#include <iostream>#include <cst原创 2021-07-20 00:40:44 · 295 阅读 · 0 评论 -
Codeforces Round #731 (Div. 3) E. Air Conditioners (思维)
链接 Air Conditioners题意有n个格子排成一行,编号1到n,其中有一些格子中有“空调”和温度t,其他格子的温度由有空调的格子得到;假设有空调的格子为i,则第j个格子的温度为t + |i - j|;求出每个格子的最低温度;思路可以从题意中得出,每个格子的温度其实都是由相邻格子提供;左右各遍历一遍所有格子就是答案;至于为什么如此,可以想象一下,左遍历一遍可以得到有“空调”格子右边的格子的温度,最后一个“空调”右边的格子的温度应该是已经确定的最小的(可以手推一下),我们在进行左遍原创 2021-07-12 15:45:52 · 360 阅读 · 1 评论 -
Codeforces Round #732 (Div. 2) C. AquaMoon and Strange Sort (思维)
传送门题意:给出一个数列,只能交换相邻的两个数,得到一个非递减数列,保证每个数交换的次数必须是偶数,如果不是偶数则输出NO;思路:因为只能交换相邻的两个数且每个数的交换次数是偶数,所以可以得出排序前后,数的下标的奇偶性没变;Code:#include <iostream>#include <cstring>#include <cmath>#include <cstdio>#include <string>#include &l原创 2021-07-12 14:37:40 · 90 阅读 · 0 评论