Codeforces 1238E. Keyboard Purchase】的更多相关文章

传送门 注意到 $m$ 只有 $20$ ,考虑一下状压 $dp$ 设 $f[S]$ 表示当前确定的字符集合为 $S$ ,那么转移就考虑从最右边加入的下一个字符 $c$ 那么问题来了,代价如何计算 考虑每次加入一个字符以后对于所有字符间的移动$(c_i,c_{i+1})$产生的代价 那么显然只有当 $c_i \in S$ ,$c_{i+1} \notin S$ 时,移动 $(c_i,c_{i+1})$ 会多经过当前加入的字符的位置,那么需要的时间就会增加 $1$ 所以我们可以维护一个 $cnt[i…
大意: 给定串$s$, 字符集为字母表前$m$个字符, 求一个$m$排列$pos$, 使得$\sum\limits_{i=2}^n|{pos}_{s_{i-1}}-{pos}_{s_{i}}|$最小. 状压$dp$, 费用提前计算一下, 预处理$cost_{i,j}$表示与字符$i$相连的状态为$j$时的方案数 总复杂度是$O(n 2^n)$ #include <iostream> #include <sstream> #include <algorithm> #inc…
题目链接:http://codeforces.com/contest/831/problem/B 题目意思:给出两个长度为26,由小写字母组成的字符串s1和s2,对于给出的第三个字符串s3,写出对应s1中字符在s2中的映射.如果是大写字母,最终输出也是大写字母:如果是数字,保留不做任何更改 题目解析:这里主要用了map<int, int> 来记录s1中的key,value 值,key是字母经处理后的对应数字形式,value是字母对应的位置 调试得比较久,用 map用得少,不熟悉哇~~   &g…
作者:zifeiy 标签:状压DP,子集划分DP 题目链接:https://codeforces.com/contest/1238/problem/E 题目大意: 给你一个长度为 \(n(n \le 10^5)\) 的字符串s和 \(m(m \le 20)\) ,这个字符串由前 \(m\) 个小写字母组成. 现在你要找一个前 \(m\) 个字符的一个排列p,在这个排列p的基础上生成字符串s,并计算总代价. 代价的计算过程是: 比如我现在已经生成了字符串s的前i个字符 \(s_{1..i}\) ,…
题目链接:点击打开链接 键盘移位了,问输出相应的字母 #include <cstdio> #include <cstring> char a[105]; char b[3][11] = {"qwertyuiop","asdfghjkl;","zxcvbnm,./"}; int main() { scanf("%s", a); if(a[0] == 'R') { scanf("%s",…
题意:给定一个键盘,然后一行字母,和一个字符,代表把那一行字母在键盘上左移还是右移一位. 析:没什么好说的,直接暴力就好. 代码如下: #include<bits/stdc++.h> using namespace std; typedef long long LL; char s1[] = "qwertyuiop"; char s2[] = "asdfghjkl;"; char s3[] = "zxcvbnm,./"; char s…
题目链接:传送门 思路: 题目中的m为20,而不是26,显然在疯狂暗示要用状压来做. 考虑状压字母集合.如果想要保存字母集合中的各字母的顺序,那就和经典的n!的状态的状压没什么区别了,时间复杂度为O(m22m),是不可行的,所以本题肯定有更好的做法. 考虑不保存字母集合中各字母的顺序.那么问题来了,新加入一个字母后,要如何计算这个新的字母对slowness产生的影响呢? 不妨设当前已经被选过的字母集合为i(0 ≤ i ≤ (1<<m)),当前要加入的字母j(0 ≤ j < m),且(i&…
题意:有m种小写字符,给定一个长为n的序列,定义编辑距离为序列中相邻两个字母位置差的绝对值之和,其中字母位置是一个1到m的排列 安排一种方案,求编辑距离最小 n<=1e5,m<=20 思路:刚开始不会算贡献,觉得一定要把具体的排列搞出来才能做 其实pos[s[i-1]]和pos[s[i]]之差可以看成字符s[i-1]和字符s[i]被选择的时间的差 也就是说只有一个没有被选,另一个被选的情况下每次都会累计这样的字母对数的贡献 #include<bits/stdc++.h> using…
(做题方式:瞟题解然后码) 1238E. Keyboard Purchase \(\texttt{Difficulty:2200}\) 题意 给你一个长度为 \(n\) 的由前 \(m\) 个小写字母组成的字符串 \(s\) ,定义一个 \(m\) 个字母的排列 \(t\) 的代价为 \(\sum_{i=2}^n |pos_{s_i}-pos_{s_i-1}|\) ,其中 \(pos_c\) 表示 \(c\) 在 \(t\) 中的位置.求最小的代价. \(n\le 10^5, m\le 20\)…
目录 Contest Info Solutions A. Prime Subtraction B. Kill 'Em All C. Standard Free2play D. AB-string E. Keyboard Purchase F. The Maximum Subtree Contest Info Practice Link Solved A B C D E F G 6/7 O O O O Ø Ø - O 在比赛中通过 Ø 赛后通过 ! 尝试了但是失败了 - 没有尝试 Solution…