08 2021 档案

摘要:原题链接 考察:质因数分解,筛质数 思路: 比较明显的思路是循环$1$~$n$每一个$a[i]\(,分解质因数,时间复杂度约为n\*\)\sqrt{107}$会有超时的风险. 优化就是筛到$107$的质数,然后判断为质数立马跳出. 将质数的指数取最小值.然后循环$a[i],b[i]$除去质数. 但是 阅读全文
posted @ 2021-08-31 22:42 acmloser 阅读(53) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:枚举 思路: 枚举所有分配方案.这里采用的枚举方式是隔板法.也就是先枚举每个队的人数,然后将7个人全排列,按人数放隔板,计算答案. ##Code #include <iostream> #include <cstring> #include <map> #include <algor 阅读全文
posted @ 2021-08-31 16:06 acmloser 阅读(42) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:栈,模拟 模拟栈匹配,不匹配的留入栈里.然后栈里都是不匹配的坐标,相邻之间都是匹配的. #include <iostream> #include <cstring> using namespace std; const int N = 100010; char s[N],res[N] 阅读全文
posted @ 2021-08-30 22:23 acmloser 阅读(27) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:模拟 思路: 坑点比较多: (1) 判断不符合语法的单词 (2) 只允许存在一个名词 #include <iostream> #include <cstring> using namespace std; const int N = 100010,M = 10; string s[N 阅读全文
posted @ 2021-08-30 19:36 acmloser 阅读(39) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:欧拉路径,离散化 思路: 定睛一看这不欧拉路径吗,然后套板子即可.... ##Code #include <iostream> #include <cstring> #include <map> using namespace std; typedef pair<int,int> P 阅读全文
posted @ 2021-08-30 16:33 acmloser 阅读(39) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:思维 错误思路: 暴力模拟,但是步骤没有统一的规矩. 思路: 递归思想.因为需要将每个棋子放在主对角线以下.那么首先保证最后一列无$1$,那么再交换有$1$的行和最后一行,这样怎么也不会换到对角线上.然后可以发现最后一行,最后一列可以去掉,再重复上面的步骤 ##Code #inclu 阅读全文
posted @ 2021-08-27 02:17 acmloser 阅读(39) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:计算几何,枚举 思路: 枚举所有线段排列方案.检查以下条件: 两条线平行,相连两条线垂直. 边的长度都$>0$ 都是直角 判断向量平行和垂直: GO ##Code #include <iostream> #include <cstring> #include <map> #inclu 阅读全文
posted @ 2021-08-26 22:24 acmloser 阅读(35) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:dfs 错误思路: 有点类似$acwing$的正则问题,然而并不是.... 正确思路: 当遇到一个pair后面一定是<,但是$int$不一定.需要考虑它在pair后的哪个位置.很巧妙的方法是一个pair是< , >三个符号$2$个$dfs$.,是第一个dfs回溯后添加,>是第二个df 阅读全文
posted @ 2021-08-24 23:44 acmloser 阅读(47) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 思路: 不知道具体分到哪类....总之是分情况讨论. (1) k>1的情况,分为 m<=n-1 和 mn 两种情况 (2) k1 分为3种情况. \(2.1\quad m<=n-2 和m==n-1 和 m==n\) 其中$mn$又要细分为$n2和n>2$的情况 ##Code # 阅读全文
posted @ 2021-08-24 18:43 acmloser 阅读(41) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:记忆化搜索 思路: 不用等完整的DIMA在记录.设置$dp[i][j]\(为当前坐标\)(i,j)$能走的步数.求所有起点的最大$dp[i][j]$. 无穷的条件是当前起点开始走到本次走过的地方.所以还需要一个$bool$数组记录. ##Code #include <iostream 阅读全文
posted @ 2021-08-24 15:31 acmloser 阅读(54) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心+思维 思路: 首先明确抹去字符不能改变$s1$在$s2$的位置.也就是不存在$"你中有我,我中有你"$的情况.所以如果$s2[i]$在$s1[i]$出现位置比$s2[i+1]$晚,那么$ans++$. 两层$for$循环明显需要优化,所以预处理$s1$的情况.$f[i][j]$ 阅读全文
posted @ 2021-08-24 11:01 acmloser 阅读(46) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:线性dp 思路: 一开始完全没想到dp,看了题目的算法标签才做出来() $f[i][j]$记录当前位是$i$,符合要求的子序列上一位是$j$的最长长度. $dp$转移: 找到上一位与$a[i]$相等的位置$k% $k$存在 \(f[i][j] = f[j][k]+1\) $k$不存在 阅读全文
posted @ 2021-08-12 14:40 acmloser 阅读(31) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:模拟,贪心 思路: 万恶的模拟+离线处理题. 对于相邻的0之间的数字,最大的放在stack里,其次在队列,最后在双端队列. 要注意的是可能末尾没有0 ##Code #include <iostream> #include <cstring> #include <stack> #inc 阅读全文
posted @ 2021-08-10 12:30 acmloser 阅读(35) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:思维 思路: 假设时间$c$后,以$1$为开始的细菌$>=t$.此后$n-c$就是以$t$为起始到达$z$的时间.但是如果$>t$就需要将$ans+1$ #include <iostream> #include <cstring> using namespace std; typed 阅读全文
posted @ 2021-08-09 10:09 acmloser 阅读(25) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:st表+贪心 or 枚举+剪枝 ###思路一: 枚举+剪枝.枚举左端点,在枚举$>i$的每一个$j$.求两个值,以$i$为起点的和,与以$i+1$为起点的或和.如果两个值是一样的说明没必要$a[i]$没必要在此区间存在. #include <iostream> #include <c 阅读全文
posted @ 2021-08-09 00:52 acmloser 阅读(25) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:快速幂 思路: 简单题,但我$wa$了$n$次... $mp$统计$sum-a[i]$的出现次数.从小开始遍历,如果次数可以整除$x$,则需要进位,注意每个地方都最好$long long$.... 还有就是分子可能>分母,因为$a$最小可以 \(= 0\) ##Code #inclu 阅读全文
posted @ 2021-08-08 21:31 acmloser 阅读(29) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:组合数学 思路: 我们不必模拟每次具体去掉什么.因为去掉的蜡烛只能在熄灭的蜡烛左右俩侧.对于区间$2$,每次在左右端点选一个去掉,方法数是$2^{8-4-1-1}$.但是区间1,3是特殊的,因为只有一种方法. 计算完区间内部的方法后,就是计算区间之间的方法数.这里不能用插空法.是先有 阅读全文
posted @ 2021-08-08 18:24 acmloser 阅读(39) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:双指针 思路: 两个单调队列,一个存最大值,一个存最小值.当差值$>k$时开始计数.这时需要在设置一个指针$l$,将最左边的队列元素去掉.计算的时候....不要两头计算,确定左边计算右边........... ##Code #include <iostream> #include < 阅读全文
posted @ 2021-08-01 10:52 acmloser 阅读(37) 评论(0) 推荐(0) 编辑