可以在这里提交: 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的更多相关文章

  1. 【2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest D】---暑假三校训练

    2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest D Problem D. Distribution in Metagonia Input ...

  2. 2018-2019 ICPC, NEERC, Southern Subregional Contest

    目录 2018-2019 ICPC, NEERC, Southern Subregional Contest (Codeforces 1070) A.Find a Number(BFS) C.Clou ...

  3. Codeforces 2018-2019 ICPC, NEERC, Southern Subregional Contest

    2018-2019 ICPC, NEERC, Southern Subregional Contest 闲谈: 被操哥和男神带飞的一场ACM,第一把做了这么多题,荣幸成为7题队,虽然比赛的时候频频出锅 ...

  4. 模拟赛小结: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 ...

  5. 2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest (9/12)

    $$2015-2016\ ACM-ICPC,\ NEERC,\ Northern\ Subregional\ Contest$$ \(A.Alex\ Origami\ Squares\) 签到 //# ...

  6. ACM ICPC 2016–2017, NEERC, Northern Subregional Contest Problem J. Java2016

    题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229510 时间限制:2s 空间限制:256MB 题目大意: 给定一个数字c 用 " ...

  7. 2016-2017 ACM-ICPC, NEERC, Northern Subregional Contest Problem F. Format

    题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229510 时间限制:1s 空间限制:512MB 题目大意: 给定一个字符串,使用%[...] ...

  8. 2016-2017 ACM-ICPC, NEERC, Northern Subregional Contest Problem I. Integral Polygons

    题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229510 时间限制:2s 空间限制:256MB 题目大意: 给定一个凸多边形,有一种连接两个 ...

  9. 2016-2017 ACM-ICPC, NEERC, Northern Subregional Contest

    A. Anniversary Cake 随便挑两个点切掉就好了. #include<bits/stdc++.h> using namespace std; const int Maxn=2 ...

  10. 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, ...

随机推荐

  1. 【AS3 Coder】任务九:游戏新手引导的制作原理(下)

    在上一篇教程中,我们了解了一套我自创的新手引导管理框架的使用原理,那么在本篇教程中,我们将考虑新手引导制作中可能遇到的一些棘手问题及探讨其解决方案.Are you ready my baby? Let ...

  2. 初识Kafka:构架、生产消费模型以及其他相关概念

    当前使用的事件总线采用的是Kafka分布式消息队列来完成的,近来项目需要接入到事件总线中,故开启了kafka的学习之旅(之前一直在听说kafka这玩意儿,但是学习计划中还没有将它安排进去,借着这个机会 ...

  3. sqls

    ALTER TABLE `shh_data`.`topic_floor` ADD COLUMN `updated_date` DATETIME NULL AFTER `publish_date`,AD ...

  4. Netty源码细节-accept、read(Linux os层 + Netty层代码细节)(转)

    原文:http://budairenqin.iteye.com/blog/2215899 这篇分析一下accept的细节, 我觉得网络IO相关开发很多时候不能仅仅局限于java层, 尤其从accept ...

  5. Servlet——简单用户登录实例+http协议解析

    编写项目.用户登录系统1.0版本号 登录界面Servlet: package com.gavin.view; import java.io.IOException; import java.io.Pr ...

  6. vue - 认识ora

    主要用来实现node.js命令行环境的loading效果,和显示各种状态的图标等... const ora = require('ora'); const spinner = ora('Loading ...

  7. Grow heap (frag case) to 6.437MB for 1114126-byte allocation

    本篇文章是对Grow heap (frag case) 堆内存过大的问题进行了详细的分析介绍,需要的朋友参考下 对于Android开发者来说虽然使用了可以自动管理内存的Java语言,但是对于内存管理不 ...

  8. WPF中Auto与*的差别

    Auto 表示自己主动适应显示内容的宽度, 如自己主动适应文本的宽度,文本有多长,控件就显示多长. * 则表示按比例来分配宽度. <ColumnDefinition Width="3* ...

  9. BASE64Decoder的引用

    project---->properties--->Libraries--->JRE System Library--->Access rules--->Edit---& ...

  10. Function.prototype.bind、call与apply方法简介

    前言 前段时间面试遇见一题,题目内容大概是 function Parent() { this.prop = 'parent'; } Parent.prototype.get = function() ...