CF991D Bishwock

题目描述

给一个\(2\times n\)的网格,上面一些位置以及被覆盖上了。现在你有一种形状为L的小块,每个由三个小格组成,构成L型

现在问你,当前的网格最多还能摆多少小块(不能覆盖以及覆盖过的格子)

输入格式

两行两个字符串由\(X,0\)组成,\(X\)表示被覆盖了,\(0\)表示还没有

输出格式

一行 一个整数

样例输入

00X00X0XXX0
0XXX0X00X00

样例输出

4

对于\(100\)%的数据满足\(n\le 10^5\)

题目分析

​ 大约一年前的模拟赛上似乎就出过这道题。(考试后证明我是对的......) 至于为什么要更这篇题解,因为今年差点没切(去年都切了.... 其实最后今年也没切,数组开小了)

​ 个人想法就不说了,乱七八糟想了一堆,一个没搞出来。周围大佬们都切了,就先去看T2了(事实证明是正确的,如果T1切掉也就不会那么认真的去考虑T2)。

​ 闲话少叙,步入正题。

​ 首先我们观察一下数据范围....(然鹅并没有什么用) 突破口是在\(2\times n\)的矩阵,以及只有一种L型的块块。 所以,对于一个\(2\times 2\)的矩阵,合法情况是一定的。具体几种长什么样可以手画一下。

​ 所以我们想到一种类似递推的更新方式。 预处理出来每列的状态:

​ \(f[i][1/2/3/4]\)分别表示每列的一种可能更新的状态。

​ \(f[i][1]\) \(XX\) \(f[i][2]\) \(0X\) \(f[i][3]\)$ X0 $ \(f[i][4]\) \(00\)

​ \(f[i][0]\)用来记录当前列的答案。

​ 然后就是一堆特判。 注意对于每列更新完之后,\(f[i][2/3]\)这两种情况需要清零,而\(f[i-1][4]=1\)且\(f[i][4]=1\)时,\(f[i][4]\)只会被用到一次,所以可以拆成\(f[i][2/3] = 1\)以便接下来的操作。具体实现见代码。

​ code:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100020;
int f[N][5];
char str[3][N];
int main()
{
// freopen("a.in", "r", stdin);
// freopen("a.out", "w", stdout);
scanf("%s", str[1] + 1);
scanf("%s", str[2] + 1);
int n = strlen(str[1] + 1);
memset(f, -1, sizeof f);
for(int i = 1 ; i <= n ; i ++)
f[i][0] = 0;
for(int j = 1 ; j <= n ; j ++)
{
if(str[1][j] == '0' && str[2][j] == '0')
f[j][4] = 1;
else
if(str[1][j] == '0' && str[2][j] == 'X')
f[j][3] = 1;
else
if(str[1][j] == 'X' && str[2][j] == '0')
f[j][2] = 1;
else
if(str[1][j] == 'X' && str[2][j] == 'X')
f[j][1] = 1;
}
for(int i = 2 ; i <= n ; i ++)
{
if(f[i - 1][4] == 1 && f[i][4] == 1)
{
f[i][0] ++;
f[i][2] = 1;
f[i][3] = 1;
f[i][4] = 0;
}
else
if(f[i - 1][2] == 1 && f[i][4] == 1)
{
f[i][0] ++;
f[i][4] = 0;
}
else
if(f[i - 1][3] == 1 && f[i][4] == 1)
{
f[i][0] ++;
f[i][4] = 0;
}
else
if(f[i - 1][4] == 1 && f[i][3] == 1)
{
f[i][0] ++;
f[i][3] = 0;
}
else
if(f[i - 1][4] == 1 && f[i][2] == 1)
{
f[i][0] ++;
f[i][2] = 0;
}
}
int ans = 0;
for(int i = 1 ; i <= n ; i ++)
ans += f[i][0];
printf("%d", ans);
fclose(stdin);
fclose(stdout);
return 0;
}

CF991D Bishwock的更多相关文章

  1. CF991D Bishwock 第十七 贪心

    Bishwock time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...

  2. [CF991D]Bishwock_状压dp

    Bishwock 题目链接:http://codeforces.com/problemset/problem/991/D 数据范围:略. 题解: 一眼题. 首先,每个$L$最多只占用两列,而且行数特别 ...

  3. 【Codeforces】Codeforces Round #491 (Div. 2) (Contest 991)

    题目 传送门:QWQ A:A - If at first you don't succeed... 分析: 按照题意模拟 代码: #include <bits/stdc++.h> usin ...

  4. 【Codeforces】Round #491 (Div. 2) 总结

    [Codeforces]Round #491 (Div. 2) 总结 这次尴尬了,D题fst,E没有做出来.... 不过还好,rating只掉了30,总体来说比较不稳,下次加油 A:If at fir ...

  5. Codeforces Round #491 (Div. 2)部分题解

    这场比赛好鬼畜啊,,A题写崩了wa了4遍,心态直接爆炸,本来想弃疗了,结果发现BCD都是傻逼题.. A. If at first you don't succeed...(容斥原理) 题目大意: 有$ ...

随机推荐

  1. hadoop高可用安装和原理详解

    本篇主要从hdfs的namenode和resourcemanager的高可用进行安装和原理的阐述. 一.HA安装 1.基本环境准备 1.1.1.centos7虚拟机安装,详情见VMware安装Cent ...

  2. 渐进深入理解Nginx

    文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 之前其实写过一篇文章具体介绍过:最基础的Nginx教学,当时有提到过Nginx有一个重要的功能:负载均衡.所以 ...

  3. TestNG(十三) 参数化测试(DataProvider)

    package com.course.testng.Parameter; import org.testng.annotations.DataProvider; import org.testng.a ...

  4. c语言的数据类型,运算符,存储类型

    [1词法符号]1. 关键字:32个1) 存储类型:决定(设备)变量的存储位置auto(自动型).extern(外部引用) static(静态型) register(寄存器类型)2) 数据类型:决定设备 ...

  5. Windows Docker 部署 Spring Boot 项目

    目录 Docker Configuration Config IDEA Plugin Create Spring Boot Project Containerize It Use Dockerfile ...

  6. Hadoop 之 HDFS基本概念

    1.HDFS的基本概念 答:块(Block).NameNode.DataNode.HDFS的文件被分成块进行存储,默认块的大小为64M,所以说块是文件存储和处理的逻辑单元.NameNode是管理节点, ...

  7. sql server 使用 partition by 分区函数 解决不连续数字查询问题

    sql server表中的某一列数据为不一定连续的数字,但是需求上要求按照连续数字来分段显示,如:1,2,3,4,5,6,10,11,12,13, 会要求这样显示:1~6,10~13.下面介绍如何实现 ...

  8. 使用System.Text.Json处理Json文档以及部分坑

    System.Text.Json处理Json文档需要用到JsonDocument,JsonElement,JsonProperty. JsonDocument就是一个表示Json文档的东西,JsonE ...

  9. 002-python函数、高级特性

    1.函数 1.1 定义函数 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回 自定义一个求绝对 ...

  10. RocketMQ 源码学习笔记————Producer 是怎么将消息发送至 Broker 的?

    目录 RocketMQ 源码学习笔记----Producer 是怎么将消息发送至 Broker 的? 前言 项目结构 rocketmq-client 模块 DefaultMQProducerTest ...