题意给出一个加法表,一个字母代表一个数字。求加法的进制,以及每个大写字母代表的数字。数字个数 $N\le 8$ 。(行数 $\le 9$)题解结论:一定是 $N$ 进制。每一行有几个二位数,这个数就是几。证明:因为有 $N$ 个不同的数,所以最少 $N$ 进制。假设为 $N+1$ 进制,那么一定有一个数没有出现,假设为 $k$ 。$k=0$ 或 $k=1$,而 $1+N=10$ ,矛盾。$1...
双倍经验:洛谷2687 逢低吸纳,全部改成 double 就可以水过。题意求最长下降子序列的长度和个数。如果两个序列的值相同,则认为这两个序列相同,只算一个。序列长度 $N\le 5000$ 。题解长度很好求,用 $f[i]$ 表示以 $i$ 结尾的最长下降子序列的长度:$$f[i] = \max_{j=1}^{i-1} f[j]+1 \ (s[j] > s[i]) \tag{1}$...
开始爆肝题解题意给出一个 $N$ 进制加法的竖式,一个大写字母代表一个数字。求每个大写字母代表的数字。$N\le 26$ 。题解直接爆搜。从右往左一次搜各个竖排,如果搜到就退出。要开 O2 并且优化搜索顺序(就是把每个竖排的第一个数倒叙搜索,可以通过分析数据点得出)才能过,而且 #9 刚好 $1000ms$ ,真是刺激。#include<bits/stdc++.h>
using...
请按顺序阅读常用操作安装Gitsudo apt-get install gitWindows 去下载安装 Git,然后右键选择 Git Bash Here指定用户信息git config --global user.name "<username>"
git config --global user.email "<email>"...
D题没做出来,待补。 补完了A-P5461 赦免战俘题意不停的把矩形左上角的数变成 $0$ ,然后继续分治求解剩下三部分,输出矩形最后的形态。矩形大小为 $2^N\times 2^N$ ,$N\le 10$ 。题解直接按题意模拟即可。#include<bits/stdc++.h>
using namespace std;
inline int read()
{
cha...
双倍经验:SP1110题意填一个 $16\times 16$ 的数独。多组数据。题解状压优化搜索+剪枝。用 $16$ 位二进制数 $\text{ok}[i][j]$ 表示每个点可以填字母的情况。每次搜索之前先尽可能找到不合法,或只有一种填法的情况。某个点不能填任何字母则回溯;只能填一个字母则直接向下搜索,搜不到直接退出。某个字母不能填在某一行的任何位置则回溯;只能填在一个位置则向下搜索。列同...
题意在长度为 $N$ 的数列中选择不超过 $M$ 段连续的数,求这些数总和的最大值。$N,M\le 10000$ 。题解可以先将连续的相同符号的数合并起来,并忽略 $0$ 。因为取正数时一定会把一整段取完,取负数也肯定会把自己这段和两边的正数段取完。这样得到的新序列是正负交替的,下面处理新数列。先贪心的把所有正数取完,并记正数的个数为 $cnt$ 。如果 $cnt\le m$ ,那么此时就已...
题意要求维护一个序列,可以动态插入和查询第 $k$ 大。命令总数 $\le 30000$ 。题解用两个堆维护,大根堆大小为 $k-1$ ,其余放入小根堆。插入操作时,先插入大根堆,然后取堆顶放入小根堆。查询操作时,答案就是小根堆顶,并将答案放入大根堆。#include<bits/stdc++.h>
using namespace std;
inline int read()
...
题意给出一个矩阵,求该矩阵的最小循环节面积。(不要求恰好完全覆盖)。矩阵大小为 $N\times M$ ,$N\le 10000 \ , \ M\le 75$ 。题解对行和列分别求出 $next[]$ ,答案就是 $(n-next[n])\times (m-next[m])$ 。#include<bits/stdc++.h>
using namespace std;
inli...
题意用一串 $0/1$ 序列表示一棵树的 $\text{dfs}$ 路径,$0$ 表示远离根节点,$1$ 表示靠近根节点。给出两个序列,判断它们是不是同构的树。序列长度 $L\le 3000$ 。题解对每棵树做 $\text{dfs}$ ,回溯时根据与当前节点相连子树的 $\text{hash}$ 值算出当前子树的 $\text{hash}$ 值,最后比较根节点的 $\text{hash}$...
题意用两个栈进行排序,只有入栈和出栈操作,求字典序最小的操作序列。如果无法排序输出 No 。数列长度 $N\le 1000$ 。题解先考虑单栈排序。如果存在 $i < j < k$ 但 $S_k < S_i < S_j$ 就无法进行排序。这道题有两个栈,可以对所有矛盾关系 $(i,j)$ 建边,然后跑一遍 $\text{dfs}$ 进行染色,判断是否有矛盾。枚举所有的...
题意给出一个残缺的日期,求使得日、月+日、年+月+日都为质数的填充方案数。多组数据,$T\le 10$ 。题解先预处理出所有合法的日期,然后对于输入直接枚举即可。#include<bits/stdc++.h>
using namespace std;
inline int read()
{
char ch=getchar();
int f=1,x=0;
...
题意用 $K$ 进制串 $S_i$ 表示 $N$ 个不同的单词。每个单词出现了 $W_i$ 次,不存在某个进制串是另一个的字串。求处理后全文的最短长度,以及此情况下最长 $S_i$ 的最短长度。题解编码方式显然是一棵 $K$ 叉哈夫曼树,先补 $0$ 直到 $(N-1)\equiv 0\pmod {(K-1)}$ ,然后每次选 $K$ 个点合并成一个点直到只剩 $1$ 个点即可。要求最长的 ...
四倍经验(1蓝2紫1黑):P3620,SP1553,P1484,P1792题意将 $N$ 个办公楼两两配成 $K$ 对,要求这 $K\times 2$ 栋楼相异。所有办公楼在一条直线上,配对的两栋楼之间需要连接电缆,求电缆长度的最小值。$N\le 100000$ 。题解显然,配对相邻的两栋楼是最优的。将边看成点来考虑,题目即转化成:在 $N$ 个点中选 $K$ 个不相邻的点,使得点权最小。每...
题意需要用双端队列实现 $N$ 个数的排序。依次处理每一个数,每次只能将数放在队首或队尾,或新建一个队列。求需要的最少双端队列数。$N\le 200000$ 。题解将原数列排序,可以得到 新数列对应原序列下标 的序列。如:原序列下标序列$[3,6,0,9,6,3]$$[1,2,3,4,5,6]$$[0,3,3,6,6,9]$$[3,1,6,2,5,4]$可以发现只有下标序列的一段满足先递减再...