TC-SRM391-div2-SortingGame(BFS,STL)
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)的更多相关文章
- POJ 3126 Prime Path(BFS算法)
思路:宽度优先搜索(BFS算法) #include<iostream> #include<stdio.h> #include<cmath> #include< ...
- Cleaning Robot (bfs+dfs)
Cleaning Robot (bfs+dfs) Here, we want to solve path planning for a mobile robot cleaning a rectangu ...
- nyoj 21三个水杯(BFS + 栈)
题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=21 思想: 看了一下搜索就来写了这题(BFS 找出最短路径 所以用此来进行搜索) 这题在 ...
- HDU 1026 Ignatius and the Princess I(BFS+优先队列)
Ignatius and the Princess I Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d &am ...
- POJ 3669 Meteor Shower (BFS+预处理)
Description Bessie hears that an extraordinary meteor shower is coming; reports say that these meteo ...
- hdu-1026(bfs+优先队列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1026 题意:输入n,m和一个n*m的矩阵, .表示通路: x表示墙: n表示有一个怪物,消灭它需要n个 ...
- HDU 3533 Escape(BFS+预处理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3533 题目大意:给你一张n* m的地图,人在起点在(0,0)要到达终点(n,m)有k(k<=10 ...
- CSU 1726: 你经历过绝望吗?两次!(bfs+优先队列)
传送门: http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1726 1726: 你经历过绝望吗?两次! Submit Page Summar ...
- Meteor Shower POJ - 3669 (bfs+优先队列)
Meteor Shower Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26455 Accepted: 6856 De ...
随机推荐
- CSP-S 2019 杂记
CSP-S 2019 游记 update 2019.11.18 考完后的第一感受 update 2019.11.24 我校某优秀学子把全SD的选手程序全测了一遍(太狠了,于是就知道了大概的惨淡成绩,大 ...
- # Pycharm打造高效Python IDE
Pycharm打造高效Python IDE 建议以scientific mode运行,在科学计算时,可以方便追踪变量变化,并且会提示函数的用法,比普通模式下的提示更加智能,一般在文件中引入了numpy ...
- 版本控制器之SVN(一)
通常软件开发由多人协作开发,如果对代码文件.配置文件.文档等没有进行版本控制,将会出现很多问题: 备份多个版本,占用磁盘空间大 解决代码冲突困难 容易引发BUG 难于追溯问题代码的修改人和修改时间 难 ...
- python_操作MySQL 初解 之__<类方法调用并 增-删-改-查>
文件一: 调用(sqls文件) # 导入模块 import pymysql from sqls import * # 创建类 class KaoShi(object): # 初始化 def __ini ...
- Spring配置redis及使用
一.redis简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库 Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用. ...
- sql server 函数详解(4)日期和时间函数
时间和日期函数第一部分 时间和日期函数第二部分
- iis 8.0 HTTP 错误 404.3 server 2012
最近在学习WCF,发现将网站WCF服务放到IIS上时不能正常运行,从网上搜了一下: 解决方法,以管理员身份进入命令行模式,运行: "%windir%\Microsoft.NET\Framew ...
- 【lucene】一个简单的招聘网站的建立
1.建立索引库: 核心代码如下 package com.tabchanj.job.index; import java.util.ArrayList; import java.util.HashMap ...
- python如何判断字符串是否以某个字母或者数字结尾
1.如果是对某个确定的字符或者数字进行判断,可以直接使用endswith()方法 # 判断str_a是否以‘A’结尾 str_a = '20190813A' print(str_a.endswith( ...
- vim简明教程--半小时从入门到精通
https://download.csdn.net/download/qccz123456/10567716 vim三种模式:命令模式.插入模式.底行模式.使用ESC.i.:切换模式. vim [路径 ...