P10244 String Minimization 题解】的更多相关文章

题意 给定一个长度为 \(n\) 的序列 \(a\) 以及一个长度为 \(m\) 的字符串 \(s\),初始 \(s\) 均为 \(\text{B}\),第 \(i\) 次操作可以把 \(s_{a_i}\) 或 \(s_{m+1-a_i}\) 修改为 \(\text{A}\),求修改过后的字典序最小的 \(s\). 思路 因为要使字典序最小,所以要让 \(\text A\) 尽量靠前,所以会出现以下几种情况: 设当前更改位置为第 \(i\) 位,若 \(s_i\) 和 \(s_{m+1-i}\)…
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 代码过了一道普及- 的题目> 由于数据范围小得可怜,我们可以先…
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…
题意 给一个字符串\(s\),和\(n\)个子串\(t[i]\),两个人博弈,每次取出一个串\(t[i]\),在后面加入一个字符,保证新字符串仍然是\(s\)的子串,无法操作的人输. 分析 n个子串,类比于n堆石子,如果把子串\(t[i]\)在后面加若干字符能生成的子串看出一个状态,用一个数表示,那每次状态的变化,就类比于对一堆石子取走若干个,无法操作,就类比于没有石子可以取. 多堆取石子游戏的做法就是把每堆石子的SG值(sg(x)=x)异或起来,不为零就先手赢,否则后手赢. 所以可以将题目转化…
题目链接 题目大意 给你一个长度为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,\…
官方标签 贪心.字符串 题目描述 输入 输出 样例输入 6 4 5 1 1 3 1 1 5 2 4 1 1 1 1 1 2 4 1 3 2 7 7 5 4 5 5 5 3 5 样例输出 ABABA BABBB A AABB ABABBBB ABABA 说明 题目大意 给定一个长度为m的字符串,并且该字符串初始化由B组成. 根据数组a[],对字符串中的个别地方替换为A a = num[i]; b = m + 1 - num[i]; 如果a < b && s[a] != 'A'或者a &…
超神的建模,极其有借鉴意义/cy 注:该建模对应于最小割建模 对于 \(n\) 个数,每个数有 \(m\) 种取值的技巧 \(\forall i=1,2,\dots,n\),令 \(S=V_{i,0}\rightarrow V_{i,1}\rightarrow \dots \rightarrow V_{i,m}=T\),也就是形成 \(n\) 条链. 此时,\(i\) 取值 \(j\) 时对应着切断边 \(V_{i,j-1}\rightarrow V_{i,j}\),因此这条边可以附上权值 \(…
Mediocre String Problem 题解: 很容易想到将第一个串反过来,然后对于s串的每个位置可以求出t的前缀和它匹配了多少个(EXKMP 或者 二分+hash). 然后剩下的就是要处理以某个位置为结束的回文串有多少个(manacher + 差分),因为要求s串选取的要多一点.这道题是个痛啊...当时的金牌题,不会EXKMP可以用二分+字符串hash啊,比赛前的暑假还写过,比赛时就没想到,还以为KMP可以搞出这个东西, 然后就三个人一起自闭地调KMP,说到底还是菜呀. 代码: #pr…
好!机会来了! 依评论区的要求,小金羊献上STLset<string>的题解. 当然不会告诉你map<string,bool>我根本不会用 所以,有什么内置的成员函数救救孩子??? 还是先复习 or 预习一下set. 先给集合一个名字: set<元素类型>qwq; 插入元素: qwq.insert(元素); 查找元素: qwq.find(元素); 如果元素没有找到,返回qwq.end(),是一个空的位置迭代器. 于是得出: 如何判断元素p是否存在于qwq中? if (q…