2018 ACM-ICPC 亚洲区域赛青岛站 C-Flippy Sequence(计数)

2023-10-18 00:10

本文主要是介绍2018 ACM-ICPC 亚洲区域赛青岛站 C-Flippy Sequence(计数),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

思路来源

https://blog.csdn.net/Game_Acm/article/details/83745455

题意

给两个01串A串和B串,在A串中可以进行区间翻转操作,可以使得一个区间内所有的0变成1,所有的1变成0,求恰好翻转两次使得A串变为B串的方案数。

两个方案数不同当且仅当至少有一个区间端点不同。

题解

先将两个串模拟异或一下得到一个新串。

统计新串的1的段数,

 

若大于3,则无法通过两次操作还原,为0

 

若为2,不妨记[l1,r1]在新串中是1,[l2,r2]在新串中是1,l1<r1<l2<r2

则答案一定是[l1,r1,l2,r2],[l1,l2-1,r1+1,r2],[l1,r2,r1+1,l2-1]三种,考虑顺序共6种

即恰好翻转两个区间,和将中间的空白区间翻转两次情况下翻转整个区间。

 

若为1,不妨记[l3,r3]在新串中是1,

首先,考虑只还原1的情形,即加挡板将[l3,r3]分为两段,r3-l3种,

考虑将0的部分翻转两次,

①固定左端点为l3的情形,右端点在r3右取,ans+=n-r3

②固定右端点为r3的情形,左端点在l3左取,ans+=l3-1

三段相加为n-1,考虑顺序,2*(n-1)

 

若为0,考虑将某段区间翻转2次,

答案为区间数,n*(n+1)/2

代码

#include <iostream>
#include <algorithm> 
#include <cstring>
#include <cstdio>
#include <cmath>
#include <set>
#include <map>
#include <vector>
#include <bitset>
#include <stack>
#include <queue>
#include <functional>
const int INF=0x3f3f3f3f;
const int maxn=1e6+10; 
const int mod=1e9+7;
const int MOD=998244353;
const double eps=1e-7;
typedef long long ll;
#define vi vector<int> 
#define si set<int>
#define pii pair<int,int> 
#define pi acos(-1.0)
#define pb push_back
#define mp make_pair
#define lowbit(x) (x&(-x))
#define sci(x) scanf("%d",&(x))
#define scll(x) scanf("%lld",&(x))
#define sclf(x) scanf("%lf",&(x))
#define pri(x) printf("%d",(x))
#define rep(i,j,k) for(int i=j;i<=k;++i)
#define per(i,j,k) for(int i=j;i>=k;--i)
#define mem(a,b) memset(a,b,sizeof(a)) 
using namespace std;
int t,n,cnt,now,q;
char a[maxn],b[maxn],ans[maxn];
int main()
{  sci(t);while(t--){cnt=0,now=0,q=0;sci(n);scanf("%s",a);scanf("%s",b);rep(i,0,n-1){if(a[i]=='0'&&b[i]=='0')ans[i]='0';else if(a[i]=='1'&&b[i]=='1')ans[i]='0';else ans[i]='1';if(ans[i]=='1')now++;else if(now){if(cnt==0)q=now;cnt++,now=0;}}if(now){if(cnt==0)q=now;cnt++,now=0;} if(cnt>2)puts("0");else if(cnt==2)puts("6");else if(cnt==0)printf("%lld\n",n*(n+1)/2);else printf("%d\n",2*(n-1));//n-q+(q-1)}return 0;
}

 

这篇关于2018 ACM-ICPC 亚洲区域赛青岛站 C-Flippy Sequence(计数)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/228885

相关文章

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

YOLOv8/v10+DeepSORT多目标车辆跟踪(车辆检测/跟踪/车辆计数/测速/禁停区域/绘制进出线/绘制禁停区域/车道车辆统计)

01:YOLOv8 + DeepSort 车辆跟踪 该项目利用YOLOv8作为目标检测模型,DeepSort用于多目标跟踪。YOLOv8负责从视频帧中检测出车辆的位置,而DeepSort则负责关联这些检测结果,从而实现车辆的持续跟踪。这种组合使得系统能够在视频流中准确地识别并跟随特定车辆。 02:YOLOv8 + DeepSort 车辆跟踪 + 任意绘制进出线 在此基础上增加了用户

2018秋招C/C++面试题总结

博主从8月中旬开始大大小小面试了十几家公司,至今也许是告一段落吧,希望后面会有好结果,因此总结记录一些C/C++方向常见的问题。和大家一起学习! 参考了互联网的各种资源,自己尝试归类整理,谢谢~ 一、C和C++的区别是什么? C是面向过程的语言,C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。 C中函数不能进行重载,C++函数可以重载 C++在C的基础上增添类,C是一个结构

归并排序/计数排序

1:归并排序 1.1:代码 void _MergeSort(int* arr, int left, int right, int* tmp){if (left >= right){return;}int mid = (left + right) / 2; _MergeSort(arr, left, mid, tmp); _MergeSort(arr, mid+1, righ

牛客小白月赛100(A,B,C,D,E,F三元环计数)

比赛链接 官方讲解 这场比较简单,ABC都很签到,D是个不太裸需要预处理的 B F S BFS BFS 搜索,E是调和级数暴力枚举,F是三元环计数。三元环考的比较少,没见过可能会偏难。 A ACM中的A题 思路: 就是枚举每个边变成原来的两倍,然后看看两短边之和是否大于第三边即可。 不能只给最短边乘 2 2 2,比如 1 4 8 这组数据,也不能只给第二短边乘 2 2 2,比

大厂算法例题解之网易2018秋招笔试真题 (未完)

1、字符串碎片 【题目描述】一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,“aaabbaaac” 是由下面碎片组成的:‘aaa’,‘bb’,‘c’。牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的 平均长度是多少。 输入描述: 输入包括一个字符串 s,字符串 s 的长度 length(1 ≤ length ≤ 50),s 只含小写字母(‘a’-‘z’) 输出描述

浙大数据结构:02-线性结构4 Pop Sequence

这道题我们采用数组来模拟堆栈和队列。 简单说一下大致思路,我们用栈来存1234.....,队列来存输入的一组数据,栈与队列进行匹配,相同就pop 机翻 1、条件准备 stk是栈,que是队列。 tt指向的是栈中下标,front指向队头,rear指向队尾。 初始化栈顶为0,队头为0,队尾为-1 #include<iostream>using namespace std;#defi

JVM - Java内存区域

文章目录 目录 文章目录 运行时数据区域 程序计数器 栈 Java虚拟机栈 本地方法栈 栈帧的组成 局部变量表 操作数栈 帧数据 堆 方法区 直接内存 总结 运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存区域划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁时间,有的区域随着虚拟机进程的启动而一直存在,有的区域则是依赖

【转载】ACM感悟

今天看了一篇我们学校前辈的ACM的感悟,觉得写的十分有道理,这里转载,文章还会不断的改进和更新。 原文链接:http://www.cnblogs.com/Chierush/p/3760870.html?ADUIN=1339764596&ADSESSION=1401536826&ADTAG=CLIENT.QQ.5329_.0&ADPUBNO=26349 声明:本文是写给弱校ACM新手的一点