![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【算法】构造与证明
文章平均质量分 84
cz_xuyixuan
这个作者很懒,什么都没留下…
展开
-
【CodeForces】Codeforces Round 583
比赛链接点击打开链接官方题解点击打开链接Problem A*. Optimal Currency Exchange注意到美元所有的面值均为 111 的倍数,不妨认为只可以兑换 111 美元。类似地,也可以认为只可以兑换 555 欧元。则我们需要使得 xd+5yexd+5yexd+5ye 尽可能接近 NNN 。枚举 yyy ,并用除法计算可能到达的最近的值即可。时间复杂度 O...原创 2019-09-05 14:12:56 · 270 阅读 · 0 评论 -
【CodeForces】CodeForces Round #562 (Div. 1) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接【A】 Increasing by Modulo【思路要点】二分答案,贪心判断。时间复杂度 O(NLogM)O(NLogM)O(NLogM) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 3e5 + 5;t...原创 2019-05-28 15:13:38 · 418 阅读 · 0 评论 -
【USACO】USACO 2019 US Open Contest, Platinum题解
【T1】 Tree Boxes【题目链接】点击打开链接【题解链接】点击打开链接【思路要点】考虑在 N×NN\times NN×N 的网格内构建一个 NNN 个点的树,使得任意一个节点 xxx 与其任意一个祖先 yyy 所在位置为两角的矩形恰好包含 xxx 到 yyy 路径上的所有点。以如下方式构造即可:(1)(1)(1) 、将根节点置于 (1,1)(1,1)(1...原创 2019-04-14 14:37:25 · 1516 阅读 · 0 评论 -
【CodeChef】Far Graphs
【题目链接】点击打开链接【思路要点】可以发现,除了位于正中间的一点以外,剩余的点可以分成在正中间左侧的点和在正中间右侧的点,每一类点内部均没有边。因此,若不考虑最中间存在点的情况,给出的图应当为二分图。将所有点按照所在的部分为第一关键字,度数为第二关键字排序,左侧的点度数大的在前,右侧的点度数小的在前,即可确定所有点在数轴上的大小关系。此时,每一个右侧的点能够连向的左侧的点...原创 2019-04-18 16:02:05 · 246 阅读 · 0 评论 -
【AtCoder】AtCoder Grand Contest 032 题解
【比赛链接】点击打开链接【题解链接】点击打开链接【A】 Limited Insertion【思路要点】考虑时间倒流,对于一个位置 iii ,若 ai=ia_i=iai=i ,则可以将其删去,问是否能将序列删空。不难发现每次删除最大的 iii ,使得 ai=ia_i=iai=i 是唯一的最优策略,模拟之,若无法操作则无解。时间复杂度 O(N2)O(N^2)O(...原创 2019-03-26 17:03:00 · 713 阅读 · 0 评论 -
【LOJ6410】「ICPC World Finals 2018」单割故障
【题目链接】点击打开链接【思路要点】不难发现连接两个对角附近的一对点即可构造一组合法解,因此答案应不超过 222 ,我们只需判断答案是否可能是 111 。考虑矩形内两条线段相交的条件,将矩形看做一个环,线段看做一个区间,那么两条线段相交的充要条件为这两条线段对应的区间存在公共部分,但不存在包含关系。因此,我们需要找到环上的一个区间,使得其包含所有线段的恰好一个端点。注意到这...原创 2019-03-22 13:59:30 · 427 阅读 · 0 评论 -
【LOJ6413】「ICPC World Finals 2018」无线光纤
【题目链接】点击打开链接【思路要点】首先,若 M=N−1M=N-1M=N−1 ,那么直接输出原图即可。否则,必然会有一个点度数不同,考虑贪心,尽可能将度为 111 的点连向度不为 111 ,且度数最小的点,制造更多度为 111 的点。若不存在度为 111 的点,则选取度最大的点当做度为 111 的点,连向度数最小的点。使用 TwoPointersTwoPointersTwo...原创 2019-03-21 14:44:51 · 299 阅读 · 0 评论 -
【CodeForces】CodeForces Global Round 1 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Parity【思路要点】分 bbb 的奇偶性讨论即可。时间复杂度 O(k)O(k)O(k) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 5;typedef long long l...原创 2019-02-14 13:55:38 · 838 阅读 · 2 评论 -
【CodeForces】CodeForces Round #530 (Div. 1) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Sum in the tree【思路要点】题目中给出的限制条件相当于限定了所有深度为奇数的点及其父亲的权值和,显然,将深度为偶数的非叶节点的权值设置得尽可能大有利于减少全局权值和。时间复杂度 O(N)O(N)O(N) 。【代码】#include&lt;bits/stdc++.h&gt;usi...原创 2019-01-20 11:30:34 · 606 阅读 · 0 评论 -
【CodeForces】Hello 2019 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Gennady and a Card Game【思路要点】按照题意模拟。时间复杂度 O(1)O(1)O(1) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 5;typedef lo...原创 2019-01-09 13:01:13 · 916 阅读 · 2 评论 -
【CodeChef】Xor Table
【题目链接】点击打开链接【思路要点】我们可以将 ci,jc_{i,j}ci,j 看做二分图的边集,找到图中每一个联通块,确定其中一个数便可以确定所有数,因此,问题等价于我们需要求解满足若干不等式 l≤x⊕val≤rl≤x\oplus val≤rl≤x⊕val≤r 的 xxx 的一组解或指出其无解。直接从高位向低位搜索即可,这部分的复杂度笔者尚不是很明确,可以肯定的是,它不会超...原创 2018-12-09 12:45:59 · 235 阅读 · 0 评论 -
【LOJ2951】「NOIP2018」货币系统
【题目链接】点击打开链接【思路要点】首先考虑货币系统中最小的面值 xxx , xxx 一定在最小化的货币系统中出现了,并且一定没有比 xxx 更小的面值在最小化的货币系统中出现。仅包含 xxx 的当前货币系统能够表示出的面额一定是原有货币系统能表示出的一个子集,考虑在原有货币系统能表示出的面额中选取最小的、当前货币系统不能表示出的面额 yyy , yyy 一定是在原有货币系统中...原创 2018-12-13 10:10:23 · 427 阅读 · 0 评论 -
【省内训练2018-10-26】网友数
【思路要点】首先,当 k≥9k≥9k≥9 ,任何 ≥28≥28≥28 的数 xxx 均为网友数。 (1)(1)(1)(1)(1)(1) 的证明:当 x≤1000x≤1000x≤1000 ,我们可以暴力验证命题的正确性。否则,考虑 xxx 的末位,我们可以用 999 个 444 或是 777 造出 000 至 999 以内的任何末位,这样,我们可以在 xxx 中将造出的数减去, xxx ...原创 2018-10-26 19:25:52 · 382 阅读 · 0 评论 -
【省内训练2019-06-03】Tetris
【思路要点】记 sumx=∑i=0N−1[i%k=x]aisum_{x}=\sum_{i=0}^{N-1}[i\%k=x]a_isumx=∑i=0N−1[i%k=x]ai 。可以发现,玩家的两种操作不会改变局面中 (sumx−sum0)%k(sum_x-sum_0)\%k(sumx−sum0)%k 的值。消除一行的操作对于 x∈[0,N%k)x\in[0,N\%k)x∈[0,N%...原创 2019-06-06 15:47:13 · 250 阅读 · 0 评论 -
【LOJ2392】「JOISC 2017 Day 1」烟花棒
【题目链接】点击打开链接【思路要点】可以发现,让一个人 AAA 点燃另一个人 BBB 后跑开的解一定能被让 AAA 跟着 BBB 直到 AAA 燃烧殆尽的解完全替代,因此我们可以假设任意时刻,局面中一定只有一个正在燃烧的人。不在燃烧的人一定始终会向正在燃烧的人靠近,一旦到达正在燃烧的人,我们可以看做其燃烧时间增加了 ttt 。正在燃烧的人只有在遇到某人的时候才会转向。二分答案...原创 2019-06-13 15:03:02 · 985 阅读 · 0 评论 -
【AtCoder】AtCoder Grand Contest 021
比赛链接点击打开链接官方题解点击打开链接Problem A. Digit Sum 2考虑如何用最小的数得到某个数位和 SSS ,显然是将最低的若干位设为 999 。因此,我们只需要考虑形如 x999…9x999\dots9x999…9 的数,找到 NNN 以内最大的这样的数即可。时间复杂度 O(LogN)O(LogN)O(LogN) 。#include<bits/stdc++...原创 2019-09-04 10:24:09 · 339 阅读 · 0 评论 -
【CodeForces1070M】Algoland and Berland
题目链接点击打开链接题目解法可以用构造的方式说明,对于任意的输入,答案均为 YesYesYes 。在下文中,我们称 AAA 集合中的点为黑点, BBB 集合中的点为白点。对于 N=1N=1N=1 或 M=1M=1M=1 的情况,连接所有可行的边即可。否则,一定存在至少一个 iii 使得 ri≥2r_i\geq2ri≥2 ,考虑取 rir_iri 最大的白点 MaxMaxMax 作为...原创 2019-08-28 19:46:38 · 245 阅读 · 0 评论 -
【LOJ3176】「IOI2019」景点划分
【题目链接】点击打开链接【思路要点】不妨令 a≤b≤ca\leq b\leq ca≤b≤c ,由 a+b+c=Na+b+c=Na+b+c=N ,则有 a≤N3,b≤N2,c≥N3a\leq\frac{N}{3},b\leq\frac{N}{2},c\geq\frac{N}{3}a≤3N,b≤2N,c≥3N 。由于我们只希望有两个导出子图连通,因此一定是 a,ba,ba,b...原创 2019-08-15 21:40:17 · 920 阅读 · 0 评论 -
【AtCoder】AtCoder Grand Contest 036 题解
【比赛链接】点击打开链接【题解链接】点击打开链接【A】 Triangle【思路要点】注意到对于任意一个格点三角形,我们都可以找到一个点,将其平移至原点处后,另外两个点在同一象限内,或在该象限相邻的坐标轴上。因此,可以不失一般性地假定一个点在 (0,0)(0,0)(0,0) 处。令另外两点的坐标为 (x,y),(a,b)(x,y),(a,b)(x,y),(a,b)...原创 2019-08-09 21:08:44 · 468 阅读 · 0 评论 -
【AtCoder】AtCoder Grand Contest 037 题解
【比赛链接】点击打开链接【题解链接】点击打开链接【A】 Dividing a String【思路要点】设一个划分中第一次出现长度超过 222 的 SiS_iSi 的位置为 iii 。则可以通过将 SiS_iSi 划分为更小的串,以及将 SiS_iSi 的某一个后缀拼接至 Si+1S_{i+1}Si+1 的方式使得第一次出现长度超过 222 的 SiS_iS...原创 2019-08-19 11:14:41 · 750 阅读 · 0 评论 -
【AtCoder】AtCoder Grand Contest 035 题解
【比赛链接】点击打开链接【题解链接】点击打开链接【A】 XOR Circle【思路要点】题目给出的要求等价于相邻的三个数异或和为 000 。特判全部 aia_iai 均为 000 的情况,这种情况是有解的。否则,如果确定 1,21,21,2 号位置为 a,ba,ba,b ,则 333 号位置一定为 a⊕ba\oplus ba⊕b , 444 号位置一定为 aa...原创 2019-08-04 18:25:14 · 489 阅读 · 2 评论 -
【省内训练2019-06-29】Coins
【思路要点】首先先说一下笔者在考场上的复杂度较高的做法。不难发现一次扭蛋或使用 111 枚银币,或使用 xxx 枚金币,且 xxx 不会重复。考虑枚举金币的使用方式,则可以得到一系列只使用金币就可以表示出来的数 a1,a2,…,an (ai<ai+1)a_1,a_2,\dots,a_n\ (a_i<a_{i+1})a1,a2,…,an ...原创 2019-06-29 20:59:26 · 381 阅读 · 0 评论 -
【2019 江苏省队集训】Day2 解题报告
【T1】 朝夕相处【思路要点】记不考虑旋转同构的答案为 G(N)G(N)G(N),答案为F(N)F(N)F(N),由BurnsideBurnsideBurnside引理,有F(N)=∑i∣NG(i)φ(Ni)NF(N)=\frac{\sum_{i\mid N}G(i)\varphi(\frac{N}{i})}{N}F(N)=N∑i∣NG(i)φ(iN)剩余问题在于计算 G(N)G(...原创 2019-07-03 13:30:13 · 946 阅读 · 0 评论 -
【校内训练2019-06-24】Sort
【思路要点】考虑 k=0k=0k=0 的情况,当且仅当 AAA 为单位置换,步数为 000 ,否则,当且仅当 AAA 中的置换环长度均不超过 222 ,步数为 111 ,这两种情况的方案数均为 111 ,以下讨论排除了这两种情况。考虑一个环的情况,不难构造出一种步数为 222 的解,因此步数应当为 222 ,不失一般性地,我们认为需要在两次操作内将 1,2,…,N1,2,\dots,N1,...原创 2019-06-24 20:28:40 · 259 阅读 · 0 评论 -
【校内训练2019-07-08】网格
【思路要点】首先,当 N,MN,MN,M 均为奇数,且给定的排列按先行后列的方式展开为一维后得到的排列为奇排列,问题无解,这是因为可以进行的任何操作不会改变这个排列的奇偶性。以下算法对所有不满足上述条件的排列给出了一组可行的构造。考虑 NNN 与 MMM 之中存在偶数的情况,不失一般性地,令 NNN 为偶数。我们可以较为简单地还原矩阵靠右侧的 N×(M−1)N\times(M-1)N×...原创 2019-07-08 14:50:49 · 303 阅读 · 0 评论 -
【校内训练2019-07-08】排序
【思路要点】记给定序列可以分成的最少的值域连续的上升子序列的个数 CntCntCnt ,则有Ans=⌈Log2Cnt⌉Ans=\lceil Log_2Cnt\rceilAns=⌈Log2Cnt⌉不难发现这也是答案的下界,考虑如何构造。显然每次操作时,每一个上升子序列种的所有数或是同被操作,或是同不被操作。因此方案的构造与 N,N−1,N−2,…,1N,N-1,N-2,\dots,1...原创 2019-07-08 14:23:45 · 178 阅读 · 0 评论 -
【校内训练2019-06-18】幻方
【思路要点】给出结论,答案为 (1+[N=4,M%2=0])×MN(N−2)(1+[N=4,M\%2=0])\times M^{N(N-2)}(1+[N=4,M%2=0])×MN(N−2)考虑空出 (1,1),(1,2),(1,3),…,(1,N−1),(2,1),(3,1),…,(N−1,1),(N,2),(2,N)(1,1),(1,2),(1,3),\dots,(1,N-1),(2,1...原创 2019-06-18 15:03:51 · 340 阅读 · 0 评论 -
【CodeForces】CodeForces Global Round 3 题解
【比赛链接】点击打开连接【题解链接】点击打开链接【A】 Another One Bites The Dust【思路要点】答案为 2c+2min{a,b}+[a≠b]2c+2min\{a,b\}+[a\ne b]2c+2min{a,b}+[a̸=b]。时间复杂度 O(1)O(1)O(1) 。【代码】#include<bits/stdc++.h>...原创 2019-06-03 13:48:09 · 673 阅读 · 0 评论 -
【AtCoder】AtCoder Grand Contest 034 题解
【比赛链接】点击打开链接【题解链接】点击打开链接【A】 Kenken Race【思路要点】首先, AAA 到 CCC 中与 BBB 到 DDD 中不能存在连续的两个障碍物。其次,若 D<CD<CD<C ,需要额外满足 BBB 到 DDD 中存在至少一个空位两侧均为空位。时间复杂度 O(N)O(N)O(N) 。【代码】#...原创 2019-06-03 09:43:54 · 740 阅读 · 0 评论 -
【CodeForces】Mail.Ru Cup 2018 Round 1 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Elevator or Stairs?【思路要点】按照题意计算两种方式的用时,取较优的方案采纳。时间复杂度 O(1)O(1)O(1) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 5...原创 2018-10-21 14:28:31 · 794 阅读 · 1 评论 -
【CodeForces】Avito Code Challenge 2018 (Div. 1 + Div. 2) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Antipalindrome【思路要点】当所有字符相同,答案为 000 。否则,若原串为回文串,删去其最后一个字符一定会使其变成非回文串,因此答案为 N−1N-1N−1 ,否则答案为 NNN 。时间复杂度 O(N)O(N)O(N) 。【代码】#include<bits/stdc++.h...原创 2018-10-25 19:56:20 · 388 阅读 · 0 评论 -
【CodeForces】CodeForces Round #517 (Div. 1 + Div. 2) 题解
【比赛链接】Div. 1Div. 2【题解链接】点击打开链接**【Div.2 A】**Golden Plate【思路要点】直接循环计算答案即可。时间复杂度 O(K)O(K)O(K) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 2e5 + 5;type...原创 2018-10-22 20:54:05 · 660 阅读 · 0 评论 -
【AtCoder】AtCoder Regular Contest 093 题解
【比赛链接】点击打开链接【题解链接】点击打开链接【C】Traveling Plan【思路要点】删除一个点本质上只改变了\(O(1)\)对相邻关系,在总和的基础上调整即可。时间复杂度\(O(N)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 100005;template <typename...原创 2018-06-13 20:58:43 · 432 阅读 · 0 评论 -
【AtCoder】AtCoder Regular Contest 094 题解
【比赛链接】点击打开链接【题解链接】点击打开链接【C】找到原序列的两个中位数\(X\),\(Y\),不妨令\(X≤Y\)。若\(X_i≤X\),\(B_i=Y\),否则\(B_i=X\)。时间复杂度\(O(NLogN)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 200005;template...原创 2018-06-12 18:23:40 · 339 阅读 · 0 评论 -
【AtCoder】AtCoder Regular Contest 095 题解
【比赛链接】点击打开链接【题解链接】点击打开链接【C】Many Medians【思路要点】找到原序列的两个中位数\(X\),\(Y\),不妨令\(X≤Y\)。若\(X_i≤X\),\(B_i=Y\),否则\(B_i=X\)。时间复杂度\(O(NLogN)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN ...原创 2018-06-11 20:43:34 · 358 阅读 · 0 评论 -
【CodeForces】CodeForces Round #475 (Div. 1 + Div. 2) 题解
【比赛链接】Div. 1Div. 2【题解链接】点击打开链接【Div.2 A】Splits【思路要点】由于我们希望得到尽可能不同的权值,我们可以考虑在拆分的开头放置若干个2,然后放1填补剩余的数字。不难发现答案等于\(\lfloor\frac{N}{2}\rfloor+1\)。时间复杂度\(O(1)\)。【代码】#include<bits/stdc++.h>using namespa...原创 2018-04-28 20:39:40 · 458 阅读 · 0 评论 -
【BZOJ5033】【JSOI2014】强连通图
【题目链接】点击打开链接【思路要点】第一问本质上是问图中最大的强连通分量的大小,Tarjan算法即可。对于第二问,我们先将图缩点,显然答案有下界\(max\{cntin,cntout\}\),其中\(cntin\)为入度为0的点的个数,\(cntout\)为出度为0的点的个数。题目中的两个样例均满足答案恰好为下界,因此我们猜测答案始终为下界,并试图构造一组解。我们将所有入度为0的点排在一边,出度为...原创 2018-04-25 12:59:04 · 432 阅读 · 0 评论 -
【BZOJ1982】【SPOJ2021】Moving Pebbles
【题目链接】点击打开链接【思路要点】补档博客,无题解。【代码】#include<bits/stdc++.h>using namespace std;#define MAXN 100005int a[MAXN];int main() { int n; scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("...原创 2018-04-14 10:16:36 · 178 阅读 · 0 评论 -
【BZOJ1115】【POI2009】石子游戏Kam
【题目链接】点击打开链接【思路要点】补档博客,无题解。【代码】#include<bits/stdc++.h>using namespace std;#define MAXN 5005int a[MAXN];int main() { int T; cin >> T; while (T--) { int n; cin >> n; for (int...原创 2018-04-16 15:53:25 · 199 阅读 · 0 评论 -
【BZOJ2463】【中山市选2009】谁能赢呢?
【题目链接】点击打开链接【思路要点】补档博客,无题解。【代码】#include<bits/stdc++.h>using namespace std;#define MAXN 5005int main() { int n; for (cin >> n; n; cin >> n) { if (n & 1) cout << "Bob"...原创 2018-04-14 17:38:06 · 159 阅读 · 0 评论