1. 问题描述

      Alex喜欢填词游戏。填词游戏是一个非常简单的游戏。填词游戏包括一个N X M大小的矩形方格盘和P个单词。玩家需要把每个方格中填上一个字母使得每个单词都能在方格盘上被找到。每个单词都能被找到要满足下面的条件:

      每个方格都不能同时属于超过一个的单词。一个长为k的单词一定要占据k个方格。单词在方格盘中出现的方向只能是竖直的或者水平的(可以由竖直转向水平,反之亦然)。

      你得任务是首先在方格盘上找到所有的单词,当然在棋盘上有些方格可能没有被单词占据,然后把这些没有用的方格找出来,再把这些方格上的字母按照字典序组成一个“神秘单词”。

    2. 输入数据 
      输入的第一行包括3个整数N,M和P(2<= M,N<=10,0<=P<=100)。接下来的N行,每行包括M个字符,来表示方格盘。接下来的P行给出需要在方格盘中找到的单词。

    3. 输出要求 
      输入保证填词游戏至少有一组答案。输入中给出的字母都是大写字母。

    4. 输入样例 
      3 2 2 
      E B G 
      G E E 
      E G E 
      B E G 
      G E E

    5. 输出样例 
      E E G

    6. 解题思路 
      题目中给出的条件比较隐晦。输入中给出的字母都是大写字母——表明输出也是只有大写字母。输入保证填词游戏至少有一组答案——这说明不必寻找单词所在的位置只要去掉这些单词所占用的字母就可以了。“神秘单词”中的字母要按照单词字典序给出——说明只要知道“神秘单词”中的字母组成就可以了,在字母组成确定的情况下,按字典序输出的方式只有一种。分析到这里我们发现这其实是个很简单的问题:给出一个字母的集合,从中去掉一些在给出单词中出现过的字母,将剩下的字母按字典序输出即可。 
      可以定义一个有26个元素的数组,分别记录在输入的矩形中每个字母出现的次数,当读完单词时,将数组中对应到单词中的字母的元素减一。处理完所有的单词后,将数组中德非0的元素对应的字母一次输出,数组元素的值是几,就输出几次该字母。

    7. 代码:
    8. #include<iostream>
      #include<stdio.h>
      using namespace std;
      int max(int x,int y)
      { return x>y?x:y;
      }
      int main()
      {
      int N,M,P;
      int i,j;
      int Letter[];
      for(i=;i<;i++)
      {
      Letter[i]=;
      }
      for(i=;i<;i++)
      {
      cout<<Letter[i];
      }
      cin>>N>>M>>P;
      for(i=;i<N;i++)
      {
      char str[];
      cin>>str;
      for(j=;str[j]!='\0';j++)
      { Letter[str[j]-'A']++;
      printf("%c %d\n",str[j],Letter[str[j]-'A']);
      }
      } cout<<endl<<endl;
      for(j=;j<P;j++)
      {
      char str1[];
      cin>>str1;
      for(int k=;str1[k]!='\0';k++)
      {
      Letter[str1[k]-'A']--;
      printf("%c %d\n",str1[k],Letter[str1[k]-'A']);
      }
      }
      cout<<endl;
      for(i=;i<;i++)
      {
      if(Letter[i]!='\0')
      for(j=;j<Letter[i];j++)
      {
      printf("%c",i+'A');
      }
      }
      cout<<endl;
      return ;
      }
      /*
      3 3 2
      EBG
      GEE
      EGE
      BEG
      GEE
      */

      实际上M拿来没什么nuan用!没有去控制单词长度,可以去掉!

例题:填词-poj的更多相关文章

  1. POJ中和质数相关的三个例题(POJ 2262、POJ 2739、POJ 3006)

    质数(prime number)又称素数,有无限个.一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数:否则称为合数.      最小的质数 ...

  2. 图的全局最小割的Stoer-Wagner算法及例题

    Stoer-Wagner算法基本思想:如果能求出图中某两个顶点之间的最小割,更新答案后合并这两个顶点继续求最小割,到最后就得到答案. 算法步骤: --------------------------- ...

  3. 判断两条直线的位置关系 POJ 1269 Intersecting Lines

    两条直线可能有三种关系:1.共线     2.平行(不包括共线)    3.相交. 那给定两条直线怎么判断他们的位置关系呢.还是用到向量的叉积 例题:POJ 1269 题意:这道题是给定四个点p1, ...

  4. POJ 2823 滑动窗口 单调队列模板

    我们从最简单的问题开始: 给定一个长度为N的整数数列a(i),i=0,1,...,N-1和窗长度k. 要求: f(i) = max{a(i-k+1),a(i-k+2),..., a(i)},i = 0 ...

  5. Tarjan应用:求割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)【转】【修改】

    一.基本概念: 1.割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点. 2.割点集合:在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成 ...

  6. (转)Tarjan应用:求割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)

    基本概念: 1.割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点. 2.割点集合:在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个 ...

  7. 转自 Because of you 的总结

    上下界网络流的问题严格的分,可以分为四类吧. 1:无源汇可行流  sgu 194 2:有源汇可行流  poj 2396  这题比较好,我建图建了将近200行 3:有源汇最大流  zoj 3496  这 ...

  8. 【转】大素数判断和素因子分解【miller-rabin和Pollard_rho算法】

    集训队有人提到这个算法,就学习一下,如果用到可以直接贴模板,例题:POJ 1811 转自:http://www.cnblogs.com/kuangbin/archive/2012/08/19/2646 ...

  9. 论深度优先(DFS)和广度优先搜索(BF)的优点及不足(更新ing)

    例题: POJ 1915 Knight Moves 骑士遍历问题(跳马问题) 在一个m*m的棋盘上,从任意一个给定的位置(sx , sy)出发,为象棋中的马找一条路通过最少的步数到达另一位置(ex , ...

随机推荐

  1. 关于时钟模块DS1302的使用心得

    最近在做万年历,用到实时时钟DS1302模块,花了两天时间看资料和写驱动,想记录一下我的学习经过,顺便做一下总结. 首先就是在图书馆查各种资料,于是查到的大多是这些,主要时硬件方面的资料: 其实能查到 ...

  2. PhiloGL学习(3)——程序员的法宝—键盘、鼠标

    前言 上一篇文章中介绍了如何让对象动起来,本文介绍如何让场景响应我们的鼠标和键盘以控制场景的缩放及对象的转动和移动等. 一. 原理分析 有了上一篇文章的基础,我们已经知道了如何让场景和对象动起来.本文 ...

  3. Vue源码后记-更多options参数(2)

    写起来感觉都是老三套,AST => render => VNode => patch 之前是把AST弄完了,对事件和过滤器处理如图: render函数也只看这两部分的转换吧! 首先是 ...

  4. hive1.2.2部署

    1.解压hvie.tar,进入conf目录下,cp hive-default.xml.template hive-site.xml; 2.将hive下的新版本jline的JAR包拷贝到hadoop下: ...

  5. JavaScript 中的对象引用

    ECMAScirpt 变量有两种不同的数据类型:基本类型,引用类型.也有其他的叫法,比如原始类型和对象类型,拥有方法的类型和不能拥有方法的类型,还可以分为可变类型和不可变类型,其实这些叫法都是依据这两 ...

  6. django开发中利用 缓存文件 进行页面缓存

    首先我们先来了解下浏览器的缓存 浏览器缓存机制 Cache-control策略 Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是 ...

  7. 浅谈Jquery中的bind(),live(),delegate(),on()绑定事件方式 [转载]

    前言 因为项目中经常会有利用jquery操作dom元素的增删操作,所以会涉及到dom元素的绑定事件方式,简单的归纳一下bind,live,delegate,on的区别,以便以后查阅,也希望该文章日后能 ...

  8. display:table 表格布局

    table 布局最大的特点 1.同行等高 2.宽度自动调节   那么table-cell是不是具备这个特点呢?答案是yes,为什么呢?css中有一个有意思的规则“创建匿名表格元素”.   拿table ...

  9. 关于thinkphp控制器引用model里的方法的一点收获

    有时候真的是很绕,为了这一点点收获,我几乎花了一天的时间.当我弄明白了的那一刻,我.........好吧,写到这里,我发现不能换行.好吧,就这样吧,开始说正题:要想在controler从model引用 ...

  10. fragmentTabHost 使用示例

    目前我们看微信的底部,有四个导航栏,那我们应该来怎么实现类似的导航栏呢? 在 android 4.0 的时候,推出了一个新的工具,fragmentTabHost . fragmentTabHost  ...