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. CSS3选择器在HTML5中的使用

    1,有CLASS属性的input标记 Input[class]{ } 2,class属性是sm的元素 Input[class='sm']{} 3,  凡是class=sm的元素 [class='sm' ...

  2. 解决Nginx+Tomcat时ContextPath不同的问题

    1        问题描述 项目前端模板使用Thymeleaf,在对各种URL进行格式化输出时,都使用@{uri}代码.它会自动读取项目部署的虚拟路径,添加到URI的前端输出. 真实测试和生产环境中, ...

  3. 总结HTML5

    都说项目页面是HTML5写的,但是HTML5的特别之处用了多少? 1.是不是页面布局都是统一的div,然后class写样式?可是HTML5提供了好多新标签 ,css中直接用标签名即可定义样式,不用费力 ...

  4. 树莓派.使用Node.js来制作一个作业检查仪

    先上图 前段时间, 花了点时间给女儿做了个数学习题的小程序 首页 做题界面(题目每次都随机生成, 加减乘除都有) 做题记录 现在问题来了, 怎么才能随时知道作业有没有完成呢? 每次打开做题记录页面刷新 ...

  5. (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探

    目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...

  6. 基于.NET CORE微服务框架 -浅析如何使用surging

    1.前言 surging受到大家这么强烈的关注,我感到非常意外,比如有同僚在公司的分享会上分享surging, 还有在博客拿其它的RPC框架,微服务做对比等等,这些举动都让我感觉压力很大,毕竟作为个人 ...

  7. app.get is not a function解决方案

    在express4.x中app.js被申明为一个模块,而不是一个主程序入口,在文件的最后暴露出了这个模块,如下所示 app.js module.exports = app; 但是我们在routes目录 ...

  8. python爬虫如何入门

    学爬虫是循序渐进的过程,作为零基础小白,大体上可分为三个阶段,第一阶段是入门,掌握必备的基础知识,第二阶段是模仿,跟着别人的爬虫代码学,弄懂每一行代码,第三阶段是自己动手,这个阶段你开始有自己的解题思 ...

  9. 《Spark Python API 官方文档中文版》 之 pyspark.sql (一)

    摘要:在Spark开发中,由于需要用Python实现,发现API与Scala的略有不同,而Python API的中文资料相对很少.每次去查英文版API的说明相对比较慢,还是中文版比较容易get到所需, ...

  10. Javascript中的Trait与代码重用

    Javascript中的Trait与代码重用 来源 http://www.ituring.com.cn/article/64103 我们知道,OOP中最普遍的代码重用方式是通过继承,但是,继承有一些缺 ...