1001: 字符串“水”题

时间限制: 1 Sec  内存限制: 128 MB
提交: 210  解决: 39
[提交][状态][讨论版]

题目描述

给出一个长度为 n 的字符串(1<=n<=100000),求有多少个连续字串中所有的字母都出现了偶数次。 

输入

第一行一个正整数 T,表示数据组数(1 <= T <= 10)。 
接下来 T 行,每行有一个只包含小写字母的字符串。 

输出

每个答案输出满足要求字符串个数。每个答案占一行。

样例输入

3
a
aabbcc
abcabc

样例输出

0
6
1

提示

这道题挺不错的,

用二进制的低0-25位分别保存'a'-'z'出现的次数,然后根据相同状态统计,

见代码,

 #include <bits/stdc++.h>
using namespace std;
map<int,int>mmap;
char str[];
int main ()
{
int T;
scanf("%d",&T);
while(T--) {
mmap.clear();
scanf("%s",str);
int len = strlen(str);
int state=;
long long sum=;
for(int i=; i<len; i++) {
state^=(<<(str[i]-'a'));
if(state==) {
sum++;
}
sum+=mmap[state];
mmap[state]++;//相同状态出现次数
}
printf("%lld\n",sum);
}
return ;
}

后来可能数据加强了,上面代码超时了。

优化一下,先哈希然后存map,

 #include <bits/stdc++.h>
#define maxn 34567 using namespace std;
typedef long long LL; char str[];
map<int,int>sk[maxn];
void solve()
{
for(int i=;i<maxn;i++)
sk[i].clear();
int len=strlen(str);
int ret=;
LL ans=;
sk[][]=;
for(int i=; i<len; i++)
{
int now=str[i]-'a';
ret^=(<<now);
ans+=sk[ret%maxn][ret];
sk[ret%maxn][ret]++;
}
printf("%lld\n",ans);
} int main()
{
int T;
scanf("%d%*c",&T);
while(T--)
{
scanf("%s",str);
solve();
}
return ;
}

1001 字符串“水”题(二进制,map,哈希)的更多相关文章

  1. 1222: FJ的字符串 [水题]

    1222: FJ的字符串 [水题] 时间限制: 1 Sec 内存限制: 128 MB 提交: 92 解决: 20 统计 题目描述 FJ在沙盘上写了这样一些字符串: A1  =  “A” A2  =   ...

  2. 第十一届“蓝狐网络杯”湖南省大学生计算机程序设计竞赛 B - 大还是小? 字符串水题

    B - 大还是小? Time Limit:5000MS     Memory Limit:65535KB     64bit IO Format: Description 输入两个实数,判断第一个数大 ...

  3. Codeforces Round #309 (Div. 2) A. Kyoya and Photobooks 字符串水题

    A. Kyoya and Photobooks Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...

  4. HDU ACM 1073 Online Judge -&gt;字符串水题

    分析:水题. #include<iostream> using namespace std; #define N 5050 char a[N],b[N],tmp[N]; void Read ...

  5. HDU4891_The Great Pan_字符串水题

    2014多校第五题,当时题面上的10^5写成105,我们大家都wa了几发,改正后我和一血就差几秒…不能忍 题目:http://acm.hdu.edu.cn/showproblem.php?pid=48 ...

  6. Codeforces Round #309 (Div. 2) B. Ohana Cleans Up 字符串水题

    B. Ohana Cleans Up Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/554/pr ...

  7. uva 10252 - Common Permutation 字符串水题

    题意:給定兩個小寫的字串a與b,請印出皆出現在兩字串中的字母,出現的字母由a~z的順序印出,若同字母出現不只一次,請重複印出但不能超過任一字串中出現的次數.(from Ruby兔) 很水,直接比较输出 ...

  8. Codeforces 1105B:Zuhair and Strings(字符串水题)

    time limit per test: 1 second memory limit per test: 256 megabytes input: standard input output: sta ...

  9. 牛客 109B 好位置 (字符串水题)

    大意: 给定字符串$s1,s2$, 对于$s1$中所有与$s2$相等的子序列$t$, $t$在$s1$中的下标定义为好位置. 求$s1$是否所有位置都是好位置. 显然$s1$的前缀要与$s2$相等, ...

随机推荐

  1. 1.6 使用电脑测试MC20的读取带中文短信功能

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...

  2. gearman相关笔记

    gearman do: task: job只会在一个work上执行. 上面来自一个很好的ppt:http://www.docin.com/p-590223908.html 利用开源的Gearman框架 ...

  3. Python操作——Memcached

    Memcached是一个高性能的分布式内存对象缓存系统,用于Web应用以减轻数据库的负载. 它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度. Memcached ...

  4. yii2弹出层

    bootstrap http://getbootstrap.com/javascript/#modals https://github.com/lichunqiang/yii2-sweet-submi ...

  5. win32调试——OutputDebugString

    win32下开发console程序可以直接用printf打印到控制台. 开发图形界面程序时,可以调用OutputDebugString将字符串输出到Debug窗口, 注意是要调试运行才能看到Debug ...

  6. springboot-vue项目前台1

  7. Linux Shell基础 Shell的输入重定向和输出重定向

    概述 在 Linux 中输入设备指的是键盘,输出设备指的是显示器.在 Linux 中,所有的内容都是文件,计算机硬件也是文件,标准输入设备(键盘)和标准输出设备(显示器)也是文件.这些设备的设备文件名 ...

  8. [转]Navicat for oracle 提示 cannot load oci dll,193的解决方法 orcale 11g

    Navicat for oracle 提示 cannot load oci dll,193的解决方法   内网有一台windows server 2012,安装了Navicat 11.1.8 连接or ...

  9. https网站无法加载http路径的js和css

    在https的网站中引用http路径的js或css会导致不起作用,其形如: <script src="http://code.jquery.com/jquery-1.11.0.min. ...

  10. 20145239杜文超《网络对抗》- Web安全基础实践

    20145239杜文超<网络对抗>- Web安全基础实践 基础问题回答 (1)SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查 ...