100642D GYM

原创 2016年08月31日 08:39:12

完全是抄的。。。搜索水平还要加强,现在跟小学生没什么区别。

Problem C: Hexagon Perplexagon
A well known puzzle consists of 7 hexagonal pieces, each with the numbers 1 through 6 printed on the
sides. Each piece has a di erent arrangement of the numbers on its sides, and the object is to place the
7 pieces in the arrangement shown below such that the numbers on each shared edge of the arrangement
are identical. Figure (a) is an example of one solution:
(a) Example Solution
(b) Position Notation for Output
Rotating any solution also gives another trivially identical solution. To avoid this redundancy, we will
only deal with solutions which have a 1 on the uppermost edge of the central piece, as in the example.
Input
The rst line of the input le will contain a single integer indicating the number of test cases. Each case
will consist of a single line containing 42 integers. The rst 6 represent the values on piece 0 listed in
clockwise order; the second 6 represent the values on piece 1, and so on.
Output
For each test case, output the case number (using the format shown below) followed by either the phrase
No solution
or by a solution speci cation. A solution speci cation lists the piece numbers in the order
shown in the Position Notation of Figure (b). Thus if piece 3 is in the center, a 3 is printed rst; if
piece 0 is at the top, 0 is printed second, and so on. Each test case is guaranteed to have at most one
solution.
Sample Input
2
3 5 6 1 2 4 5 1 2 3 6 4 2 3 5 4 1 6 3 1 5 6 2 4 5 4 1 3 6 2 4 2 3 1 5 6 3 6 1 2 4 5
6 3 4 1 2 5 6 4 3 2 5 1 6 5 3 2 4 1 5 4 6 3 2 1 2 5 6 1 4 3 4 6 3 5 2 1 1 3 5 2 6 4
Sample Output
Case 1: 3 0 5 6 1 4 2
Case 2: No solution
先开始想的方法是枚举,通过全排列枚举顺序,再枚举旋转次数,这样的时间复杂度是O(7!*6*6*6*6*6*6*6),
只只要是no solution的情况就会跑一边,而且还是多测。。。一个no solution 跑了30s。。。
还还是算了吧。
看看见了一种靠谱的搜索方法:因为题目中说到了中间的方格一必须朝上,那么旋转即可(中间的方格不用枚举旋转次数)然后旋转其余的6个方格:这里只需要将其下面的数字和中间那块对齐即可,对齐之后如果不满足其他边界相等,则continue(这个格子放这个方块不可以,枚举下一个方块),在可以放置方块之后将used=1(*),
然后dfs下一个格子,返回值是bool,当这个格子能放下某一个方格则返回true,当放置了7个之后说明成功也返回trtrue,否则在枚举了所有的方格之后都不可以返回false,返回上一个格子,枚举上一个格子的其他方案,当枚举完第一个格子的所有方案时都不行,则退出递归。
时时间复杂度:一共有7!个状态数,每枚举出一个状态都要转6*6*6*6*6*6次,复杂度好像是一样的,但是跑得很快不到1s,大概是旋转的时候包含了剪枝,转的时候经常会对不齐。
从vjudge上抄的。。。自己弱的不行
代代码:来自vjudge
#include <set>
#include <map>
#include <queue>
#include <deque>
#include <cstdio>
#include <string>
#include <vector>
#include <math.h>
#include <time.h>
#include <utility>
#include <cstdlib>
#include <sstream>
#include <cstring>
#include <stdio.h>
#include <iomanip>
#include <iostream>
#include <algorithm>
using namespace std;
const int dx[]={0,3,4,5,6,1,2},dy[]={0,5,6,1,2,3,4};
const int pos[]={0,4,5,6,1,2,3};
int n,stamp,T;
int used[8],b[8];
struct round{//还可以这么用
    int a[10];
    void scan()
    {
        for(int i=1;i<=6;i++)
            cin>>a[i];
    }
    void rot()
    {
        int temp=a[1];
        for(int i=1;i<6;i++)
            a[i]=a[i+1];
        a[6]=temp;
    }
}a[8],t[8];
bool dfs(int d)
{
    if(d==7)
    {
        for(int i=0;i<7;i++)
            cout<<b[i]<<" ";
        cout<<endl;
        return true;
    }
    for(int i=0;i<7;i++)
    {
        if(used[i])continue;
        t[d]=a[i];
        b[d]=i;
        if(d==0)
            while(t[0].a[1]!=1)t[0].rot();
        else
        {
            while(t[d].a[pos[d]]!=t[0].a[d])t[d].rot();
            if(d==6&&t[d].a[dx[d]]!=t[1].a[dy[1]])continue;
            if(d>1&&t[d].a[dy[d]]!=t[d-1].a[dx[d-1]])continue;
        }
        used[i]=1;
        if(dfs(d+1))return true;
        used[i]=0;
    }
    return false;
}
int main()
{
    cin>>T;
    for(int i=1;i<=T;i++)
    {
        memset(used,0,sizeof(used));
        for(int i=0;i<7;i++)
        {
            a[i].scan();
        }
        printf("Case %d: ",++stamp);
        if(!dfs(0))
        {
            cout<<"No solution"<<endl;
        }
    }
    return 0;
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

Ubuntu安装Pyenv+Anaconda2+PyCharm+OpenAI-gym+Cuda+TensorFlow (一)

折腾了三天整,终于把想要搞gym的一整套环境弄利索了,这里记录下整套开发环境的搭建和这一过程中遇到的一些问题。一. 安装环境当前系统配置:   1. 系统:ubuntu14.04 LTS   2....
  • GH234505
  • GH234505
  • 2016年12月28日 18:22
  • 3067

强化学习仿真环境gym搭建

先说说我为什么对强化学习有兴趣了,从大数据到机器学习、深度学习,现在我对智能化真的产生兴趣了,希望有一天能做出自己的机器人。 然而,学习的第一步就是环境,所以首先搭建一个gym的仿真环境。现在大家用...
  • qq_36330643
  • qq_36330643
  • 2018年01月19日 20:19
  • 282

Gym - 101492 E. Teamwork(过河问题)

题意: n个人要从a到b,每个人过河需要的时间不同,,只有一根绳子,每次过河需要一根绳子,每次最多只能同时过两人,,,如果同时过两人,过河时间取两人中最大的。 思路: 按过河时间排序后 有两种...
  • exp1ore
  • exp1ore
  • 2017年08月27日 19:48
  • 266

CodeForces Gym100935 水题专场

CodeForces Gym100935  比赛链接:CodeForces Gym100935 A Time 水题~ #include #include #include #include ...
  • ACMore_Xiong
  • ACMore_Xiong
  • 2016年08月10日 13:23
  • 874

Fastlane的gym指令

新浪微博:东门兜2017年3月5日最新文章。1.完成的功能是:打包工程,生成archive和ipa文件2.安装Fastlane安装Fastlane3.输入fastlane gym -h查看帮助:4.分...
  • yyh3663477
  • yyh3663477
  • 2017年03月05日 16:38
  • 1158

Gym - 101630C C. Connections

题目链接:https://odzkskevi.qnssl.com/c0c059d5732d43b0fe84c99caa5fb80f?v=1512491182 Problem C. Connection...
  • a15110103117
  • a15110103117
  • 2017年12月09日 16:30
  • 95

OpenAI gym的安装

在ubuntu1404安装gym的步骤 Step1:将gym克隆到计算机上: git clone https://github.com/openai/gym.git 如果你的电脑没有安装git,...
  • lingyun_csdn
  • lingyun_csdn
  • 2018年01月31日 00:04
  • 47

OpenAI Gym使用

OpenAI Gym
  • yeqiang19910412
  • yeqiang19910412
  • 2017年09月14日 09:39
  • 347

OpenAI_gym的官网案例

OpenAI_gym的官网案例Tags: openAI_gym创建,渲染,随机选择动作当然这只是gym的一个游戏,还有一些如: MountainCar-v0, MsPacman-v0 (require...
  • Charel_CHEN
  • Charel_CHEN
  • 2017年11月23日 08:46
  • 304

增强学习和OpeAI Gym的介绍:基础增强学习问题的演示

编者注:想要深入学习增强学习,请查看Marcos Campos在2017年9月17 - 20日于旧金山举行的O’Reilly人工智能会议上所做的“增强学习介绍”辅导课。你可以在Justin Franc...
  • zkh880loLh3h21AJTH
  • zkh880loLh3h21AJTH
  • 2017年10月13日 00:00
  • 597
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:100642D GYM
举报原因:
原因补充:

(最多只允许输入30个字)