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. 使用LINQ TO XML 创建xml文档,以及读取xml文档把内容显示到GridView例子

    首先,准备了一个Model类 using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  2. 快速排序算法分析--C++版

    快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试喜欢考这个. 快速排序是C.R.A.Hoar ...

  3. 赋值运算符函数__from <剑指Offer>

    前段时间忙于项目,难得偷得几日闲,为即将到来的就业季做准备.在面试时,应聘者要注意多和考官交流,只有具备良好的沟通能力,才能充分了解面试官的需求,从而有针对性地选择算法解决问题. 题目来源于<剑 ...

  4. 【NOIP2016提高组】 Day2 T1 组合数问题

    题目传送门:https://www.luogu.org/problemnew/show/P2822                 ↓题目大意↓ 数据的极限范围:n,m≤2000,k≤21,数据组数≤ ...

  5. JAVA 编码解码

    涉及编码的地方一般都在从字符到字节或是从字节到字符间的转换上 1.在IO中存在的编码,主要是 FileOutputStream 和 FileInputStream,在使用时需要指定字符集,而不是使用系 ...

  6. Junit基本使用

    Junit基本用法 1.创建Junit Test Case 2.基本使用(以oracle数据库操作为例) package com.csit.adminsystem1.tests; import sta ...

  7. LeetCode 112. Path Sum (二叉树路径之和)

    Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...

  8. centos 安装giblab

    本文章转载自:http://www.cnblogs.com/fanjingfeng/p/6665597.html 一, 服务器快速搭建gitlab方法 可以参考gitlab中文社区 的教程 cento ...

  9. 数据权限设计——基于EntityFramework的数据权限设计方案:一种设计思路

    前言:“我们有一个订单列表,希望能够根据当前登陆的不同用户看到不同类型的订单数据”.“我们希望不同的用户能看到不同时间段的扫描报表数据”.“我们系统需要不同用户查看不同的生产报表列”.诸如此类,最近经 ...

  10. css3 滚动条出现 页面不跳动

    .wrap-outer { margin-left: calc(100vw - 100%); }   .wrap-outer { padding-left: calc(100vw - 100%); } ...