10 2022 档案
摘要:E1. String Coloring (easy version) 观察样例我们发现要是最长下降子序列要是>=3 那我们显然不可能有解 然后我们考虑构造 要是最长最长下降子序列只是2的话 那显然我们只需要让在后面的比较小的值 也就是下降子序列的第二个位置变成1 其他位置都是0 即可 #includ
阅读全文
摘要:E. Count The Blocks 我们注意他不是一个数里面选出一个来这种很恶心的 这种计数不管该数里有啥其他的我们只需要构造一定有这一种的就可以了 我们设当前我们要的是长度为len都相同的数字 这个长度为len的段可以放置的位置有n-len+1个 我们分类讨论: 要是他放在头和尾 就是前面没有
阅读全文
摘要:B. Unmerge 看完样例发现 3 1 2 4 3后面跟着的1 2肯定是和3一组的 因为他们不如3大所以他们一定是被直接排出来的 就这样我们可以将这个序列分成好多组 然后就是金典背包 选与不选 注意的是他的n是2000 然后序列就是4000 所以我们数组要开成4000 #include <bit
阅读全文
摘要:A. Extreme Subtraction 我们知道一个性质就是要是能把一个序列全部变成0 当且仅当他们可以变成所有数都是一样的 我们观察操作考虑差分 性质就变成了 if(i>=2&&i<=n)a[i]=0; 我们两个操作就变成了: 1.a[1]-- a[i]++ 2.a[i]-- a[n+1]+
阅读全文
摘要:B. Catching Cheaters 对于我们做过的模板提来说 这道题是子串 那显然我们要改变一下我们的状态表示 dp[i][j]表示以ai,bj结尾的max 我们状态转移就是 dp[i][j]=max{dp[i-1][j-1]+2} [ai==bj] dp[i][j]=max{dp[i-1][
阅读全文
摘要:D. Playoff Tournament 观察完题 发现没改变一个 只会修改自己及以上的权值 所以我们直接暴力qlogn 但是这个题恶心的就是他那个是倒着给的 我们要reverse一遍 注意这时候因为反了一遍 左右子树也会反 #include <bits/stdc++.h> using names
阅读全文
摘要:F. Maximum White Subtree 观察题意 发现金典的就是一个全集的意思 显然我们考虑转化成一个图左边+右边这样情况 对于节点u 我们考虑其子树的贡献 显然该点v贡献要是为负数 我们直接不要 否则我们才要 然后我们钦定1为根节点 先自下而上统计每一个节点子树方向的最大贡献 然后我们再
阅读全文
摘要:E. Apollo versus Pan 我们提取公因式 将原始转化为 ∑j=1n ∑i=1n(xi&xj)⋅∑k=1n(xj|xk) 然后我们枚举j 我们考虑如何快速计算xj 与其他所有的| &的总和 显然我们可以按位考虑 对于| 要是我们该位xj为1我们其他所有就全都可以 为0就只能有其他所有该
阅读全文
摘要:E. Hanging Hearts 我们观察每一个节点 它可以由其子节点的所有长链来构造 还有就是直接可以由自己构成的一条长链 所以对于每一个节点我们的答案就是max(加上自己的最长链,所有儿子加起来的节点数) 所以我们维护一个加上自己的最长链ans1[] #include <bits/stdc++
阅读全文
摘要:F1. Korney Korneevich and XOR (easy version) 我们观察题意 发现我们需要找的是一个上升序列 我们回忆上升序列的状态设计 dp[i]表示第i个作为结尾最长的序列长度是多少 我们该题不需要记录长度只用记录那个数字是否存在 那我们稍微修改一个状态表示 dp[i]
阅读全文
摘要:D. Colored Rectangles 考虑数据范围 显然可以n3dp 我们发现dp转移时不是特别好枚举 所以我们选择记忆化搜索 打完 你们可能会发现过不去第三个样例 显然我们应该sort一遍 不然显然正解不在我们的dp范围内 而sort完之后可以感性理解一下 我们肯定要是最优解肯定是大的和大的
阅读全文
摘要:D. Maximum Distributed Tree 显然对于一条路径 我们一个全的简单路径 显然就是左边子树*右边子树 我们先将每一条边的次数算出来 然后分类讨论: 要是m>n-1 我们显然要将后面的合并起来 全交给一个次数最多的边 显然最优 要是对于m<n-1 我们因为要满足那三个原则 我们直
阅读全文
摘要:E. Polycarp and String Transformation 显然我们可以通过看谁消失的最早知道删除序列 然后有了删除序列以后 我们能干什么呢 显然对于每一个删除序列 我们要是第一次就把他删除了 那么那个字母就在原序列里只出现一倍 第二次把他删了 那么这第二个字母就出现了两倍 我们统计
阅读全文
摘要:D. New Year's Problem 显然二分 我们二分出一个最小值 然后装进一个桶里 然后要是这一列一个也没装显然不行 没有答案 还有一种没有答案的就是 大家装的都不一样 每个桶里只有1个 显然没有重叠 这个他要求的就是必然要有两个选择是重叠的 时间复杂度O(nlogV) #include
阅读全文
摘要:D. Rescue Nibel! 转化题意 就是叫我们求k条线段都有重合的方案数 最开始想的是离散化+线段树 手模拟一下样例这样会是有重复的 我们要如何保证不重不漏! 显然我们可以将线段排序 然后当前线段和前面线段相交有几条(我们一定要选这条)然后再组合数一下就可以了 然后我们因为相交我们只用che
阅读全文
摘要:A. Dreamoon Likes Coloring 显然我们不看把整块涂满 最优的构造 就是1 2 3 4.... 但是要考虑将整块板涂满 我们就要往右挪 显然我们每次挪后面的板子都会动 我们一定要让后面的板子都不能超过总长 我们用st表维护后面的板子最右端的最长即可 #include <bits
阅读全文
摘要:Zookeeper and The Infinite Zoo 显然我们应该用qlogn的复杂度 我们考虑位运算 当u>v的时候显然我们不可以过去 直接特判掉 因为我们的u->u+v 当且仅当u&v=v 意思就是v是u的子集 我们考虑如何check 是否合法 显然对于v的位数不能大于u的位数 因为我们
阅读全文
摘要:A. Going Home 观察ai<=2.5e6 显然我们两数之和最多5e6 我们开桶 让后怎么暴力让我发愁了 显然我们知道我们可能一个数被用了好多次 这样显然不行 可以想到就是把这个数对存下来 要是以后来的和这个都不重复才行 还有就是显然我们要是重复一个显然 另一个也是重合的 好的交上去....
阅读全文
摘要:C. Count Triangles 显然两边之和大于第三边 我们可以先预处理出来这个两边之和 我们暴力枚举x 然后区间赋值[x+b,x+c]+1 然后最后暴力枚举第三个边 然后将大于第三边的方案数加上就是了 #include <bits/stdc++.h> using namespace std;
阅读全文
摘要:F. The Treasure of The Segments 理解题意就是要让我们找一个线段+他相交的所有线段max 我们暴力枚举线段 然后用sum-不相交的 不相交的就好算了 只有两种情况 一个线段左端点>r 一个线段的右端点<l 我们每次二分查找即可 void solve() { int n;
阅读全文
摘要:D. Armchairs 我们发现性质 这前面的0显然是给第一个1匹配 而不会前面0的给第二个 后面的给第一个 显然不优 有了这个性质我们就可以通过0来做文章 要是这个位置是0 我们显然可以询问这个0是否要和当前乘客匹配 这像什么选与不选 显然dp 我们dp[i][j]表示前i个位置能满足j个乘客换
阅读全文
摘要:C. The Sports Festival 观察发现 我们显然选择一个数字开始后 我们拿周围的数字显然存在最优解(sort过) 这样就很金典了 n=2000 我们显然可以暴力区间dp 然后将转移只用从拿左边数字 和 右边数字O(1)转移即可 #include <bits/stdc++.h> usi
阅读全文
摘要:C. Chef Monocarp 我们不好发现任何性质 直接暴力 我们看到n=200可以想到是n3的dp 显然dp[i][j]表示前i个且第i个放在j位置的min 显然可以O(n)转移 这道题就做完了 #include <bits/stdc++.h> using namespace std; con
阅读全文
摘要:D. Cleaning the Phone 金典贪心吧 先sort从大到小 考虑1 2两种情况 显然要是我们当前now+最大的一个1 那我们就直接break了 继续我们知道了 我们现在+最大的一个1不够我们就考虑 最大的1和次大的1加起来是否大于最大的2 要是不大于 显然我们要选这个2因为体积显然我
阅读全文
摘要:C. Mikasa 显然我们应该用log或者O(1)的时间来回答一个ans 当n>m时显然 我们不能n^m==0 所以直接cout 0 (1)我们知道的是n^i=?那么显然 n^?=i (2)然后对于每一个n^i的值是不同的 意思就是我们可以 通过构造一个i 然后i^n>m 那么显然就很简单了 我们
阅读全文
摘要:A. Book 拓扑序我们一眼就能看出来 主要是如何求读书的遍数 我最开始想的就是 把拓扑序处理出来 类似于要几遍上升序列能把他全部覆盖 显然求一遍不上升子序列即可 但是 我们观察这个例子 显然 我们只需要一遍的 因为我们看书 是在线的 看完了这个我们直接就必须加进去了 所以我们考虑每次看书 要是d
阅读全文
摘要:F. ATM and Students 金典对于一个区间我们不能让他+的过程中出现负数 我们ST表处理前缀和区间最小数 然后再二分长度 暴力枚举左右端点 时间复杂度是O(nlogn) 哦 还要注意的是 我们二分一个数时 如果会有不合法的解 我们应该扩大一下左右边界 然后再加判断 #include <
阅读全文
摘要:C1. Sheikh (Easy version) 显然对于添加一个数进入区间 是只增不减的 这就提醒了我们此题具有单调性 我们最后的答案肯定就是这一整个区间 我们考虑怎么找到最小的答案相同的区间 因为我们知道这个区间具有单调性 我们就可以暴力枚举左端点 然后二分check答案是否相同 更新区间即可
阅读全文
摘要:[PA2014]Kuglarz 题目描述 魔术师的桌子上有 个杯子排成一行,编号为 ,其中某些杯子底下藏有一个小球,如果你准确地猜出是哪些杯子,你就可以获得奖品。 花费 元,魔术师就会告诉你杯子 底下藏有球的总数的奇偶性。 采取最优
阅读全文
摘要:D. The Number of Imposters 显然我们对于每一个关系就相当于连一个无向边 我们显然对于每一个连通块来讲 我们确定其中一个也就确定了这个连通块里的所有 就相当于二分图染色了 直接做即可 到时候我们看白色黑色谁多就加到答案里去 判断无解 也和二分图染色一样 #include <b
阅读全文
摘要:D. Counting Arrays 我们对于每一个找合法序列是多少显然很麻烦 我们直接找不合法的 显然对于i个位置上 他不能是前面lcm(1,2,3...i-1)的倍数才可以 显然我们这里面 lcm(只能有质因数构成)也就是最小的 不然可能会漏解 不然我们可以通过一直删第一个位置 让他又变成一个合
阅读全文
摘要:C. Game Master //不明白为什么tag上没有二分 我二分一下就过了 我们显然知道判断是否能打赢全部 直接通过连边 来判断是否能遍历全部点 如何连边:我们同组一定相连 对于排序过后的a直接相邻连一条就够了 b同理 然后我们可以对a排序 显然有单调性 之后二分即可 时间复杂度 O(nlog
阅读全文
摘要:C. Hidden Permutations 对于置换我们知道他是几个环 我们手动模拟之后发现 他的环的位置 和出现的数是一置的 只需要出现的顺序倒序 再往左移一即可 然后我们对于每一个位置询问多次 直到出现循环 最坏情况会每个位置询问2次 q=2n #include <bits/stdc++.h>
阅读全文
摘要:E1. Escape The Maze (easy version) 我们显然遍历根节点到叶结点的同时维护最短距离 然后在return的时候看该点距离是否大于最近的朋友的距离 要是大于的话 我们显然可以走过去 否则我们把这条路叉掉 最后看他能不能到达一个根节点即可 #include <bits/st
阅读全文
摘要:E. Singers' Tour 我们显然可以推式子 b[i] = a[i]+2a[i+1]+3a[i+1].... b[i+1]=na[i]+a[i+1]+2a[i+2].... 这样 b[i+1]-b[i]=-n*a[i]+(a[i]+a[i+1]+....+a[n]) 我们显然可以直接计算出整
阅读全文
摘要:E. MEX and Increments 我们一看数据n个数 还要计算n+1一个mex 显然不能暴力 我们考虑后面的i可以由前面的 贪心的做一次操作转移过来 所以我们记录一个a数组 放着多出来的数 要是后面需要的话 我们就拿最大的过来变 否则如果a数组为空 我们显然后面的数都无法到达 我们全部输出
阅读全文
摘要:D. Problem with Random Tests 显然对于一个本串 我们可以抹去前面的0 根本没用 其次我们为了位数最大化 让s1=本串 然后我们考虑如何将s1后面的0补齐 我们设第一位0位置是p0 显然我们的只能让p0前面的子串来补齐这个位置 因为我们子串长度为n-p0 我们每次左移一位就
阅读全文
摘要:B. Array Walk 考虑dp dp[i][j]表示前i步我们撤销了j次 状态转移: dp[i][j]=max{dp[i-1][j-1]+a[(i-1)-(j-1)2-1]} //我们撤销一位 dp[i][j]=max{dp[i-1][j]+a[(i-1)-j2+1]} //我们继续吃下一位
阅读全文
摘要:C. Building a Fence 显然我们知道1 n的值 我们可以从1推到n 显然我们可以只维护一个最低点就可以了保证合法性了 我们初始化l=h[1] r=h[1] 我们为了保证第三条 当前取值h[i] - h[i]+k-1 我们为了保证第二条 当前取值l-k+1 - r-k+1 最后我们取交
阅读全文
摘要:C. Longest Simple Cycle 显然针对ab相等的话 那我们就不能再往前走了 所以我们考虑分为几个层 我们考虑如何求出一个层的最长环 我们观察这个红色的环 显然我们正着做 反着做都是可以的 我们就正着做把 但是每次到一层 我们可以考虑两件事 第一就是继续往后走 我们就在现在环+c[i
阅读全文
摘要:C. Fence Painting 显然对于我们不同的就直接修改 但是我们应该贪心的叫更后面来的人来修改 这样前面的人怎么造都无所谓了 for(int i=1;i<=n;i++){ if(a[i]!=b[i]){ if(cnt[b[i]].size()){ auto t=cnt[b[i]].back
阅读全文
摘要:C. Planar Reflections 考虑dp dp[i][j]表示i能量的在第j层的cnt 显然我们会分裂成左右两部分 显然我们这里是要分方向的 但是可以把向左的部分 找到对称点之后 就相当于向右了 所以我们可以少维护一维 dp[i][j]=dp[i-1][n-j+2]+dp[i][j+1]
阅读全文
摘要:A. Balance the Bits 显然对于一个字符串s 我们每一对0之间必须是()一个合法的括号才行)(也可以 显然是等价的 因为你a拿前者 b就会拿后者 所以这就要求了我们0的个数必须是偶数 然后我们贪心的构造1即可 我们前面全填(后面填) 这样必然是最优的 然后最后再判断一下是否合法 #i
阅读全文
摘要:D. Min Cost String 显然我们对于每两个组 都要本质不同 我们考虑本质不同两个组的数量为k^2 我们考虑如何构造将这k^2的连接起来 不然显然如果一个借着一个显然会产生新的组别 我们需要的就是两个组之间都会由相交 这样不会才不会产生新组 意思就是我们由k^2个组 我们考虑如何构造将他
阅读全文
摘要:E. Permutation by Sum 显然轻松上下界判断 考虑如何构造 我们将它整成最小的样子 1 2 3 4 ....k个 从后往前要是他需要我们就直接加上去就可以了 #include <bits/stdc++.h> using namespace std; const int N = 2e
阅读全文
摘要:C. Add One 显然对于每一位单独分析 我们经过一次进位只能变成10 这样该怎么做呢 我们显然可以dp 设dp[i][j]表示i(0-9)经过j次变换有几位 显然我们初始化i+j<10就是1 else dp[i][j]=dp[1][i+j-10]+dp[0][i+j-10] 就是我们变成10需
阅读全文
摘要:C2. Potions (Hard Version) 我们正着做的同时 维护一个堆 让后要是寄了 我们从堆里拿出一个最大的数拿出去即可 这样既合法并且我们剩下的也是最小的 所以肯定是最优解 #include <bits/stdc++.h> using namespace std; const int
阅读全文
摘要:C. Parsa's Humongous Tree 显然可以证明我们的每一个节点肯定是会取到边界值才是最优解 比如 我们当前其他节点确定 我们中间节点v不确定 我们让av从lv开始 av++ 如果旁边节点的数大于av的较多 我们贡献减少 如果旁边节点的数大于av的较少我们的贡献增加 显然这是一个单峰
阅读全文
摘要:D. Secret Santa 答案就是每一个数字是否出现 很容易想到的就是我们只能满足一个人的要求(如果这一组人都选择同一个人 所以我们直接就这样乱搞就可以了 然后剩下的随便连一连就行了 但是是不对的 因为剩下的几个点 我们随便连 不管按照什么方式都有可能 变成自己连自己 我们如何解决这个冲突呢
阅读全文
摘要:E1.Erase and Extend (Easy Version) 首先我们来证一个东西就是 最优解一定由先删若干次 然后一直copy而来 而不会在中途再删一次 因为在中途再删一次就证明这个后缀不如前缀 那我们不如早开始 就直接删除这个后缀 这样的解肯定是更优的 证明完之后我们直接n2暴力即可 #
阅读全文
摘要:C. Strange Function 考虑反想我们将x确定看看有多少个i 对于f[i]=x 我们显然i%lcm(1,2,3,...x-1)!=0 这里就可以通过容斥直接求解 i%lcm(1,2,3,...x-1)是含有1,2,3,...x-1因子的一个全集 而i%lcm(1,2,3,...x-1,
阅读全文
摘要:D. Say No to Palindromes 很牛逼 我们手动模拟一下可以知道只有3个字母不构成回文串只有可能是这样的 abcabc.... acbacb.... ... 6种情况 所以直接暴力预处理即可 #include <bits/stdc++.h> using namespace std;
阅读全文
摘要:D2. Seating Arrangements (hard version) 题意 我们要先按照a来排序 然后再来安排d的位置 最开始都能想到的一点就是我们可以每一组内按照逆序排序 我们就可以让组内是0贡献 但是对于不同行来说 这样真的是最优解吗 我们知道要是跨越了两行的同一组数 肯定是前面一行在
阅读全文
摘要:C. Carrying Conundrum 这样子进位显然奇偶就独立了 我们分别对于奇偶计算方案数 然后乘法法则即可 比如我们现在奇数位num1 偶数位num2 我们的方案就是num1+1 偶数位就是num2+1 然后ans就是(num1+1)*(num2+1) 不过这里还需要-2(我们保证a b都
阅读全文
摘要:E. Gardener and Tree 显然我们对于每一个叶节点是度数为1的 我们如果删除外层叶节点的时候 显然也要改变与他与他连接的节点的度数 而只有可以能在这些节点里诞生新的叶节点 注意也可能不会诞生 所以对于每一次我们一层一层的去bfs就可以了 当然我们要特判n==1的情况 #include
阅读全文
摘要:B. Moderate Modular Mode 先列式子 n=k1x+b y=k2n+b 我们把第二个式子n单独提出来 (y-b)/k2=k1x+b y=k1k2x+(k2+1)b 因为题中给出x y都是偶数 显然我们可以构造k1=1 k2=1 这样n就是x y的平均数 但是不幸的是我们这个式子里
阅读全文
摘要:C. Keshi Is Throwing a Party 我们显然可以二分答案 我们的最优解情况就是从小到大的选择 要是a[i]>=x-cnt-1(还要减去自身)&&b[i]>=cnt我们就把他算进去 这样肯定是最优的 当然从大到小也可以 #include <bits/stdc++.h> using
阅读全文
摘要:A 01 Sequence 对于每一个长度为3d的字符串 显然我们可以通过d个不连续的1来消去全部 但是连续的1显然是有贡献的 手动模拟一下我们就知道是 然后对于每一次询问 显然他的首尾可能相连 所以我们以0作为划分 找到离l最近的0(右边 找到离r最近的0(左
阅读全文
摘要:D. X-Magic Pair 显然对于两个操作 可以一眼识别是辗转相减 可是我们怎么利用这个信息 我们可以发现 如果a>b; 我们将更小的b替换成|a-b|那么我们显然又转回来了 我们考虑每次将a替换成a-b 这里只有我们a-kb<b时 才会发生改变(就相当于辗转相除了) 我们考虑如何计算这一过程
阅读全文
摘要:C. Menorah 显然对于每个操作我们是保留一个1 所以我们当先是x个1的话 做一次就是n+1-x个1 并且我们只有这两种数量 这样我们就可以特判无解了 之后显然 对于每两个操作 我们可以交换一次01 这样就是不同组的数量 但是显然还有一种解就是我们翻转一次 让他当原串再计算不同组数量 因为我们
阅读全文
摘要:C. Set or Decrease 显然我们对于最优解 肯定是先减小一个数 然后再拿这个最小值更新其他值 但是这个最小值减少多少不是单调的 我们关注第二个操作 我们发现他最多就更新n次 而且每次肯定是贪心更新最大的 我们决定更新这个之后答案也可以O(1)计算出来 比如我们打算更新前i个位置 显然当
阅读全文
摘要:C. Balanced Stone Heaps 最小值最大 显然二分 考虑check 首先我们从前往后做的话 要考虑后面的消息 显然不可取 我们考虑从后往前做 但是这里要注意的只有一点就是 我们从后往前做 但是本来就是从前往后的 所以我们拿去前两堆的不能超过本来a[i]的 取个min就好 #incl
阅读全文
摘要:D. Maximum Product Strikes Back 显然我们是不喜欢0的 我们可以对0进行切割 分成若干段 然后我们要是是段数内乘积为负数 显然我们也是不喜欢的 我们必须要砍掉一个负数 才能让他变成整数 这里可以二分也可以直接遍历都是差不多的 然后我们如何算贡献呢 显然我们最低都是1 我
阅读全文
摘要:D. Insert a Progression 显然我们可以对a1——a2之间的数全部都插入期间 显然是没有贡献的 并且我们我们的1-x 只用维护最小1 和 最大x 即可 显然要是我们要是mn中没有1 我们要让1插进去 当插头尾的时候只有一边贡献 中间就会有左右两边贡献 这样我们处理了1 我们再判断
阅读全文
摘要:F. Vlad and Unfinished Business 和一般的求多个点都到达的最小距离不同 这里规定了终点 这样我们首先x-y这条链可以确定 当然我们这条链可以通过让path[y]等于1 因为树中两点距离确定所以链一定 我们直接通过return时就可以确定链 然后我们还要确定的就是这个子树
阅读全文
摘要:C. Sequence Pair Weight 我们发现不管是分组内计算 或者是暴力都是不可取的 我们思考反想 一对相同数能够有算进多少种方式 显然是i*(n-i+1)的组合数 显然要是有第三个相同的数也是可以和前两个的组合的 所以我们记录一个mp[a[i]]表示前面a[i]存的下标即可 void
阅读全文
摘要:Codeforces Round #789 B. Tokitsukaze and Meeting 显然可以拆成横竖两部分来看 竖的的好算 我们模拟一下 发现每次相当于整体右移 然后再向第一列加一个数 我们直接维护一个m长的col即可 行有点复杂 我们可以设dp[i]为第i个数进来时的行有多少个 我们
阅读全文
摘要:B. Railway System 我们显然可以用m次询问求出每条边的权重 我们再考虑最小生成树的过程 对于每一次我们把当前最小边加入 我们考虑与最大生成树的区别 要是该点本该是mst内的 那么最大生成树与最小生成树相同 如果不是 那么两个端点连通 这样会形成环 而我们不知道这一次最小生成树的大小
阅读全文
摘要:Adjacent Swapping https://ac.nowcoder.com/acm/contest/42105/A 赛时想出来逆序对+贪心的做法 但是最后一小时心态不稳 想着必须开出两道题 调爆了 最后发现只改了一行就过了 首先我们可以贪心的将模式串构造出来 比如我们a出现两次 那我们肯定就
阅读全文
摘要:B. Fake Plastic Trees 看了第三个样例 发现一个节点可以由他的几个子节点一起构成 我们首先自下而上的看 肯定叶子节点越大越好 这样我们选择的空间就会越多 再者要是我们该节点的L还是小于我们叶子节点的sum 那我们不得不再加一次操作 而对于这次操作我们还是可以贪心的把他看成叶子节点
阅读全文
摘要:D. Not Adding 正着显然不好做 我们观察数据范围 ai 居然是小于1e6的 我们考虑反想 看一个数如何才能被得到 我们设他能被gcd(a,b)得到 那么a,b一定是得是这个数的倍数 并且其前面的系数的gcd只能是1 这样答案就呼之欲出了 #include <bits/stdc++.h>
阅读全文
摘要:[NOIP2014 提高组] 飞扬的小鸟 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏。玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙。如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告失败。 为了简化问题,我们对游戏规则进行了简化和改编:
阅读全文
摘要:D. Range and Partition 我们简化题意 将长度为n的数组a 分成k段 每一段中属于[x,y]的数的数量要大于不属于[x,y]的 我们可以直接二分区间[x,y] 我们钦定左端点 然后二分右端点即可 但是我们如何快速check这个区间是可行的 首先我们要分成k个区间 每个区间都要>0
阅读全文
摘要:C. Even Number Addicts 本人没学过博弈论 在https://zhuanlan.zhihu.com/p/569862415的指导下写一些自己的理解 首先我们可以想到的就是搜索! 最坏情况下应该是2^50次方 这样我们就可以用一些优化来暴力这道题 这里我们想到的是记忆化搜索 我们设
阅读全文
摘要:D. Permutation Addicts 我们观察给的条件 发现不是那么明朗 我们把x变成ai看看 if a[i]<=k b[a[i]] := a[j] (j<i) && a[j]>k 如果没有就把b[a[i]]:=n+1肯定还是>k的 这不就相当于把b[a[i]]>a[i] 所以我们统计b[i
阅读全文