CF1473B String LCM 题解】的更多相关文章

Content 如果一个字符串 \(s\) 由若干个字符串 \(t\) 拼接而成,则我们说 \(s\) 能被 \(t\) 整除.定义 \(s_1,s_2\) 的最短公倍串为可以同时被 \(s_1,s_2\) 的最短非空字符串.给定 \(T\) 对字符串 \(s_1,s_2\),求出每对字符串的最短公倍串. 数据范围:\(T\in[1,2000],|s_1|,|s_2|\in[1,20]\). Solution <记我用 1.81k 代码过了一道普及- 的题目> 由于数据范围小得可怜,我们可以先…
题意:给你两个字符串\(a\)和\(b\),找出它们的\(lcm\),即构造一个新的字符串\(c\),使得\(c\)可以由\(x\)个\(a\)得到,并且可以由\(y\)个\(b\)得到,输出\(c\),如果\(c\)不存在,输出\(-1\). 题解:我们可以根据\(a\)和\(b\)的长度得出\(c\)的长度\(len_c\),而\(len_c\)一定是\(len_a\)和\(len_b\)的倍数, 我们就可以根据这个倍数关系构造出\(c\)(用\(a\)或者\(b\)构造都行,因为假如合法的…
原题链接 享受推式子的乐趣吧 数论真有趣! 庆祝:数论紫题第 \(3\) 道. \[\sum_{i=1}^n \operatorname{lcm}(i,n) \] \[= \sum_{i=1}^n \frac{i \times n}{\gcd(i,n)} \] \[= n \times \sum_{i=1}^n \frac{i}{\gcd(i,n)} \] \[= n \times \sum_{d|n} \sum_{i=1}^n \frac{i}{d} [\gcd(i,n) == d] \] \…
Content 构造一个仅由 a,b,c 三个字符组成,且最长回文子串长度不超过 \(k\) 的长度为 \(n\) 的字符串. 数据范围:数据组数 \(\leqslant 10\),\(1\leqslant k\leqslant n\leqslant 1000\). Solution 我们可以循环输出 a,b,c,直到长度达到 \(n\) 为止.很容易发现这样构造出来的字符串最大回文子串长度为 \(1\),不会超过 \(k\),所以这样是符合题目要求的. Code string a = "abc…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=2026 参考及推导:https://www.cnblogs.com/ivorysi/p/9157781.html (其公式有一处小问题,请注意.) 然后就没了……我觉得讲得挺详细了. 另外map跑得可能比哈希表还快可还行. #include<map> #include<cmath> #include<stack> #include<queu…
题意 给一个字符串\(s\),和\(n\)个子串\(t[i]\),两个人博弈,每次取出一个串\(t[i]\),在后面加入一个字符,保证新字符串仍然是\(s\)的子串,无法操作的人输. 分析 n个子串,类比于n堆石子,如果把子串\(t[i]\)在后面加若干字符能生成的子串看出一个状态,用一个数表示,那每次状态的变化,就类比于对一堆石子取走若干个,无法操作,就类比于没有石子可以取. 多堆取石子游戏的做法就是把每堆石子的SG值(sg(x)=x)异或起来,不为零就先手赢,否则后手赢. 所以可以将题目转化…
题意分析 给出$n$个数,求这$n$个数两两的最小公倍数的最大公约数 思路分析 通过分析样例可以发现,如果要成为这$n$个数两两的最小公倍数的公约数,至少要是这$n$个数中$n-1$个数的约数,否则就至少会有两个数的最小公倍数无法被这个数整除. 所以只要找出所有满足至少是这$n$个数中的$n-1$个数的约数的数就可以了.找的方法很简单,只要每个数去试一下能整除被几个数就可以了.这里有几个需要注意的点: - 找出的数应该是质数,否则可能会因为该数的约数已被找出而出错.可以不必先筛出质数,从小到大依…
题目链接 题目大意 给你一个长度为n的字符串,可以交换相邻两个元素,使得这个字符串翻转,求最少多少种次数改变 题目思路 如果要求数组排序所需要的冒泡次数,那其实就是逆序对 这个也差不多,但是如果是相同字符,用的应该是对应的最近的这个字母. 代码 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=2e5+5; int n,cnt[30],ans[maxn],tree[maxn<…
Content 给定一个仅包含 A.B.C 三种字符的字符串 \(s\),有如下两种操作: 删除字符串中的恰好一个 A 和恰好一个 B. 删除字符串中的恰好一个 B 和恰好一个 C. 求是否能够把字符串 \(s\) 删空. 数据范围:\(t\) 组数据,\(1\leqslant t\leqslant 1000\),\(1\leqslant |s|\leqslant 50\). Solution 设我们执行了 \(x\) 次第一种操作,\(y\) 次第二种操作,那么就会删去 \(x\) 个 A,\…
Mediocre String Problem 题解: 很容易想到将第一个串反过来,然后对于s串的每个位置可以求出t的前缀和它匹配了多少个(EXKMP 或者 二分+hash). 然后剩下的就是要处理以某个位置为结束的回文串有多少个(manacher + 差分),因为要求s串选取的要多一点.这道题是个痛啊...当时的金牌题,不会EXKMP可以用二分+字符串hash啊,比赛前的暑假还写过,比赛时就没想到,还以为KMP可以搞出这个东西, 然后就三个人一起自闭地调KMP,说到底还是菜呀. 代码: #pr…