问题

https://vjudge.net/problem/UVA-517

分析

每次都循环到字典序最小的时候记录。
一共最多有2162^16216种,因为每种状态都变到字典序最小的时候,所以实际的远小于2162^16216,使用map保存。
先求出一次循环时的长度T,起始点a,终止点b,T=b-a, 答案是第(s-a)%T+a种状态。
注意序号:输入时数组中是 0,1,2…i,i+1,i+2,转到二进制后是0,1,2…i-2,i-1,i,i+1, 不能是i+2,i+1,i,i-1,i-2(因为这样就反向了,相当于翻转了)

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <map>
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
typedef long long LL;
const int maxn=(1<<15)+100;
int n,s,kase=0,vis[maxn],rule[8];
char a[100];
vector<int> rec;inline int minlexico(int temp){int t=temp,flag=0;for(int i=0;i<n;++i){flag=temp>>(n-1);temp&=(1<<(n-1))-1;temp<<=1;temp|=flag;if(temp<t) t=temp;}return t;
}inline int getindex(int c1,int c2,int c3){return (c1<<2)+(c2<<1)+c3;
}int solve(int start){int k=1,op=0,ed=0;for(;;++k){int rewriting=0;for(int i=0;i<n;++i){int c1=((i+2)>=n?(start&(1<<(i+2-n))):(start&(1<<(i+2))))?1:0;int c2=(start&(1<<i))?1:0;int c3=((i-1)>=0?(start&(1<<(i-1))):(start&(1<<(i-1+n))))?1:0;rewriting|=(rule[getindex(c1,c2,c3)]<<i);}rewriting=minlexico(rewriting);rec.push_back(rewriting);if(s==k) return rewriting;if(vis[rewriting]!=-1){op=vis[rewriting];ed=k;break;}start=rewriting;vis[rewriting]=k;}return rec[(s-op)%(ed-op)+op];
}int main(void){while(scanf("%d",&n)==1){rec.clear();memset(vis,-1,sizeof(int)*((1<<n)+10));int start=0;scanf("%s",a);for(int i=0;i<n;++i){if(a[i]=='b'){start|=(1<<(n-1-i));}}start=minlexico(start);vis[start]=0;rec.push_back(start);char ch[10];for(int i=0;i<8;++i) {scanf("%s",ch);rule[getindex(ch[0]-'a',ch[1]-'a',ch[2]-'a')]=ch[3]-'a';}scanf("%d",&s);int ans=solve(start);for(int i=n-1;i>=0;--i){if(ans&(1<<i)){putchar('b');}else putchar('a');}printf("\n");}return 0;
}

Word UVA - 517 状态压缩 暴力搜索相关推荐

  1. 3690状态压缩+暴力

    题意:       给你一个矩阵,上面只有*和0(最大1000*1000),然后有t(最大100)组询问,每组询问给你一个小矩阵(最大50*50),问这t个矩阵中有多少个是在大矩阵中出现的. 思路: ...

  2. UVA 11825 状态压缩DP+子集思想

    很明显的状态压缩思想了.把全集分组,枚举每个集合的子集,看一个子集是否能覆盖所有的点,若能,则f[s]=max(f[s],f[s^s0]+1).即与差集+1比较. 这种枚举集合的思想还是第一次遇到,果 ...

  3. 状态压缩 + 暴力 HDOJ 4770 Lights Against Dudely

    题目传送门 题意:有n*m的房间,'.'表示可以被点亮,'#'表示不能被点亮,每点亮一个房间会使旁边的房间也点亮,有意盏特别的灯可以选择周围不同方向的房间点亮.问最少需要多少灯使得所有房间点亮 分析: ...

  4. POJ2688状态压缩(可以+DFS剪枝)

    题意:       给你一个n*m的格子,然后给你一个起点,让你遍历所有的垃圾,就是终点不唯一,问你最小路径是多少? 思路:       水题,方法比较多,最省事的就是直接就一个BFS状态压缩暴搜就行 ...

  5. HDU 1557 权利指数 国家压缩 暴力

    HDU 1557 权利指数 状态压缩 暴力 ACM 题目地址:HDU 1557 权利指数 题意:  中文题,不解释. 分析:  枚举全部集合,计算集合中的和,推断集合里面的团体是否为关键团队. 代码: ...

  6. 搜索问题之状态空间搜索(状态压缩+记忆化搜索+ BFS)

    文章目录 1. 前言 2. 问题举例(九宫格问题) 3. 问题分析 3.1 状态编码与解码 3.2 哈希映射 3.3 集合判重 4. 问题实现 推荐阅读 1. 前言 之前介绍的回溯法常用于 解空间的搜 ...

  7. 【每日一题Day95】LC1815得到新鲜甜甜圈的最多组数 | 状态压缩dp 记忆化搜索

    得到新鲜甜甜圈的最多组数[LC1815] 有一个甜甜圈商店,每批次都烤 batchSize 个甜甜圈.这个店铺有个规则,就是在烤一批新的甜甜圈时,之前 所有 甜甜圈都必须已经全部销售完毕.给你一个整数 ...

  8. 【AcWing】数位统计DP、树形DP、状态压缩DP、记忆化搜索

    [AcWing]数位统计DP.树形DP.状态压缩DP.记忆化搜索 一.数位统计DP 二.状态压缩DP 三.树形DP 四.记忆化搜索 一.数位统计DP 计数问题 给定两个整数 a 和 b,求 a 和 b ...

  9. 【算法练习】动态规划/搜索/状态压缩 百练poj4124:海贼王之伟大航路

    参考链接:https://www.twblogs.net/a/5b8ceaac2b7177188336e93d/zh-cn 题目链接:http://bailian.openjudge.cn/pract ...

最新文章

  1. 【iCore4 双核心板_ARM】例程五:SYSTICK定时器 实验——定时点亮LED
  2. 享受便利的应用方式—Linux系统三则超酷技巧
  3. android垂直排列元素_Android弹性布局(FlexboxLayout)
  4. luogu P3234 [HNOI2014]抄卡组
  5. git fork clone 区别_我的Git笔记
  6. 从Unreal Engine 3到Unreal Engine 4
  7. mapgis67安装输入计算机名称,MapGIS67操作手册(1-6)MapGIS67 安装使用注意事项
  8. triu matlab,matlab triu
  9. jspstudy启动mysql失败_JspStudy配置Jspxcms安装教程,以及数据库设置;
  10. 单片机课设中期报告_本科毕业设计中期检查报告.doc
  11. cv::Mat转换为QImage错误
  12. 23上教资开始注册!详细报名流程看这一篇就够了!(建议收藏)
  13. 论文笔记:BPR-Bayesian Personalized Ranking from Implicit Feedback | 推荐系统BPR算法分析
  14. sincerit 王者荣耀(01背包)
  15. logo设计的忌讳与要点有哪些
  16. 怎么在html文件中写css文件,html头文件中css怎么写?
  17. linux ghost视频教程,Linux攻略 用Ghost备份Linux系统的方法
  18. 隔行的BT.656标准信号
  19. C++重温笔记(十二): C++多文件编程
  20. position属性:absolute

热门文章

  1. 托业考试 与 托福考试
  2. 数据质量测试:测试数据有效性和准确性的方法
  3. Win11怎么分区硬盘?Win11硬盘分区详细教程
  4. Java 仿 Excel 公式计算
  5. 如何将WPS转换成office,WPS转office的转换方法
  6. wxPython:python首选的GUI库
  7. TA 认识 unity shader最基本的代码结构与书写01
  8. 【PS教程】旧照片修复技巧
  9. O2O常见的结算模式是什么 O2O线上线下营销策略有哪些?
  10. 大家一起来玩游戏-24点(递归)