Allowed Letters CodeForces - 1009G(状压思维)
题意:
给出一个字符串 给出几个定点必须是哪个字母(或者是几个字母中的一个) 然后求在满足所有定点后的最小字符串
解析:
没错 这题是暴力 用状压暴力
“a - f” 用”0 - 5“ 这几个数字代替 输入字符串 num[i]为字母i的个数,然后输入定点必须为哪个字母,ti[i]中用六位二进制来存储当前位置i的可以放的字母
1代表放 0不放
设cnt = 1<<6 - 1; 即为所有状态的上界
然后从后向前遍历一遍,统计对于位置i到n 状态k还需要多少个 sum[i][j]来表示
然后暴力就好了。。就是从前向后遍历每一个位置,对于位置i 我们遍历所有字母挨个试,又对于每一个字母,统计一下在这个位置放了这个字母后,我们去检查是否还能满足后边的所有状态(挨个状态遍历一遍求出当前状态所需要的字母总和判断一下) 如果可以 则下一个位置 不可以下一个试字母 如果所有字母都不符合 那就impossible
#include <bits/stdc++.h>
#define mem(a, b) memset(a, b, sizeof(a))
using namespace std;
const int maxn = , INF = 0x7fffffff, cnt = (<<) - ;
char str[maxn];
int num[], ti[maxn*], sum[maxn][cnt+], zt[cnt+];
int m;
vector<char> v; int main()
{
cin>> str;
int n, len;
n = len = strlen(str);
for(int i=; i<len; i++)
num[str[i]-'a']++; //统计每个字母的数量
cin>> m;
int id;
for(int i=; i<m; i++)
{
cin>> id >> str;
len = strlen(str);
for(int j=; j<len; j++)
{
ti[id-] |= (<<(str[j] - 'a')); //统计能放在位置id-1 的字母集合
}
}
for(int i=; i<n; i++)
if(!ti[i]) ti[i] = cnt; //如果为0 说明没有被指定 所以都可以放
for(int i=n-; i>=; i--) //从后向前遍历一遍,统计对于位置i到n 状态k还需要多少个
{
for(int j=; j<=cnt; j++) //对当前i 遍历所有状态
{
if((ti[i] & j) == ti[i]) //子集
zt[j]++;
sum[i][j] = zt[j];
}
}
int _sum = ;
for(int i=; i<n; i++) //遍历每个位置 暴力判断即可
{
int flag1 = ;
for(int j=; j<; j++)
{
int flag2 = ;
if(!num[j] || (ti[i]&(<<j)) == ) continue;
num[j]--;
for(int k=; k<=cnt; k++)
{
_sum = ;
for(int r=; r<; r++)
if(k & (<<r))
_sum += num[r];
if(_sum < sum[i+][k])
{
flag2 = ; break;
}
}
if(flag2)
{
flag1 = ; v.push_back('a'+j); break;
}
num[j]++;
}
if(!flag1)
return puts("Impossible"), ;
}
for(int i=; i<v.size(); i++)
{
printf("%c", v[i]);
}
cout<<endl; return ;
}
Allowed Letters CodeForces - 1009G(状压思维)的更多相关文章
- CodeForces 11D(状压DP 求图中环的个数)
Given a simple graph, output the number of simple cycles in it. A simple cycle is a cycle with no re ...
- UVA 10318 Security Panel(DFS剪枝 + 状压 + 思维)题解
题意:给一个r*c的矩阵开关(初始全打开的),每次按下一个开关都会改变3*3范围内的有*的地方的状态,问你最少几步能让开关全闭上,按升序输出按哪些按钮 思路:每个按钮至多按一下,按按钮的顺序和结果无关 ...
- Vladik and cards CodeForces - 743E (状压)
大意: 给定序列, 求选出一个最长的子序列, 使得任选两个[1,8]的数字, 在子序列中的出现次数差不超过1, 且子序列中相同数字连续. 正解是状压dp, 先二分转为判断[1,8]出现次数>=x ...
- Clear The Matrix CodeForces - 903F (状压)
大意: 给定4行的棋盘以及4种大小的正方形方块, 每种各有一定花费, 每次可以选一种方块放在棋盘上, 棋盘对应格子全变为'.', 求最少花费使得棋盘全部变成'.' 状压基本操作练习, 状态取12位, ...
- Pollywog CodeForces - 917C (状压)
链接 大意: 一共n个格子, 初始$x$只蝌蚪在前$x$个格子, 每次最左侧的蝌蚪向前跳, 跳跃距离在范围[1,k], 并且每只蝌蚪跳跃都有一定花费, 有$q$个格子上有石头, 若有蝌蚪跳到某块石头上 ...
- Codeforces 678E 状压DP
题意:有n位选手,已知n位选手之间两两获胜的概率,问主角(第一个选手)最终站在擂台上的概率是多少? 思路:一看数据范围肯定是状压DP,不过虽然是概率DP,但是需要倒着推:我们如果正着推式子的话,初始状 ...
- Codeforces 8C 状压DP
题意:有个人想收拾行李,而n个物品散落在房间的各个角落里(n < 24).现在给你旅行箱的坐标(人初始在旅行箱处),以及n个物品的坐标,你一次只能拿最多两个物品,并且拿了物品就必须放回旅行箱,不 ...
- Keyboard Purchase CodeForces - 1238E (状压)
大意: 给定串$s$, 字符集为字母表前$m$个字符, 求一个$m$排列$pos$, 使得$\sum\limits_{i=2}^n|{pos}_{s_{i-1}}-{pos}_{s_{i}}|$最小. ...
- Codeforces 1215E 状压DP
题意:给你一个序列,你可以交换序列中的相邻的两个元素,问最少需要交换多少次可以让这个序列变成若干个极大的颜色相同的子段. 思路:由于题目中的颜色种类很少,考虑状压DP.设dp[mask]为把mask为 ...
随机推荐
- CPP2-基础部分(1)
参考自<c++ primer 5th zh>,本系列将会接着将<The C++ Programming Language 4th Ed><c++ primer plus ...
- jqgrid 宽度自适应
当jqgrid所在操作区宽度大于了给各列设置宽度之和时,此时表格的宽度未铺满操作区,效果不理想 此时,可以通过配置宽带自适应来现实表格内容自动铺满. 配置属性 shrinkToFit:ture 若要启 ...
- Docker中查看Mysql数据库中的各环境参数
通过官方的文档可以看到运行MySQL容器的命令是: docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=mypwd -d mysql:tag 如:d ...
- 2《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——操作文件
已经学习了基本的命令,现在是时候学习操作文件了,这也是命令行的重要任务.还是基于本教程的事先规定,本教程是入门级的,不要求熟悉类似编辑文本的程序(这些文本编辑程序,将在下个系列教程中介绍, Learn ...
- c# 无边框窗体的边框阴影
Windows API: using System; using System.Collections.Generic; using System.ComponentModel; using Syst ...
- zabbix问题之snmp监控端口流量断图
zabbix之snmp监控端口断图问题 在使用zabbix的snmp方式的监控端口流量时,某一个图总是断断续续的(被监控设备有较大的端口流量),经常会出现几分钟内没有图像的问题. 端口流量断图原因: ...
- 如何解决markdown中图片上传的问题
1.第一种方式(图床) 1.1 google中的插件-新浪微博图床 2.第二种方式,操作流程如下 2.1 下载一个有道云笔记客户端 2.2 然后把图片通过有道云笔记分享出来,见下动态图 3.总结一下 ...
- Visual Studio控制台程序输出窗口一闪而过的解决方法
转载大牛的博客,自己也遇到了类似的问题,解决方法很详细,也很管用 刚接触 Visual Studio的时候大多数人会写个Hello World的程序试一下,有的人会发现执行结束后输出窗口会一闪而过 ...
- Configuration Section Designer for VS2017
Configuration Section Designer是在Visual Studio中设计符合.Net配置体系配置文件和代码的神器.然而,它的源码已经很久不维护了.现在在新的VS2017中无法使 ...
- 记录:测试本机下使用 GPU 训练时不会导致内存溢出的最大参数数目
本机使用的 GPU 是 GeForce 840M,2G 显存,本机内存 8G. 试验时,使用 vgg 网络,调整 vgg 网络中的参数,使得使用对应的 batch_size 时不会提示内存溢出.使用的 ...