poj 3096 Surprising Strings

本文介绍了解决POJ3096 Surprising Strings问题的方法,通过使用map来判断字符串是否为surprising string。对于每种可能的间隔,记录并检查所有字符对的出现次数。

poj 3096 Surprising Strings

定义一种surprising string 

如果字符数组中间隔相同的组成的两个字符集合都不一样就是surprising string  否则不是

做这题主要是为了练习map应用

一开始想的比较复杂 没构造映射对  

map<string,int> mm[100] 数组中的数字枚举间隔的大小 string由两个字符组成  int表示此构成的数量 只有都是1的时候才符合要求  

很好的一种想法。。

代码如下:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string.h>
#include <string>
#include <map>

#define eps 1e-8
#define op operator
#define MOD  10009
#define MAXN  100100

#define FOR(i,a,b)  for(int i=a;i<=b;i++)
#define FOV(i,a,b)  for(int i=a;i>=b;i--)
#define REP(i,a,b)  for(int i=a;i<b;i++)
#define REV(i,a,b)  for(int i=a-1;i>=b;i--)
#define MEM(a,x)    memset(a,x,sizeof a)
#define ll __int64

using namespace std;
map < string,int > mm[100];


int main()
{
freopen("ceshi.txt","r",stdin);
    char  ch[100];
    while(gets(ch))
    {
        if(ch[0]=='*')  break;
        int len=strlen(ch);
        bool flag=1;

        for(int i=1;i<len-1;i++)
        {
//            int tmp=ch[i]-'A'+1;
            mm[i].clear();
            string s;  char c[3];
            for(int j=0;j+i<len;j++)
            {
                c[0]=ch[j]; c[1]=ch[j+i]; c[2]='\0';
                s=c;
                if(mm[i][s])  {flag=0; break;}
                else   mm[i][s]=1;
            }
        }

        if(flag)
            printf("%s is surprising.\n",ch);
        else printf("%s is NOT surprising.\n",ch);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值