02 2023 档案
摘要:Atcoder ABC 291 D 题意 n张牌,每张牌两面都有数字,可以翻面,问有多少种情况使得这n张牌中每相邻两张牌表面上的数互不相同 思路 线性dp,每次比较当前位和上一位是否相同即可。 唉,看漏条件了,没看到相邻,想得太复杂了。 但又可以想一想,如果去掉相邻这个条件,这个题要怎么做。 代码
阅读全文
摘要:ABC 250 D 题意 求1到n范围内有以下性质的数的个数: ,其中p和q都是质数,. 思路 将内的质数筛出来,这就是q的范围, 然后这个q的贡献为以内的质数个数,但要注意可能$\fr
阅读全文
摘要:E - Prefix Equality(哈希) 题意 给定两个等长数组a,b,每次询问a的前x个元素组成的集合是否等于b的前y个元素组成的集合 思路 因为它有个限制条件,区间都是[1,x],所以轻松一点,要是询问a的某一段区间与b的某一段区间相等,就不会做了。 直接上哈希,自然溢出。 代码 vect
阅读全文
摘要:#Acwing 97. 约数之和 题意 求的约数之和 思路 假设不考虑次方,只求a的约数之和,要怎么求呢? 当遇到一个数b能被a整除时,假设当前答案为,则应再加上。 a经过质数分解定理后为 当增加一个质数约数$
阅读全文
摘要:ABC 236 E - Average and Median 题意 从一个大小为n的数组选一些数,选的限制是: 对于,或者被选。 问题1:求符合题意要求的选法中最大平均数 问题2:求符合题意要求的选法中最大的中位数 思路 第一问很好解
阅读全文
摘要:ABC 262 D (简单dp) 题意 给定一个数组,问有多少个子数组,它的元素平均数为整数。即该子数组和能被子数组大小k整除 思路 因为数据范围只有100,所以暴力dp就行。 代码 int n,m; int f[110][110][110]; //f[i][j][k]表示选i个数,当前选了j个数,
阅读全文
摘要:HDU 1277 全文检索 题意 给定一个很长的字符串,因为很长所以分成很多行,全为数字组成,不少于60个,不多于60000个。 然后给定一些需要检索的串,个数不超过10000个,每个串长度不超过60。问哪些串出现在文本串中。 思路 知道是字典树,但不知道怎么建树,也不知道从哪里入手,之后看题解才发
阅读全文
摘要:Poj 2503 map sscanf 题意 字符串的映射,但它输入的方式很怪。 首先每行输入两个单词,中间隔一个空格,到输入空行为止。 然后每行输入一个单词,如果能存在映射的单词就输出对应单词,不能就输出"eh". sscanf的用法 sscanf(原串,"格式", 接收的串),比如代码中 ssc
阅读全文
摘要:HDU 4507 (数位dp) 题意 一个数满足以下三个条件之一,则被认为与7有关。 1、整数中某一位是7; 2、整数的每一位加起来的和是7的整数倍; 3、这个整数是7的整数倍; 求区间[L,R] 内与7无关的数的平方和。 思路 以往的数位dp都是求个数,这次是求平方和。 怎么想到当前位与下一位的关
阅读全文
摘要:HDU 3709(数位dp) 题意 求区间[L,R] 内满足以下性质的数:选定该数的一个位置,左右两边的力矩相等,如4139 ,选取'3'这位,左边 4×2+1×1 = 9×1. 思路 一开始想着枚举每个点来做,考虑正确性:对于同一个数,若它存在某个位置pos使得它满足性质,则将这个位置左移,则左值
阅读全文
摘要:HDU 4389 (数位dp) 题意 求一个区间内[L,R] 内 有多少个 数满足:它的数位和能整除它本身。 思路 按照一般数位dp的套路,多出来的参数无非就是数位和以及这个数本身,但如果直接这样做会发现一个问题:每增加一位,数位和就会发生变化,所以还要添加一个参数mod作为最终的数位和,在外层枚举
阅读全文
摘要:[AtCoder Beginner Contest 278] F 题意 给定n个字符串,两个玩家轮流进行操作,每个玩家选择一个字符串,条件为选择第一个字符串或者选的字符串的首字母与上一个字符串的最后一个字母相同 思路 dfs+博弈论(或者找到奇数链或奇数环) 预处理将可以接上的字符串连边 for(i
阅读全文
摘要:ABC 272 D 题意 给定一个N*N的棋盘,棋子初始位置在(1,1),给定一个数M,棋子每步操作可以走到距离不超过M的位置,假设棋子在(i,j),则下一步(x,y)应满足(x-i)×(x-i)+ (y-j)×(y-j)<= M 思路 这是加强版的bfs,平常的bfs一般是四个方向或者八个方向,这
阅读全文
摘要:# AtCoder Beginner Contest 281 D 题意 从一个大小为N的数组中选择K个数,使得这K个数的和是D的最大倍数。 题解 有数据范围1<=K<=N<=100,D<=100可知,这是个简单dp. nt n,m,K,D; int f[110][110]; int a[110];
阅读全文
摘要:CodeForces 851 div 2 (ABC) A (签到) 题意:给定一个数组,只有0和1,问能否找到某个i,使得前i个数的连乘等于后面的数的连乘。 题解:记录数组中2的个数为cnt,奇数无解,遍历数组,当遍历到2的个数等于cnt/2则为答案。 void solve() { cin>>n;
阅读全文