Problem Statement for SortingGame


Problem Statement

In The Sorting Game, you are given a sequence containing a permutation of the integers between 1 and n, inclusive. In one move, you can take any k consecutive elements of the sequence and reverse their order. The goal of the game is to sort the sequence in ascending order. You are given a int[] board describing the initial sequence. Return the fewest number of moves necessary to finish the game successfully, or -1 if it's impossible.

Definition

Class:
SortingGame

Method:
fewestMoves

Parameters:
int[], int

Returns:
int

Method signature:
int fewestMoves(int[] board, int k)

(be sure your method is public)

Constraints

-
board will contain between 2 and 8 elements, inclusive.

-
Each integer between 1 and the size of board, inclusive, will appear in board exactly once.

-
k will be between 2 and the size of board, inclusive.

Examples

0)

{1,2,3}
3
Returns: 0

The sequence is already sorted, so we don't need any moves.

1)

{3,2,1}
3
Returns: 1

We can reverse the whole sequence with one move here.

2)

{5,4,3,2,1}
2
Returns: 10

This one is more complex.

3)

{3,2,4,1,5}
4
Returns: -1

4)

{7,2,1,6,8,4,3,5}
4
Returns: 7

This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2010, TopCoder, Inc. All rights reserved.

This problem was used for:
Single Round Match 397 Round 1 - Division I, Level One
Single Round Match 397 Round 1 - Division II, Level Two

思路:

因为每组数据最多只有8个数,可以直接进行BFS

在BFS过程中遇到了一个问题:如何记录状态?这是一个最多8维的状态

我想法到了用HASH来解决这个问题,可是构造不出这个HASH函数

实在没办法了,找到了官方题解,竟然发现了一个map的奇技淫巧

map<vector<int>,int>

这TM也行。。。是在下输了。。。。

C++是最好的语言!!!

代码:

  1 #include <bits/stdc++.h>
2
3 using namespace std;
4
5 class SortingGame
6 {
7 public:
8 int fewestMoves(vector <int> board, int k)
9 {
10 queue<vector<int>> q;
11 map<vector<int>,int> vis;
12 q.push(board);vis[board]=0;
13 while(!q.empty()){
14 cout<<11111<<endl;
15 vector<int> vec=q.front();
16 q.pop();
17 int num=vis[vec];
18 int r=vec.size();
19 int i=0;
20 for(i=0;i<r-1;i++){
21 if(vec[i+1]<vec[i]) break;
22 }
23 if(i==r-1) return num;
24 for(int i=0;i+k<=r;i++){
25 vector<int> tmp=vec;
26 reverse(tmp.begin()+i,tmp.begin()+i+k);
27 if(vis.count(tmp)==0){
28 q.push(tmp);
29 vis[tmp]=num+1;
30 }
31 }
32 }
33 return -1;
34 }
35 };

TC-SRM391-div2-SortingGame(BFS,STL)的更多相关文章

  1. POJ 3126 Prime Path(BFS算法)

    思路:宽度优先搜索(BFS算法) #include<iostream> #include<stdio.h> #include<cmath> #include< ...

  2. Cleaning Robot (bfs+dfs)

    Cleaning Robot (bfs+dfs) Here, we want to solve path planning for a mobile robot cleaning a rectangu ...

  3. nyoj 21三个水杯(BFS + 栈)

    题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=21 思想: 看了一下搜索就来写了这题(BFS 找出最短路径 所以用此来进行搜索) 这题在 ...

  4. HDU 1026 Ignatius and the Princess I(BFS+优先队列)

    Ignatius and the Princess I Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d &am ...

  5. POJ 3669 Meteor Shower (BFS+预处理)

    Description Bessie hears that an extraordinary meteor shower is coming; reports say that these meteo ...

  6. hdu-1026(bfs+优先队列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1026 题意:输入n,m和一个n*m的矩阵, .表示通路: x表示墙: n表示有一个怪物,消灭它需要n个 ...

  7. HDU 3533 Escape(BFS+预处理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3533 题目大意:给你一张n* m的地图,人在起点在(0,0)要到达终点(n,m)有k(k<=10 ...

  8. CSU 1726: 你经历过绝望吗?两次!(bfs+优先队列)

    传送门: http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1726 1726: 你经历过绝望吗?两次! Submit Page    Summar ...

  9. Meteor Shower POJ - 3669 (bfs+优先队列)

    Meteor Shower Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26455   Accepted: 6856 De ...

随机推荐

  1. 预约系统(四) 管理页面框架搭建easyUI

    Manage控制器用于管理页面 Index视图为管理页面首页,采用easyUi的后台管理框架 Html头部调用,jquery库,easyui库,easyui.css,icon.css,语言包 < ...

  2. VS Code 配置碰到的问题

    VS Code 呈现缩进参考线以及语法高亮改变 找到 首选项——>设置→搜索renderIntentGuides→将此选项改为true(默认为false),就可以了.

  3. zabbix mongodb 监控添加

    在zabbix 上添加mongodb的监控 由于使用的是zabbix 3.0 所有在模板里面又自己的模板名字叫:Template MongoDB 所以 客户端的配置如下 到配置文件目录 /usr/lo ...

  4. Elasticsearch中文文档,内容不全

    注意 内容不全,这是观看中文文档进行操作的 文档地址 旧版中文文档,部分内容过期 https://www.elastic.co/guide/cn/elasticsearch/guide/current ...

  5. 通用mapper将另外一个同名的表生成在同一个实体及mapper中

    今天遇见了一个在网上都搜索不到的错误,使用通过mapper生成实体及mapper文件时会将另外一个数据库的同名文件生成在一个实体及mapper中,这样就会造成一个实体和mapper中有两个表的字段,经 ...

  6. 判断页面是在移动端还是PC端打开的

    $(function () { var curWwwPath = window.document.location.href; var pathName = window.document.locat ...

  7. GeoJson格式与转换(shapefile)Geotools

    转自:https://blog.csdn.net/cobramonkey/article/details/71124888 作为大数据分析的重要工具,Hadoop在这一领域发挥着不可或缺的作用.有些人 ...

  8. 小米Air 13.3 安装Arch Linux

    0. 前言 最近新买了一台小米Air 13.3,除了但键盘手感外都比较满意.我比较喜欢折腾Linux,但又不想放弃原有的Windows 10 Home,于是在原有的windows 10基础上再安装了A ...

  9. monkeyrunner脚本录制和回放下载

    链接:https://pan.baidu.com/s/1Kye_E9u_WXeppFMlLhr_Cg 提取码:2coy

  10. U-Boot Driver Model领域模型设计 (转)

    需求分析 在2014年以前,uboot没有一种类似于linux kernel的设备驱动模型,随着uboot支持的设备越来越多,其一直受到如下问题困扰: 设备初始化流程都独立实现,而且为了集成到系统,需 ...