Input

文件中包含初始的盘件描述,一共有10行,第i行有i个字符。如果第i行的第j个字符是字母”A”至”L”中的一个,则表示第i行第j列的格子上已经放了零件,零件的编号为对应的字母。如果第i行的第j个字符是”.”,则表示第i行第j列的格子上没有放零件。输入保证预放的零件已摆放在盘件中。

Output

如果能找到解,向输出文件打印10行,为放完全部12个零件后的布局。其中,第i行应包含i个字符,第i行的第j个字符表示第i行第j列的格子上放的是哪个零件。如果无解,输出单独的一个字符串‘No solution’(不要引号,请注意大小写)。所有的数据保证最多只有一组解。

Sample Input

.
..
...
....
.....
.....C
...CCC.
EEEHH...
E.HHH....
E.........

Sample Output

B
BK
BKK
BJKK
JJJDD
GJGDDC
GGGCCCI
EEEHHIIA
ELHHHIAAF
ELLLLIFFFF
 
备注:题面建议大家去BZOJ官网去看,因为格式问题这里的图片只能这么小。BZOJ 1051:http://www.lydsy.com/JudgeOnline/problem.php?id=1501
 
 
 
题解:
  实在没什么好讲的。。。虽然说这次校内的考试中我把80分的写出来了(有10分是忘了No solution。。无语),但是无法保证在考场上能够有如此良好的心态写个2小时!我们取每个图案的每个方向,记以左上角的那个点为原点,记录其他点的相对关系。然后在地图上一个个位置进行判断是否可行。思路并不复杂,但是记录其他点得相对关系这个部分,写得丑的可以写出几10k+,写得好的也要6k。
  但是如果就是这么做的话,只有90分。因为有一个数据点故意卡!我觉得这个数据真的不明觉厉,有种卡得莫名其妙,因为他唯一已经放置的智慧珠在右下方,有且仅有一个,所有前面部分搜的时间特别长,所以要把地图调换一下方向。这谁会这么去想啊!而且即便就是这么做了,其实一样地,如果我把唯一的一个智慧珠放在左下角,是没有任何办法通过的,所以这道题还是存在很多疑问的。
  还有一种做法是Dacing-Link,我没有去了解,可以上网查查,你会发现就查到这一道题了,所以并没有什么意义。
 
代码(90分):
------------------------------------------------------------------------------------------------------

#include <cstdio>
#include <cstdlib>
#define MAXN 15
#define DFS_next if (y == x) DFS(x + 1, 1); else DFS(x, y + 1)

const int a[100][6] = {
{0, 0, 0, 0, 0, 0},

{0, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0}, {0, 1, 1, 0, 0, 0}, {0, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},

{0, 1, 2, 3, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},

{0, 0, 0, 1, 0, 0}, {0, 0, 1, 2, 0, 0}, {0, 1, 1, 1, 0, 0}, {0, 1, 2, 2, 0, 0},
{0, 1, 1, 1, 0, 0}, {0, 0, 1, 2, 0, 0}, {0, 0, 0, 1, 0, 0}, {0, 1, 2, 2, 0, 0},

{0, 0, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},

{0, 1, 2, 2, 2, 0}, {0, 0, 0, 1, 2, 0}, {0, 1, 2, 2, 2, 0}, {0, 0, 0, 1, 2, 0},
{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},

{0, 0, 0, 0, 1, 0}, {0, 1, 1, 2, 3, 0}, {0, 1, 1, 1, 1, 0}, {0, 1, 2, 3, 2, 0},
{0, 1, 1, 1, 1, 0}, {0, 1, 1, 2, 3, 0}, {0, 0, 0, 0, 1, 0}, {0, 1, 2, 2, 3, 0},

{0, 0, 0, 1, 1, 0}, {0, 1, 2, 0, 2, 0}, {0, 1, 1, 1, 0, 0}, {0, 0, 1, 2, 2, 0},
{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},

{0, 0, 0, 1, 1, 0}, {0, 0, 1, 1, 1, 0}, {0, 1, 0, 1, 2, 0}, {0, 1, 2, 2, 1, 0},
{0, 0, 1, 1, 1, 0}, {0, 0, 1, 1, 2, 0}, {0, 1, 1, 2, 2, 0}, {0, 0, 0, 1, 1, 0},

{0, 0, 0, 1, 1, 0}, {0, 1, 2, 2, 3, 0}, {0, 0, 1, 1, 1, 0}, {0, 1, 1, 2, 3, 0},
{0, 0, 1, 1, 1, 0}, {0, 1, 2, 2, 3, 0}, {0, 0, 0, 1, 1, 0}, {0, 1, 1, 2, 3, 0},

{0, 1, 1, 1, 2, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},

{0, 1, 1, 2, 2, 0}, {0, 0, 1, 1, 2, 0}, {0, 0, 1, 1, 2, 0}, {0, 1, 1, 2, 2, 0},
{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},

{0, 0, 0, 0, 1, 0}, {0, 0, 1, 2, 3, 0}, {0, 1, 1, 1, 1, 0}, {0, 1, 2, 3, 3, 0},
{0, 1, 1, 1, 1, 0}, {0, 0, 1, 2, 3, 0}, {0, 0, 0, 0, 1, 0}, {0, 1, 2, 3, 3, 0}
};

const int b[100][6] = {
{0, 0, 0, 0, 0, 0},

{0, 0, 1, 0, 0, 0}, {0, 1, 1, 0, 0, 0}, {0,-1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},

{0, 0, 0, 0, 0, 0}, {0, 1, 2, 3, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},

{0, 1, 2, 0, 0, 0}, {0, 1, 1, 1, 0, 0}, {0, 0,-1,-2, 0, 0}, {0, 0, 0, 1, 0, 0},
{0, 0, 1, 2, 0, 0}, {0, 1, 0, 0, 0, 0}, {0, 1, 2, 2, 0, 0}, {0, 0, 0,-1, 0, 0},

{0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},

{0, 0, 0, 1, 2, 0}, {0, 1, 2, 2, 2, 0}, {0, 0, 0,-1,-2, 0}, {0, 1, 2, 0, 0, 0},
{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},

{0, 1, 2, 3, 1, 0}, {0, 0,-1, 0, 0, 0}, {0,-2,-1, 0, 1, 0}, {0, 0, 0, 0, 1, 0},
{0,-1, 0, 1, 2, 0}, {0, 0, 1, 0, 0, 0}, {0, 1, 2, 3, 2, 0}, {0, 0,-1, 0, 0, 0},

{0, 1, 2, 0, 2, 0}, {0, 0, 0, 1, 1, 0}, {0, 0, 1, 2, 2, 0}, {0, 1, 1, 1, 0, 0},
{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},

{0, 1, 2, 0, 1, 0}, {0, 1,-1, 0, 1, 0}, {0, 0, 1, 1, 1, 0}, {0, 0, 0, 1, 1, 0},
{0, 1, 0, 1, 2, 0}, {0, 1, 0, 1, 0, 0}, {0,-1, 0,-1, 0, 0}, {0, 1, 2, 1, 2, 0},

{0, 1, 2, 2, 3, 0}, {0, 0, 0,-1,-1, 0}, {0, 1, 1, 2, 3, 0}, {0, 0,-1,-1,-1, 0},
{0, 1, 0,-1,-2, 0}, {0, 0, 0, 1, 1, 0}, {0, 1, 2,-1, 0, 0}, {0, 0, 1, 1, 1, 0},

{0,-1, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},

{0, 0, 1, 1, 2, 0}, {0, 1, 0,-1,-1, 0}, {0, 1, 1, 2, 2, 0}, {0, 0,-1,-1,-2, 0},
{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},

{0, 1, 2, 3, 0, 0}, {0, 1, 1, 1, 1, 0}, {0, 0,-1,-2,-3, 0}, {0, 0, 0, 0, 1, 0},
{0, 0, 1, 2, 3, 0}, {0, 1, 0, 0, 0, 0}, {0, 1, 2, 3, 3, 0}, {0, 0, 0, 0,-1, 0}
};

const int tot[100] = {0, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5};

const int inv[100] = {0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0};

int vis[MAXN][MAXN], map[MAXN][MAXN], use[MAXN];

bool out(int o) { return o < 1 || o > 10; }

bool check(int o, int x, int y)
{
  if (inv[o]) return 0;
  for (int i = 1; i < tot[o]; i++)
  {
    int dx = x + a[o][i], dy = y + b[o][i];
    if (out(dx) || out(dy)) return 0;
    if (vis[dx][dy]) return 0;
  }
  return 1;
}

void DFS(int x, int y)
{
  if (x == 11 && y == 1)
  {
    for (int i = 1; i <= 10; i++)
    {
      for (int j = 1; j <= i; j++) printf("%c",map[i][j] + 'A' - 1);
      printf("\n");
    }
    exit(0);
  }
  if (vis[x][y]) { DFS_next; }
  else for (int i = 1; i <= 12; i++)
  {
    if (use[i]) continue;
    for (int j = 0; j <= 7; j++)
    {
      int o = i * 8 - j;
      if (check(o, x, y))
      {
        for (int k = 0; k < tot[o]; k++)
          vis[x + a[o][k]][y + b[o][k]] = 1, map[x + a[o][k]][y + b[o][k]] = i;
        use[i] = 1; DFS_next; use[i] = 0;
        for (int k = 0; k < tot[o]; k++) vis[x + a[o][k]][y + b[o][k]] = 0;
      }
    }
  }
}

char ch[MAXN];

int main()
{
  freopen("game.in", "r", stdin);
  freopen("game.out", "w", stdout);
  for (int i = 1; i <= 10; i++)
  {
    scanf("%s",ch);
    for (int j = 0; j <= i - 1; j++)
    {
      if (ch[j] == '.') map[i][j + 1] = 0;
      else map[i][j + 1] = ch[j] - 'A' + 1, vis[i][j + 1] = 1, use[ch[j] - 'A' + 1] = 1;
    }
  }
  for (int i = 1; i <= 10; i++)
    for (int j = 10; j > i; j--) vis[i][j] = 1;
  DFS(1,1);
  printf("No solution");
  return 0;
}

------------------------------------------------------------------------------------------------------

[BZOJ1501][NOI2005] 智慧珠游戏的更多相关文章

  1. 【搜索好题】bzoj1501 [NOI2005]智慧珠游戏

    bzoj1501 [NOI2005]智慧珠游戏 搜索苟逼题系列. 暴力枚举每一种情况(包括旋转翻转全都考虑在内)然后码出代码. (正解似乎不是这样子的) 那年好像还有平衡树苟逼题维护数列233333心 ...

  2. bzoj 1501: [NOI2005]智慧珠游戏 Dancing Link

    1501: [NOI2005]智慧珠游戏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 190  Solved: 122[Submit][Status] ...

  3. 洛谷 P4205 [NOI2005]智慧珠游戏 DFS

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P4205 [NOI2005]智慧珠游戏 题目描述 智慧 ...

  4. Luogu P4205 [NOI2005]智慧珠游戏

    国内少有的可以练习神仙算法--DLX的好题怎么可以被爆搜埋没呢? 看到这题没有DLX的题解所以写一篇,不过貌似我实现的太弱(构图太慢)所以速度上不是很快. 下面开始讲题,但请保证你要先学会DLX.(d ...

  5. 【BZOJ1501】【NOI2005】智慧珠游戏(搜索)

    [BZOJ1501][NOI2005]智慧珠游戏(搜索) 题面 我要一改我懒惰的作风 这道题目必须放题面 Description Input 文件中包含初始的盘件描述,一共有10行,第i行有i个字符. ...

  6. BZOJ 1501 智慧珠游戏

    Description Input 文件中包含初始的盘件描述,一共有10行,第i行有i个字符.如果第i行的第j个字符是字母”A”至”L”中的一个,则表示第i行第j列的格子上已经放了零件,零件的编号为对 ...

  7. ios版弹珠游戏源码

    这个是我们比较喜欢玩的一直小游戏的,ios版弹珠游戏源码,该游戏源码来着IOS教程网其他网友提供上传的,大家可以了解一下吧. nore_js_op>     <ignore_js_op&g ...

  8. zzulioj--1790-- 弹珠游戏(数学水题!)

    弹珠游戏 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 14  Solved: 10 SubmitStatusWeb Board Descriptio ...

  9. 洛谷OJ P2356 弹珠游戏 维护前缀和

    题目描述 Description MedalPluS 和他的小伙伴 NOIRP 发掘了一个骨灰级别的游戏--超级弹珠. 游戏的内容是:在一个 n*n 的矩阵里,有若干个敌人,你的弹珠可以摧毁敌人,但只 ...

随机推荐

  1. Spring系列之bean的使用

    一.Bean的定义 <bean id="userDao" class="com.dev.spring.simple.MemoryUserDao"/> ...

  2. Dapper.Net 应用

    Dapper应用 1.Dapper是什么 Dapper是一款轻量级ORM工具.如果你在小的项目中,使用Entity Framework.NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用 ...

  3. System.Properties和System.getenv区别

    网上很多使用的是getProperties.说获得系统变量,但是其实不正确.getProperties中所谓的"system properties"其实是指"java s ...

  4. PHP的大括号(花括号{})使用详解

    一.不管什么程序,function name(){}, for(){}, ….这太多了,不说也知道什么用了. 二.$str{4}在字符串的变量的后面跟上{}大括号和中括号[]一样都是把某个字符串变量当 ...

  5. CentOS6.3搭建Nginx代理访问MongoDB GridFS图片资源

    PHP可以直接读取MongoDB GridFS中的图片并显示到页面中,但对PHP的压力就大了.偶然机会,了解到Nginx可以代理访问,实现过程如下: 1.工具准备 安装一些必要的编译工具及库,这里是直 ...

  6. .net WebServer例

    新建.asmx页面 using System; using System.Collections.Generic; using System.Linq; using System.Web; using ...

  7. HDU 5686 斐波那契数列、Java求大数

    原题:http://acm.hdu.edu.cn/showproblem.php?pid=5686 当我们要求f[n]时,可以考虑为前n-1个1的情况有加了一个1. 此时有两种情况:当不适用第n个1进 ...

  8. jquery 用attr修改src 淡入淡出

    $("#wanwan").animate({ opacity: 'toggle' }, "slow", null, function () { $(" ...

  9. CI在ngnix的配置

    CI的访问路径是酱紫的: http://localhost/index.php/cname/mname 其中cname为controller的名称,mname为method的名称 但是nginx会把i ...

  10. ucenter用户登录过程

    以用户登录为例介绍,其它注销,改密码,消息,头像,好友均类同. 从用户xxx在某一应用程序的login.php,输入用户名,密码讲起.先用uc_user_login函数到uc_server验证此用户和 ...