题目链接:传送门

题目大意:

  两个长度为n的二进制串s,t,每次操作可以将s串的一段区间取反。求操作exactly twice后使得s=t的方法数。

思路:

  连续的尽可能长的 si ≠ ti 的区间简称A,连续的尽可能长的 si = ti 的区间简称B。

  则1-n可以划分为若干个AB交替出现,要求操作exactly twice后s=t,就是消去所有的A。

  发现每次操作最多只能使得A的数量减少1个。

所以若对于给出的s,t:

  ① cnt(A) ≥ 3:

    不能完成,方法数为0。

  ② cnt(A) = 2:

    有2 × 3 = 6种:(下划线表示反转,顺序对调就翻一倍)

    1)ABA + ABA

    2)ABA + ABA

    3)ABA + ABA

  ③ cnt(A) = 1:

    只要第一次操作能使得A的数量还是1即可:

    1)把A分两次翻转,有2 × (len(A)-1)种;

    2)翻转B的一段+A,有2 × (N-len(A))种;

  ④ cnt(A) = 0:

    此时整个1-n为B,任意取一段区间翻两次,有n × (n+1) / 2种。

代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int MAX_N = 1e6 + ; char s[MAX_N], t[MAX_N]; int main()
{
int T;
cin >> T;
while (T--) {
int N;
scanf("%d", &N);
scanf("%s%s", s+, t+);
int l, r, cntdif = ;
for (int i = ; i <= N; i++) {
if (s[i] != t[i]) {
cntdif++;
if (cntdif == )
break;
l = r = i;
while (i+ <= N && s[i+] != t[i+]) {
r++;
i++;
}
}
}
if (cntdif == ) {
puts("");
}
else if (cntdif == ) {
puts("");
}
else if (cntdif == ) {
int len = r-l+;
ll ans = ;
ans += (len-)*;
ans += (N-len)*;
printf("%lld\n", ans);
}
else if (cntdif == ) {
ll ans = 1LL * N * (N+)/;
printf("%lld\n", ans);
}
// puts("");
}
return ;
}
/*
10
1
1
0
2
00
11
5
01010
00111
3
111
111
7
1010101
1111111
*/

ZOJ4060 Flippy Sequence(思维题)的更多相关文章

  1. ZOJ 4060 - Flippy Sequence - [思维题][2018 ACM-ICPC Asia Qingdao Regional Problem C]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4060 题意: 给出两个 $0,1$ 字符串 $S,T$,现在你有 ...

  2. HDU 5805 NanoApe Loves Sequence (思维题) BestCoder Round #86 1002

    题目:传送门. 题意:题目说的是求期望,其实翻译过来意思就是:一个长度为 n 的数列(n>=3),按顺序删除其中每一个数,每次删除都是建立在最原始数列的基础上进行的,算出每次操作后得到的新数列的 ...

  3. CodeForces - 631C ——(思维题)

    Each month Blake gets the report containing main economic indicators of the company "Blake Tech ...

  4. 【交互 细节题 思维题】cf1064E. Dwarves, Hats and Extrasensory Abilities

    第一次做交互真有趣……:挺好的细节思维题 This is an interactive problem. In good old times dwarves tried to develop extr ...

  5. CodeForces - 1102A(思维题)

    https://vjudge.net/problem/2135388/origin Describe You are given an integer sequence 1,2,-,n. You ha ...

  6. ACM思维题训练 Section A

    题目地址: 选题为入门的Codeforce div2/div1的C题和D题. 题解: A:CF思维联系–CodeForces -214C (拓扑排序+思维+贪心) B:CF–思维练习-- CodeFo ...

  7. UVa 1584 Circular Sequence --- 水题

    UVa 1584 题目大意:给定一个含有n个字母的环状字符串,可从任意位置开始按顺时针读取n个字母,输出其中字典序最小的结果 解题思路:先利用模运算实现一个判定给定一个环状的串以及两个首字母位置,比较 ...

  8. zoj 3778 Talented Chef(思维题)

    题目 题意:一个人可以在一分钟同时进行m道菜的一个步骤,共有n道菜,每道菜各有xi个步骤,求做完的最短时间. 思路:一道很水的思维题, 根本不需要去 考虑模拟过程 以及先做那道菜(比赛的时候就是这么考 ...

  9. cf A. Inna and Pink Pony(思维题)

    题目:http://codeforces.com/contest/374/problem/A 题意:求到达边界的最小步数.. 刚开始以为是 bfs,不过数据10^6太大了,肯定不是... 一个思维题, ...

随机推荐

  1. [转]每天一个linux命令(44):top命令

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法.top是一个动态显示过程,即可以通过用户按键来不断刷新 ...

  2. Spring AOP+Log4j记录项目日志

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6567672.html 项目日志记录是项目开发.运营必不可少的内容,有了它可以对系统有整体的把控,出现任何问题 ...

  3. 【HTTP】boundary 中一个 = 导致HTTP上传文件失败

    (1)#define ABOUNDARY "----=_Resume_002_0CE7_01D1C649.298A8070" (2)#define ABOUNDARY " ...

  4. Win10系列:UWP界面布局基础1

    随着技术的不断发展,使用者对应用程序的界面体验提出了更高的要求,为了应对越来越复杂的界面设计需求和有效的简化界面开发过程,微软公司在其应用程序的开发技术当中引入一套新的应用程序界面描述语言,这就是XA ...

  5. 尚学堂java 参考答案 第九章

    一.选择题 1.AC 解析:A.注意题目是Collections不是 Collection,前者是一个until下的类,后者才是接口 C.Set中的数据是无序且不能重复的 2.A 解析:将发生数组越界 ...

  6. unity3D 中的C#脚本一个类调用另一类中简单方法

    案例展示 SubMenuManage类中的实例化代码如下: static SubMenuManage sub_this; public static SubMenuManage Instance() ...

  7. while循环以及格式化输出总结

    while循环: while 无限循环 count = 1 sum = 0 while True: sum = sum + count count = count + 1 if count == 10 ...

  8. 每天CSS学习之color

    color意为颜色,其作用是设置字体的颜色. 设置颜色的方式有以下几种: 1.使用颜色单词,如:red: 2.使用十六进制,如:#FFFFFF: 3.使用rgb(255,0,0); 让我们来实践一下, ...

  9. 用Python的导入csv、文本文件、Excel文件的数据

    使用read_csv函数导入CSV文件 read.csv函数语法 read_csv(file,encoding) 例子: Age,Name 22,wangwei 23,lixin 24,liqing ...

  10. C++基础知识:类的静态成员

    1.普通成员变量通过对象名能够访问public成员变量每个对象都可以有只属于自己的成员变量成员变量不能在对象之间共享 2.从命名空间的角度:类的静态成员只是类这个命名空间中的全局变量和全局函数不同之处 ...