题意:输入很多字符串,以星号结束。判断每个字符串是不是“Surprising Strings”,判断方法是:以“ZGBG”为例,“0-pairs”是ZG,GB,BG,这三个子串不相同,所以是“0-unique”,“1-pairs”是ZB,GG,这两个也是不同的,所以是“1-unique”,“2-pairs”是ZG,所以是“2-unique”;综合起来是“Surprising Strings”。

思路:用map就可以,做的时候手欠用了暴搜,结果发现竟然0ms过了,不科学。而用map花了16ms非常的不科学。用暴搜的话就是for循环枚举即可,用一个数组标记一下两个字符的和,就行。

map的代码:

#include<cstdio>
#include<cstring>
#include<map>
#include<string>
using namespace std;
char s[];
int main()
{
while(scanf("%s",s))
{
if(!strcmp(s,"*"))
break;
int k=strlen(s);
bool flag=true;
for(int i=; i<=k-; i++)
{
map<string,int>q;
for(int j=; j+i<k; j++)
{
char s1[];
s1[]=s[j];
s1[]=s[j+i+];
s1[]='\0';
if(q.find(s1)==q.end())//进行查找操作
q[s1]=;//没有就标记为1
else
{
flag=false;
break;
}
}
if(!flag) break;
}
if(flag)
printf("%s is surprising.\n",s);
else printf("%s is NOT surprising.\n",s);
}
return ;
}

枚举的代码:

#include<stdio.h>
#include<map>
#include<cstring>
#include<string>
#include<iostream>
using namespace std ;
int main()
{
string str ;
while(cin>>str)
{
if(str=="*")
break ;
bool mark = ;
bool flag[];
for(int i = ; i<=(int)str.length()- ; i++)//强制转换为int类型是因为str.length()是无符号的,如果为1的时候减去2以上的就容易溢出
{
memset(flag,false,sizeof(flag)) ;
for(int j = ; j+i<(int)str.length()- ; j++)
{
int s = (str[j]-'A')+*(str[j+i+]-'A');//防止出现BG和GB这样加起来就成一样的了
if(flag[s] == false)
flag[s] = true ;
else
{
mark = true ;
break ;
}
}
if(mark)
break ;
}
if(mark)
cout<<str<<" is NOT surprising."<<endl;
else
cout<<str<<" is surprising."<<endl;
}
return ;
}

POJ3096Surprising Strings(map)的更多相关文章

  1. POJ3096:Surprising Strings(map)

    http://poj.org/problem?id=3096 for循环真是奇妙! #include <string.h> #include <stdio.h> #includ ...

  2. GoLang基础数据类型--->字典(map)详解

    GoLang基础数据类型--->字典(map)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   可能大家刚刚接触Golang的小伙伴都会跟我一样,这个map是干嘛的,是 ...

  3. GO语言总结(4)——映射(Map)

    上一篇博客介绍了Go语言的数组和切片——GO语言总结(3)——数组和切片,本篇博客介绍Go语言的映射(Map) 映射是一种内置的数据结构,用来保存键值对的无序集合. (1)映射的创建 make ( m ...

  4. Java-集合=第五题 (Map)设计Account 对象如下: private long id; private double balance; private String password; 要求完善设计,使得该Account 对象能够自动分配id。 给定一个List 如下: List list = new ArrayList(); list.add(new A

    第五题 (Map)设计Account 对象如下: private long id; private double balance; private String password; 要求完善设计,使得 ...

  5. Java-map-第一题 (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。 附:世界杯冠军以及对应的夺冠年份,请参考本章附录。 附录

    第一题 (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队.如果该 年没有举办世界杯,则输出:没有举办世界杯. 附:世界杯冠军以及对应的夺冠年 ...

  6. 第一题 (Map)利用Map,完成下面的功能:

    从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队.如果该 年没有举办世界杯,则输出:没有举办世界杯.  附:世界杯冠军以及对应的夺冠年份,请参考本章附录. 附录  1.历届世界杯冠 ...

  7. 【机器学习基本理论】详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解

    [机器学习基本理论]详解最大似然估计(MLE).最大后验概率估计(MAP),以及贝叶斯公式的理解 https://mp.csdn.net/postedit/81664644 最大似然估计(Maximu ...

  8. 【机器学习基本理论】详解最大后验概率估计(MAP)的理解

    [机器学习基本理论]详解最大后验概率估计(MAP)的理解 https://blog.csdn.net/weixin_42137700/article/details/81628065 最大似然估计(M ...

  9. 列表生成式+过滤器(filter)+映射(map)+lambda总结

    这些都是python的特色,不仅强大,而且好用,配合起来使用更是无敌. 零.lambda lambda用于产生一个匿名表达式,组成部分为:lambda + ‘函数表达式’ ‘函数表达式’由一个冒号加上 ...

随机推荐

  1. android 获取前台进程

    String getTopActivity() { ActivityManager manager = (ActivityManager)getSystemService(ACTIVITY_SERVI ...

  2. Linux msgsnd : invalid argument

    msgsnd(message id, buffer, sizeof buffer, ...); Important: buffer[0]不能为0!!!

  3. 实例介绍Cocos2d-x中Box2D物理引擎:使用关节

    下面我们将使用Box2D物理引擎技术进行重构.使得关节能够掌握如何在Box2D使用关节约束.HelloWorldScene.cpp中与使用关节的相关代码如下: void HelloWorld::add ...

  4. VPN怎么连?

    VPN的英文全称是“Virtual Private Network”,翻译过来就是“虚拟专用网络”.VPN是通过特殊的加密的通讯协议在连接在互联网上的位于不同地方的两个或多个内部网之间建立一条专有的通 ...

  5. TreeView递归绑定数据的两种方法

    #region 绑定TreeView /// <summary> /// 绑定TreeView(利用TreeNode) /// </summary> /// <param ...

  6. html5学习笔记——2016/4

    HTML5新增的结构元素: section     article     aside     header     hgroup     footer     nav     figure HTML ...

  7. 如何解决NTLDR is missing

    问题:ntldr文件不见了,无法进入系统.本系统win XP 简体中文32位 解决步骤: (1)我找来一张win XP 英文版 32位的系统光盘(用U盘驱动也行) (2)重新启动计算机,并进入CMOS ...

  8. python staticmethod classmethod

    http://www.cnblogs.com/chenzehe/archive/2010/09/01/1814639.html classmethod:类方法staticmethod:静态方法 在py ...

  9. Delphi Base64 编解码函数

    Delphi 自带 Base64 编解码的单元, EncdDecd这个单元提供两套四个公开函数: 对流的编解码:procedure EncodeStream(Input, Output: TStrea ...

  10. Pandas之容易让人混淆的行选择和列选择

    在刚学Pandas时,行选择和列选择非常容易混淆,在这里进行一下讨论和归纳 本文的数据来源:https://github.com/fivethirtyeight/data/tree/master/fa ...