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. 协程+IO切换+小爬虫

    from gevent import monkeymonkey.patch_all() import geventimport requests def f1(url): print(f'GET:{u ...

  2. Bicolored RBS CodeForces - 1167D (括号)

    建树, 然后高度最大值的最小值显然为$\lceil \frac{dep}{2}\rceil$, 将$>\frac{dep}{2}$的全部分出去即可. #include <sstream&g ...

  3. 通过设置访问密码查看Tomcat服务器运行状态

    安装tomcat 设置访问manager用户名,密码 vim /usr/local/tomcat9/conf/tomcat-users.xml # 设置访问manager用户名,密码 # 在倒数第二行 ...

  4. centos查看实时网络带宽占用情况方法【转】

    Linux中查看网卡流量工具有iptraf.iftop以及nethogs等,iftop可以用来监控网卡的实时流量(可以指定网段).反向解析IP.显示端口信息等. centos安装iftop的命令如下: ...

  5. vscod插件

    Babel JavaScript Code Runner Debugger for Chrome ESLint HTML CSS Support HTML Snippets background  J ...

  6. python 短信邮件

    短信邮件 hashlib​- md5:非对称加密,不可逆的,经常用于加密密码然后存储​- 示例:​ ```python import hashlib ​ # 创建hash对象,可以指定需要加密的字符串 ...

  7. 多线程编程-- part 5.2 JUC锁之Condition条件

    1.Condition介绍 Condition的作用是对锁进行更精确的控制.Condition中的await()方法相当于Object的wait()方法,Condition中的signal()方法相当 ...

  8. kafka核心原理总结

    新霸哥发现在新的技术发展时代,消息中间件也越来越受重视,很多的企业在招聘的过程中着重强调能够熟练使用消息中间件,所有做为一个软件开发爱好者,新霸哥在此提醒广大的软件开发朋友有时间多学习. 消息中间件利 ...

  9. MyBatis--把SQL带进Java

    简单来看软件服务的工作流程:用户端界面操作请求<---->本地处理|远程服务程序拦截转发请求<---->服务端逻辑功能实现<--MyBatis用在这里-->数据库. ...

  10. 【小知识】比较 x^y 和 y^x 的大小

    往前翻几个编号相邻的题目翻到了这么一道题,感觉很好奇就做了一下 (upd:我下午问了下出题人做法,他就把题隐藏了……这不太友好啊……所以我补一下题意:) 题意 给你两个整数 $x$ 和 $y$,求 $ ...