题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4060

题意:

给出两个 $0,1$ 字符串 $S,T$,现在你有两次对 $S$ 作区间翻转($0 \rightarrow 1,1 \rightarrow 0$)的操作,

用四元组 $(l_1,r_1,l_2,r_2)$ 表示,代表第一次翻转区间 $[l_1,r_1]$,第二次翻转区间 $[l_2,r_2]$。

问你有多少个四元组可以使得 $S=T$。

题解:

把 $S$ 尽可能少地分割成若干个子串。若某一子串和相应区间的 $T$ 一样,记作 $B$;反之,则记作 $A$。

因此若 $A$ 的数量大于两个,就不可能通过区间翻转两次使得 $S=T$,因此 $A$ 最多是两个。

分类讨论:

  1. $A$ 有 $0$ 个,即整个$S$ 可表示为 $B$,任意翻转两次相同区间 $[i,j]$ 即可。整个 $1 \sim |S|$ 可以有 $|S| + (|S|-1) + \cdots + 1 = \frac{|S|(|S|+1)}{2}$。
  2. $A$ 有 $1$ 个,即$S$ 可表示为 $(B)A(B)$。若两边都没有 $B$,则可以将 $A$ 分成两个部分 $[l,m],[m+1,r]$ 分别翻转,考虑 $m$ 取值的可能有 $2 \times (|A|-1)$ 种;若两侧都有 $B$,即 $BAB$,则应在前面那种基础上,再算上,在某一侧的 $B$ 中挑选一个左端点,再以 $A$ 的右端点为区间右端点,这样一来有 $2 \times |B|$ 种选择。两者加起来即 $2 \times (|A|-1+|B|) = 2 \times (|S|-1)$。
  3. $A$ 有 $2$ 个,即$S$ 可表示为 $(B)ABA(B)$。只能有三种翻法:①ABA,B;②AB,BA;③A,A。因此即 $2 \times 3 = 6$ 种可能性。

AC代码:

#include<bits/stdc++.h>
using namespace std;
int n;
string s,t;
int main()
{
ios::sync_with_stdio();
cin.tie();
int T;
cin>>T;
while(T--)
{
cin>>n>>s>>t;
int cnt=;
for(int i=;i<n;i++) {
if((i== || s[i-]==t[i-]) && s[i]!=t[i]) cnt++;
}
if(cnt>) cout<<"0\n";
else if(cnt==) cout<<"6\n";
else if(cnt==) cout<<(*n-)<<'\n';
else cout<<((long long)n*(n+)/)<<'\n';
}
}

ZOJ 4060 - Flippy Sequence - [思维题][2018 ACM-ICPC Asia Qingdao Regional Problem C]的更多相关文章

  1. ZOJ 4070 - Function and Function - [签到题][2018 ACM-ICPC Asia Qingdao Regional Problem M]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5840 Time Limit: 1 Second Mem ...

  2. ZOJ 4062 - Plants vs. Zombies - [二分+贪心][2018 ACM-ICPC Asia Qingdao Regional Problem E]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4062 题意: 现在在一条 $x$ 轴上玩植物大战僵尸,有 $n$ ...

  3. ZOJ 4067 - Books - [贪心][2018 ACM-ICPC Asia Qingdao Regional Problem J]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4067 题意: 给出 $n$ 本书(编号 $1 \sim n$), ...

  4. ZOJ 4063 - Tournament - [递归][2018 ACM-ICPC Asia Qingdao Regional Problem F]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4063 Input Output Sample Input 2 3 ...

  5. The 2018 ACM-ICPC Asia Qingdao Regional Contest(部分题解)

    摘要: 本文是The 2018 ACM-ICPC Asia Qingdao Regional Contest(青岛现场赛)的部分解题报告,给出了出题率较高的几道题的题解,希望熟悉区域赛的题型,进而对其 ...

  6. 2015 ACM/ICPC Asia Regional Changchun Online HDU 5444 Elven Postman【二叉排序树的建树和遍历查找】

    Elven Postman Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  7. hduoj 4712 Hamming Distance 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4712 Hamming Distance Time Limit: 6000/3000 MS (Java/Other ...

  8. 2016 ACM/ICPC Asia Regional Dalian Online 1006 /HDU 5873

    Football Games Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  9. hdu 5444 Elven Postman(二叉树)——2015 ACM/ICPC Asia Regional Changchun Online

    Problem Description Elves are very peculiar creatures. As we all know, they can live for a very long ...

随机推荐

  1. webstorm快捷键 webstorm keymap内置快捷键英文翻译、中英对照说明

    20160114参考网络上的快捷键,整理自己常用的: 查找/代替shift+shift 快速搜索所有文件,简便ctrl+shift+N 通过文件名快速查找工程内的文件(必记)ctrl+shift+al ...

  2. 单片机成长之路(51基础篇) - 008 C51 的标示符和关键字

    标准 C 语言定义了 32 个关键字,如下表(ANSI C的32个关键字): C51在此基础上针对单片机功能进行了扩展,详情见下表(C51编译器扩充关键字): C 51的数据类型 51单片机使用的C语 ...

  3. php的Allowed memory size of 134217728 bytes exhausted问题解决办法

    php的Allowed memory size of 134217728 bytes exhausted问题解决办法 报错: Fatal error: Allowed memory size of 1 ...

  4. IoC之AutoFac(一)——简单使用和组件注册

    阅读目录 一.AutoFac简单使用 二.注册 2.1 注册方式 2.2 带参数注册 回到顶部 一.AutoFac简单使用 1 namespace AutofacDemo 2 { 3 class Pr ...

  5. [转]MPP架构

    数据库构架设计中主要有Shared Everthting.Shared Nothing.和Shared Disk: Shared Everthting:一般是针对单个主机,完全透明共享CPU/MEMO ...

  6. 从yield 到yield from再到python协程

    yield 关键字 def fib(): a, b = 0, 1 while 1: yield b a, b = b, a+b yield 是在:PEP 255 -- Simple Generator ...

  7. 安全工具-Arachni

    Arachni是一个多功能.模块化.高性能的Ruby框架,旨在帮助渗透测试人员和管理员评估web应用程序的安全性.同时Arachni开源免费,可安装在windows.linux以及mac系统上,并且可 ...

  8. 关于VMware Linux 虚拟机忘记root 密码找回

    因为昨天新安装过虚拟机设置了新的密码,再加上我好长时间没有用自己旧的虚拟机,导致忘记了密码,原来虽然知道在单用模式下,找回密码,但是确实是自己从来都没有做过,还好我们组大手飞翔哥告诉了我,怎么找回ro ...

  9. python 读取大文件,按照字节读取

    def read_bigFile(): f = open("123.dat",'r') cont = f.read() : print(cont) cont = f.read() ...

  10. XMind8 破解激活教程(最详细,一定是有效的!!!)

    下载安装包 首先去xmind国外官网下载对应操作系统的安装包,国内官网的那个是有残缺的,不支持破解. 点击链接进行下载安装包:https://pan.baidu.com/s/1VITXSEQvwGDi ...