Good Substrings

CodeForces - 271D

给你一个只包含小写字母的字符串s.
问你在这个字符串中有多少个不同的子串.
且要求这些子串中不得出现超过k个的特殊字母.
*子串s1和子串s2不同,当且仅当s1!=s2,即s1和s2完全不同.
*子串指的是字符串中截取出来的连续的一段.
输入格式第一行,一个长度不超过1500仅包含小写字母的字符串s.
第二行,包含一个长度为26的01字符串,如果字符串的第i(0<=i< length(s))个位置为'0',说明'a'+i为特殊字母,否则'a'+i不是特殊字母.
第三行,包含一个整数k(0<=k<=|s|).输出格式只有一个整数,表示符合要求的不同子串的个数样例

样例输入1
ababab
01000000000000000000000000
1
样例输出1
5
样例输入2
acbacbacaa
00000000000000000000000000
2
样例输出2
8

样例解释对于第一个样例,符合要求的子串分别为:"a", "ab", "b", "ba", "bab".

sol:DIV2的D嘛,直接n2暴力搞出所有子串,然后一开始用set去重,T到怀疑人生,然后用哈希,又WA到死

#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=;
int n,m,No[N];
string S,Spe;
bool Bo[];
set<string>Ans;
int main()
{
freopen("data.in","r",stdin);
// freopen("my.out","w",stdout);
int i,j;
cin>>S; n=S.size(); S='$'+S;
cin>>Spe; for(i=;i<;i++) if(Spe[i]=='') Bo[i]=;
R(m);
for(i=;i<=n;i++) if(Bo[S[i]-'a']) No[i]=;
for(i=;i<=n;i++) No[i]+=No[i-];
Ans.clear();
for(i=;i<=n;i++) for(j=i;j<=n;j++)
{
if(No[j]-No[i-]>m) break;
else
{
string t; t=S.substr(i,j-i+); Ans.insert(t);
}
}
// set<string>::iterator it;
// for(it=Ans.begin();it!=Ans.end();it++) cout<<*it<<endl;
Wl((int)(Ans.size()));
return ;
}
/*
Input
ababab
01000000000000000000000000
1
Output
5 Input
acbacbacaa
00000000000000000000000000
2
Output
8 input
kqdwdulmgvugvbl
00101010100100100101101110
13
output
114
*/

set(TLE)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=;
const ll Mod=;
int n,m,Qzh[N];
unsigned long long a[N*N];
char S[N],Sp[];
bool Bo[];
int main()
{
int i,j;
scanf("%s",S+); n=strlen(S+);
scanf("%s",Sp+); for(i=;i<=;i++) if(Sp[i]=='') Bo[i-]=;
R(m);
for(i=;i<=n;i++) {if(Bo[S[i]-'a']) Qzh[i]=; Qzh[i]+=Qzh[i-];}
*a=;
for(i=;i<=n;i++)
{
unsigned long long tmp=;
for(j=i;j<=n;j++)
{
if(Qzh[j]-Qzh[i-]>m) break;
tmp=tmp*Mod+S[j]; a[++*a]=tmp;
}
}
sort(a+,a+*a+);
*a=unique(a+,a+*a+)-a-;
Wl((ll)(*a));
return ;
}
/*
Input
ababab
01000000000000000000000000
1
Output
5 Input
acbacbacaa
00000000000000000000000000
2
Output
8
*/

codeforces271D的更多相关文章

随机推荐

  1. c# 后台隐式使用webBrowser

    c#不使用 webBrowser 控件, 在后台加载html流 private void button1_Click(object sender, EventArgs e) { string urlP ...

  2. (四)创建基于maven的javaFX+springboot项目,用户界面与后台逻辑分离方式

    下面来介绍创建maven的javaFX+springboot项目,基于用户界面与后天逻辑分离的方式,用户界面使用fxml文件来常见,类似于jsp,可以引入css文件修饰界面 maven依赖 <d ...

  3. cookie转换成字典类型方便scraoy 使用

    #bakooie装换成紫电模式方便scrapy使用 cookid = "_ga=GA1.2.1937936278.1538889470; __gads=ID=1ba11c2610acf504 ...

  4. dubbo和zookeeper结合使用

    1.相关依赖引入 阿里的dubbo包含了spring相关内容,引入依赖时,需要排除,使用我们自己项目中的spring依赖 <!-- start..............dubbo....... ...

  5. shell 中执行Oracle查询和执行存储过程

    [oracle@master2 test]$ more b.sh #!/bin/sh #数据库地址 ip=192.168.1.250 port sid=orcl username=c##scott p ...

  6. php--常见算法1

    <?php //递归输出123321 function digui($num){ echo $num; if($num<3){ digui($num+1); } echo $num; } ...

  7. python之初入Python

    python优缺点: Python的优点很多,简单的可以总结为以下几点. 简单和明确,做一件事只有一种方法. 学习曲线低,跟其他很多语言相比,Python更容易上手. 开放源代码,拥有强大的社区和生态 ...

  8. 【2017-03-28】JS基础、windows对象、history对象、location对象

    一.JS基础 JS - javaScript 1.js功能: 1).进行数据的运算.2).控制浏览器的一些功能.3).控制元素(属性.内容.样式) js引用位置: 可以放在html页的任意位置. 推荐 ...

  9. C++ 新特性 笔记

    摘录 constexptr C++14尝鲜:constexpr函数(编译期函数) 总结来说,就是在c++11之前,要实现编译期数值计算需要繁琐的模板元编程.在c++11 中,可以是函数,在一句rutu ...

  10. 白话跨域CORS

    跨域访问控制是浏览器和服务器按照约定,协同工作,守护安全的一种机制. 其中认为浏览器和服务器是安全的,但是浏览器上运行的页面(HTML+JS)可能不安全. 分几种不同方式. 页面跨域简单请求(Get/ ...