题目地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=1112

描述

题意很简单,给一个数n 以及一个字符串str,区间【i,i+n-1】 为一个新的字符串,i 属于【0,strlen(str)】如果新的字符串出现过ans++,例如:acmacm n=3,那么 子串为acm cma mac acm ,只有acm出现过

求ans;

输入
LINE 1: T组数据(T<10)
LINE 2: n ,n <= 10,且小于strlen(str);
LINE 3:str
str 仅包含英文小写字母 ,切长度小于10w
输出
求 ans
样例输入
2
2
aaaaaaa
3
acmacm
样例输出
5
1

map解法:

//Asimple

#include <iostream>
#include <map>
#include <cstdio> using namespace std;
int T, n, ans;
string str; int main()
{
scanf("%d",&T);
// cin >> T;//TLE了三次,没想到竟然是 cin 的错
while( T-- )
{
cin >> n >> str ;
ans = 0;
map<string,int> m;
int len = str.length();
for(int i=0; i<=len-n; i++)
{
string s = str.substr(i,n);
if( m[s] == 1 ) ans ++ ;
else m[s] = 1 ;
}
cout << ans << endl ;
} return 0;
}

set解法:

//Asimple

#include <iostream>
#include<cstdio>
#include<cstring>
#include <set>
using namespace std; int main()
{
int T;
scanf("%d", &T);
while(T--)
{
int n,i, ans = 0;
scanf("%d", &n);
set<string> S;
string str, s;
cin >> str;
int len = str.length();
int lens=str.size();
for(i=0; i<=len-n; i++)
{
s=str.substr(i,n);
S.insert(s);
if(S.size()==lens) ans++;
else lens=S.size();
}
printf("%d\n", ans);
}
return 0;
}

最优解,结构字符串排序:

//Asimple
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; struct str
{
char s[12];
} r[100001]; int n;
char _str[100001]; void _strcpy(int x, int y)
{
int j; for (j=0; j<n; j++)
r[x].s[j] = _str[y+j];
r[x].s[j] = '\0';
return ;
} bool cmp(str a, str b)
{
return strcmp(a.s, b.s) < 0;
} int main()
{
int T, i, count, l;
scanf("%d", &T);
while (T--)
{
count = 0;
memset(_str, '\0', sizeof(_str));
scanf("%d", &n);
scanf("%s", _str);
l = strlen(_str);
for (i=0; i<=l-n; i++)
_strcpy(i, i);
sort(r, r+l-n+1, cmp); for (i=0; i<l-n; i++)
if (strcmp(r[i].s, r[i+1].s) == 0)
count++;
printf("%d\n", count);
}
return 0;
}

ACM题目————STL练习之求次数的更多相关文章

  1. ACM题目————STL练习之众数问题

    描述 所谓众数,就是对于给定的含有N个元素的多重集合,每个元素在S中出现次数最多的成为该元素的重数, 多重集合S重的重数最大的元素成为众数.例如:S={1,2,2,2,3,5},则多重集S的众数是2, ...

  2. ACM题目————STL练习之Ananagrams

    Description Most crossword puzzle fans are used to anagrams--groups of words with the same letters i ...

  3. ACM题目————STL练习之字符串替换

    描述 编写一个程序实现将字符串中的所有"you"替换成"we" 输入 输入包含多行数据 每行数据是一个字符串,长度不超过1000 数据以EOF结束 输出 对于输 ...

  4. ACM题目————STL练习之 懒省事的小明(优先队列)

    描述 小明很想吃果子,正好果园果子熟了.在果园里,小明已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.小明决定把所有的果子合成一堆. 因为小明比较懒,为了省力气,小明开始想点子了: 每一 ...

  5. ACM题目————STL + 全排列

    今天碰到一个函数,感觉挺好用的,全排列函数 next_permutation! 求全排列的函数,基本上与自己写的DFS时间复杂度差不多,毕竟是标准库.(2018-1-4 添加) 话不多说,直接上题. ...

  6. nyoj 1112 求次数(map, set)

    求次数 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 题意很简单,给一个数n 以及一个字符串str,区间[i,i+n-1] 为一个新的字符串,i 属于[0,strl ...

  7. nyoj 1112 求次数 (map)

    求次数 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 题意很简单,给一个数n 以及一个字符串str,区间[i,i+n-1] 为一个新的字符串,i 属于[0,strl ...

  8. LeetCode通关:求次数有妙招,位运算三连

    分门别类刷算法,坚持,进步! 刷题路线参考: https://github.com/chefyuan/algorithm-base 大家好,我是刷题困难户老三,这一节我们来刷几道很有意思的求次数问题, ...

  9. ACM题目———— 一种排序(STL之set)

    描述 输入 第一行有一个整数 0<n<10000,表示接下来有n组测试数据:每一组第一行有一个整数 0<m<1000,表示有m个长方形:接下来的m行,每一行有三个数 ,第一个数 ...

随机推荐

  1. JavaScript之prototype对象

    简述prototype: 在js中,每个构造函数都有一个原型属性prototype,因为这个属性的值通常是一个对象,又叫原型对象!你不需要显式的去定义原型对象,因为每个构造函数都会一个原型属性,通常在 ...

  2. jquery 1.9 1.8 判断 浏览器(IE11,IE8,IE7,IE6)版本

    1.9以后很我方法删除了,所有和之前版本判断浏览器版本有所差记录一下 1.9 ------------------------------------------------------------- ...

  3. ls 列出文件目录(可以含子目录)及文件的完整路径

    1.列出当前目录的文件.文件夹完整路径    ls -1 |awk '{print i$0}' i=`pwd`'/' 2.列出当前目录及子目录的文件.文件夹完整路径    ls -R |awk '{p ...

  4. webpack学习三——output

    output的两个参数filename,path 一.path输出路径,输出路径要绝对路径,否则报错.做法如下: path:__dirname + 'path' 二.filename 输出文件命,相对 ...

  5. sql优化实例(用左连接)

    改为 也就是说用左连接代替where条件,这样的话效率会提高很多.

  6. SQLServer DBA 三十问

    原贴:http://www.cnblogs.com/fygh/archive/2011/10/18/2216166.html 答案:https://blog.csdn.net/cjssimei527/ ...

  7. dedecms自增标签[field:global.autoindex/]的运用

    用bootstrap建站时用到幻灯片切换模块,里面有个active(下面代码中的data-slide-to="0"),其余的按顺序递增(1,2),如果用dedecms就可以用aut ...

  8. 网络密钥交换协议——Diffie-Hellman

    Diffie-Hellman算法是一种交换密钥的算法. 它是眼下比較经常使用的密钥交换算法. 这样的算法的优点是能让两台计算机在不安全的网络环境中完毕密钥的交换. 下面是整个算法的过程.当中红色字体表 ...

  9. 第k小数据

    给定两个整型数组A和B(未排序).我们将A和B中的元素两两相加可以得到数组C. 譬如A为[1,2],B为[3,4].那么由A和B中的元素两两相加得到的数组C为[4,5,5,6]. 现在给你数组A和B, ...

  10. 多线程下载文件,ftp文件服务器

    1: 多线程下载文件 package com.li.multiplyThread; import org.apache.commons.lang3.exception.ExceptionUtils; ...