String Statistics

时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte

描述

You have an n × n matrix of lower-case letters. You start from somewhere in the matrix, walk in one of the eight directions (left, right, up, down, up-left, up-right, down-left, down-right) and concatenate every letter you meet, in the order you see them, to form a string. You can stop anywhere (possibly not moving at all!), but you cannot go out of the matrix, or change direction in the middle of the journey.How many different non-empty strings can you get?

输入

The first line contains t (1 ≤ t ≤ 10), the number of test cases followed. Each test case begins with one integer n(1 ≤ n ≤ 30), followed by n lines, containing the matrix. The matrix will contain lower-case letters only.

输出

For each test case, print the number of different strings you can get.

样例输入

2
2
aa
bb
3
aba
bcc
daa

样例输出

6
31
题目大意:给出一个n*n的矩阵,有上,下,左,右,左上,左下,右上,右下八个方向,从任意位置开始,按同一方向走动,可以在任意位置停止,输出总共有多少种不为空且各不相同的字符串。
题解:固定方向,用set容器来插入字符串,这样可以去重
#include<iostream>
#include<string>
#include<set>
using namespace std;int dx[8]={0,0,1,-1,1,1,-1,-1}; //八个方向int dy[8]={1,-1,0,0,-1,1,-1,1};
int n;
char op[40][40];
string str;
set<string>p;void dfs(int i,int j,int k) //按同方向搜索{if(i>0&&j>0&&i<=n&&j<=n){str+=op[i][j];p.insert(str);dfs(i+dx[k],j+dy[k],k);}
}
int main()
{int i,j,k,t;cin>>t;while(t--){cin>>n;getchar();for(i=1;i<=n;i++)for(j=1;j<=n;j++)cin>>op[i][j];p.clear(); //每寻找一次需要清除容器里的东西             for(i=1;i<=n;i++)for(j=1;j<=n;j++)for(k=0;k<8;k++)        {          str = "";str+=op[i][j];p.insert(str);dfs(i+dx[k],j+dy[k],k);}cout<<p.size()<<endl;}return 0;
}

转载于:https://www.cnblogs.com/lavender913/p/3319857.html

String Statistics(2008年珠海市ACM程序设计竞赛)相关推荐

  1. [置顶]2010年东北大学ACM程序设计竞赛冬季校赛题解

    8题只做出4题比较easy的题,而且做得挺麻烦,看来还要多练练. AC的题如下 NEUOJ  1112 I Love Apple Description So many people love app ...

  2. “师创杯”山东理工大学第九届ACM程序设计竞赛 正式赛 F.校赛~校赛~【思维+规律题】

    校赛~校赛~ Time Limit: 1000MS  Memory Limit: 65536KB Submit  Statistic Problem Description SDUT 的校赛是从 20 ...

  3. 次短路问题(陕西师范大学第九届ACM程序设计竞赛-F 新冠病毒要回家)

    求到顶点v的次短路时,有两种情况,要么是到其他某个顶点u的最短路再加上u->v的边,要么是到某个顶点u的次短路再加上u->v的边. 一般我们用Dijkstra求得最短路(无负权边),由此我 ...

  4. 哈尔滨理工大学第五届ACM程序设计竞赛(热身)

    Link:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2234 土豪银行 Time ...

  5. 华南师大 2017 年 ACM 程序设计竞赛新生初赛题解

    华南师大 2017 年 ACM 程序设计竞赛新生初赛题解 华南师范大学第很多届 ACM 程序设计竞赛新生赛(初赛)在 2017 年 11 月 20 日 - 27 日成功举行,共有 146 名同学有效参 ...

  6. 读ACM程序设计竞赛基础教程之-------技巧小结

    ACM程序设计竞赛基础教程 前言 分治算法 计数问题(统计数字出现个数) 查找等式的解(思维) 递归算法 汉诺塔问题 贪心算法 钓鱼问题 前言 鉴于本人原因,本文记录的是博主认为之前没有想过的思路和想 ...

  7. 第十四届中北大学ACM程序设计竞赛 J.ZBT的游戏

    问题描述 第14届中北大学程序设计竞赛来了,集训队新买了一大堆气球,气球一共有K种颜色(1<=K<=256),气球的颜色从1-K编号. ZBT童心未泯,他发明了一种摆放气球的游戏,规则如下 ...

  8. 重复 桂林电子科技大学第三届ACM程序设计竞赛

    题目链接:https://ac.nowcoder.com/acm/contest/558/B import java.util.HashSet; import java.util.Scanner;pu ...

  9. 青岛农业大学第九届ACM程序设计竞赛

    Problem A 喆神装书 https://ac.nowcoder.com/acm/contest/906/A 题意:是否能够把所有的书都放在两个背包里. 题解:贪心 C++版本一 /* *@Aut ...

最新文章

  1. 数据库定时导出和互备一例
  2. 基于docker搭建svn-server
  3. Invoke shell in Java
  4. 利用百度api判断已知经纬度的一个点是否在多边形内
  5. Deployment descriptor
  6. Oracle ASM 翻译系列第十一弹:高级知识 Offline or drop?
  7. java魔方游戏代码_java swing实现的魔方小游戏源码附带视频指导运行教程
  8. day69-oracle 22-DBCA
  9. 微软新一代企业应用平台 促进动态IT发展
  10. SPI协议学习Cubmx——读写Flash W25Q64
  11. 每个程序员都应该阅读的10本数据结构和算法书籍
  12. PDF的页面方向倒了,怎么调整并保存
  13. RISC-V学习笔记【简介】
  14. [Android]在App中使用相机
  15. Cocos Creater(3.6.1)2D游戏的一些设计思想
  16. Oracle查询速度慢的原因总结
  17. eclipse + sakai
  18. 结算更高效,成本更节省,风控更全面,用友银企联助力万家企业加速数字变革
  19. android 安装器,APK安装器
  20. 图像测试卡规格选择——SFRplus测试卡

热门文章

  1. C++:39---继承中构造函数、析构函数的关系
  2. c++的虚拟继承 的一些思考吧
  3. Sublime Text 2配置强大的IDE开发环境,运行java
  4. codeforces 339A-C语言解题报告
  5. ffmpeg解码器优化
  6. 养心灵,才能美容颜,拥有好日子(图)
  7. 新兴的多媒体格式——MXF 文件格式分析 和简介
  8. 关于Video Renderer和Overlay Mixer
  9. Springboot Mybatis 整合(完整版)
  10. java 的几种对象 (PO,VO,DAO,BO,POJO) 解释