ZOJ4060 Flippy Sequence(思维题)
题目链接:传送门
题目大意:
两个长度为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(思维题)的更多相关文章
- 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$,现在你有 ...
- HDU 5805 NanoApe Loves Sequence (思维题) BestCoder Round #86 1002
题目:传送门. 题意:题目说的是求期望,其实翻译过来意思就是:一个长度为 n 的数列(n>=3),按顺序删除其中每一个数,每次删除都是建立在最原始数列的基础上进行的,算出每次操作后得到的新数列的 ...
- CodeForces - 631C ——(思维题)
Each month Blake gets the report containing main economic indicators of the company "Blake Tech ...
- 【交互 细节题 思维题】cf1064E. Dwarves, Hats and Extrasensory Abilities
第一次做交互真有趣……:挺好的细节思维题 This is an interactive problem. In good old times dwarves tried to develop extr ...
- CodeForces - 1102A(思维题)
https://vjudge.net/problem/2135388/origin Describe You are given an integer sequence 1,2,-,n. You ha ...
- ACM思维题训练 Section A
题目地址: 选题为入门的Codeforce div2/div1的C题和D题. 题解: A:CF思维联系–CodeForces -214C (拓扑排序+思维+贪心) B:CF–思维练习-- CodeFo ...
- UVa 1584 Circular Sequence --- 水题
UVa 1584 题目大意:给定一个含有n个字母的环状字符串,可从任意位置开始按顺时针读取n个字母,输出其中字典序最小的结果 解题思路:先利用模运算实现一个判定给定一个环状的串以及两个首字母位置,比较 ...
- zoj 3778 Talented Chef(思维题)
题目 题意:一个人可以在一分钟同时进行m道菜的一个步骤,共有n道菜,每道菜各有xi个步骤,求做完的最短时间. 思路:一道很水的思维题, 根本不需要去 考虑模拟过程 以及先做那道菜(比赛的时候就是这么考 ...
- cf A. Inna and Pink Pony(思维题)
题目:http://codeforces.com/contest/374/problem/A 题意:求到达边界的最小步数.. 刚开始以为是 bfs,不过数据10^6太大了,肯定不是... 一个思维题, ...
随机推荐
- Vmware tools install
Vmware tools 1◆ 下载 2◆ diagram Ifcfg-eth0 =====>关闭防火墙 systemctl stop firewalld.service ===== ...
- oracle中计算两个日期的相差天数、月数、年数、小时数、分钟数、秒数等
oracle如何计算两个日期的相差天数.月数.年数.小时数.分钟数.秒数 1.相差天数(两个日期相减) --Oracle中两个日期相差天数-- select TO_NUMBER(TO_DATE('20 ...
- JS 控制只能输入数字并且最多允许两位小数点
<html lang="en"> <head> <meta charset="UTF-8"> <title>JS ...
- 为什么IT运维工程师要学习Linux系统
不论你是否知道,其实你每天都在使用Linux.每次你访问微博.百度甚至是一些小电影网站,你的客户端(浏览器)都在与运行在Linux系统上的服务端程序进行通讯,大多数的电子设备,例如数位录像机.飞机.自 ...
- day12-python的类
类的一般形式: 创建类我们一般用class关键字来创建一个类,class后面跟类名字,可以自定义,最后以冒号结尾,如下所示: class ClassName: '''类的说明''' 类的内容 类的内容 ...
- 据说excel流是这么做,上次我分享的是csv格式。这个是excel格式。
import xlwt import StringIO import web urls = ( '/rim_request','rim_request', '/rim_export','rim_exp ...
- 十九. Python基础(19)--异常
十九. Python基础(19)--异常 1 ● 捕获异常 if VS异常处理: if是预防异常出现, 异常处理是处理异常出现 异常处理一般格式: try: <............. ...
- 自动化创建tornado项目
tornado目录结构: index.py 入口文件 app app目录 |___ __init__.py 初始化脚本 |___ templates 模板目录 | |___ index ...
- 基于spec互评Alpha版本
作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2323] 队名:二次元梦之队 组长:刘莹莹 组员:周昊 潘世维 王玉潘 赵美增 ...
- XGboost学习总结
XGboost,全称Extrem Gradient boost,极度梯度提升,是陈天奇大牛在GBDT等传统Boosting算法的基础上重新优化形成的,是Kaggle竞赛的必杀神器. XGboost属于 ...