2015-2016ACM-ICPC NEER northern-subregional-contest C Concatenation
可以在这里提交: http://codeforces.com/gym/100801
题目大意:
给出两个由小写字母组成的字符串S,T,从S中取一个非空前缀,从T中取一个非空后缀,拼接成一个新的字符串。 问这样能得到多少本质不同的新字符串。
|S|,|T|<=1e5
题解:
考虑拼接得到的一个串X,用can[i]=1表示可以用S的前i个字符和T的某个后缀拼接出X。
有一个很重要的性质就是 can[i]=1的段是连续的,也就是说 如果 can[i]=1 can[j]=1 那么 can[k]=1 (i<=k<=j) 在纸上画一下就知道了。
那么如果对于一个串X,统计出有多少个i使得can[i]=can[i+1] 就是重复的次数。
再来看什么情况下can[i]=can[i+1]:
设|S|=n, |T|=m,|X|=l 字符串下标从1开始。
can[i]=can[i+1] <-> S[i+1]=T[m-(l-i)+1].
所以S中和T中一组相等字符 就对应了 一种 重复的情况。 因此只要统计出S和T中每个字母出现多少次从总数减去就好了。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>
using namespace std; typedef long long ll;
#define N 100100
map<int,int> mp1,mp2; char s1[N],s2[N];
int main()
{
freopen("concatenation.in","r",stdin);
freopen("concatenation.out","w",stdout); while (scanf("%s%s",s1,s2)!=EOF)
{
mp1.erase(mp1.begin(),mp1.end());
mp2.erase(mp2.begin(),mp2.end());
int n=strlen(s1),m=strlen(s2);
for (int i=;i<n;i++) mp1[s1[i]]++;
for (int i=;i<m-;i++) mp2[s2[i]]++;
ll ans=1ll*n*m;
for (int c='a';c<='z';c++) ans-=1ll*mp1[c]*mp2[c];
printf("%I64d\n",ans);
}
return ;
}
注意在CF上交的时候要用文件输入输出...
加强版: 如果给出多个字符串, 可以任选一个串的前缀和另外一个串的后缀拼接应该怎么做?
只要建一棵prefix trie和suffix trie,答案就是两棵树节点数的乘积 减去sum(cnt1[c]*cnt2[c]) cnt1[c],cnt2[c]分别表示字母c在两棵树中出现的次数。
2015-2016ACM-ICPC NEER northern-subregional-contest C Concatenation的更多相关文章
- 【2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest D】---暑假三校训练
2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest D Problem D. Distribution in Metagonia Input ...
- 2018-2019 ICPC, NEERC, Southern Subregional Contest
目录 2018-2019 ICPC, NEERC, Southern Subregional Contest (Codeforces 1070) A.Find a Number(BFS) C.Clou ...
- Codeforces 2018-2019 ICPC, NEERC, Southern Subregional Contest
2018-2019 ICPC, NEERC, Southern Subregional Contest 闲谈: 被操哥和男神带飞的一场ACM,第一把做了这么多题,荣幸成为7题队,虽然比赛的时候频频出锅 ...
- 模拟赛小结:2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest
2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest 2019年10月11日 15:35-20:35(Solved 8,Penalty 675 ...
- 2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest (9/12)
$$2015-2016\ ACM-ICPC,\ NEERC,\ Northern\ Subregional\ Contest$$ \(A.Alex\ Origami\ Squares\) 签到 //# ...
- ACM ICPC 2016–2017, NEERC, Northern Subregional Contest Problem J. Java2016
题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229510 时间限制:2s 空间限制:256MB 题目大意: 给定一个数字c 用 " ...
- 2016-2017 ACM-ICPC, NEERC, Northern Subregional Contest Problem F. Format
题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229510 时间限制:1s 空间限制:512MB 题目大意: 给定一个字符串,使用%[...] ...
- 2016-2017 ACM-ICPC, NEERC, Northern Subregional Contest Problem I. Integral Polygons
题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229510 时间限制:2s 空间限制:256MB 题目大意: 给定一个凸多边形,有一种连接两个 ...
- 2016-2017 ACM-ICPC, NEERC, Northern Subregional Contest
A. Anniversary Cake 随便挑两个点切掉就好了. #include<bits/stdc++.h> using namespace std; const int Maxn=2 ...
- 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred)
A. Find a Number 找到一个树,可以被d整除,且数字和为s 记忆化搜索 static class S{ int mod,s; String str; public S(int mod, ...
随机推荐
- CentOS--在CentOS安装PHP5.6
查看centos的版本: [root@localhost ~]# lsb_release -a LSB Version: :core-3.1-amd64:core-3.1-ia32:core-3 ...
- nullptr 与 constexpr
nullptr nullptr出现的目的自然是替换NULL的低位.C++可能会将NULL.0视为同一种东西.这取决于编译器是如何定义的,有的编译器定义NULL为 ( (void * )0) ,有的 ...
- ylbtech-LanguageSamples-Generics(泛型)
ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-Generics(泛型) 1.A,示例(Sample) 返回顶部 “泛型”示例 (C#) ...
- ylbtech-LanguageSamples-ComInteropPart2(COM 互操作第二部分)
ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-ComInteropPart2(COM 互操作第二部分) 1.A,示例(Sample) ...
- rundll32.exe的相关使用语句
命令列: rundll32.exe shell32.dll,Control_RunDLL 功能: 显示控制面板 命令列: rundll32.exe shell32.dll,Control_RunDLL ...
- Centos下输入法全角半角转换
写个文档 ,发现输入法的设置框没有了,打出来的字全是全角,找了半天终于发现在设置的快捷键. 废话少说,Centos的全角半角转换快捷键是shift+space. 中英文标点的转换快捷键 ctrl+.
- poj_1284_原根
一開始看题的时候第一想法就是暴力,可是无奈数据量有点大,看了题解之后才知道原来牵扯到数论上的一个叫做原根的东西,这个题的题意就是,给你一个奇素数,问题他的原根有多少.依据初等数论上所说,此时牵扯到了三 ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-报错0X4655,18005错误怎么办
首先确认驱动器没有报错(如果驱动器报错,请先解决绝对值编码器的清除多圈数据问题) 报错一般上使能就会报错,没法测试运转,而且不管是用贝福自带的NC功能还是自己写的都会一样的效果 请删除在贝福的Et ...
- 网络编程基础——学习阻塞,非阻塞(select和epoll)
<h3 class="xyn" helvetica="" neue',="" helvetica,="" aria ...
- ACE_Task::putq(转)
int ACE_Task< ACE_SYNCH_DECL >::putq ( ACE_Message_Block * , ACE_Time_Value * timeout ...