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. HTML-css样式引用方式

    1.使用行内样式表 语法:在标签内部写入一个style属性. 优点:没有样式表文件,在某些时候可以提高效率: 优先级高. 缺点:多个页面难以共享样式,不利于代码复用: HTML和CSS代码混杂,不利于 ...

  2. 实操:Could not autowire No beans of 'FastDFS Client' type found 的解决方法

    前言: 今天接手了同事之前做的一个小项目,里面涉及到了 FastDFS 的使用.但是当我在本地运行项目的时候,却报了 Could not autowire No beans of 'FastDFS C ...

  3. Hadoop 之 HDFS基本概念

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

  4. spring注解方式,异常 'sessionFactory' or 'hibernateTemplate' is required的解决方法

    做单元测试的时候,抛出异常 Caused by: java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' ...

  5. Python必备收藏!Pycharm 常用快捷键思维导图!

    本内容首发公众号[计算机视觉联盟],关注获取更多资料! 考虑到可能图片压缩,将思维导图的pdf和jpg版本都上传了百度云,大家可以下载打印一张A4纸,方便查询! 公众号后台回复关键词: 2019082 ...

  6. 环境搭建-CentOS集群搭建

    环境搭建-CentOS集群搭建 写在前面 最近有许多小伙伴问我,大数据的hadoop分布式集群该如何去搭建.所以,想着,就写一篇博客,帮助到更多刚入门大数据的人.本博客会一步一步带你实现一个Hadoo ...

  7. 引用极光jar包之后出现控制台日志打印不出来的问题。解决!

    由于极光的jar包中引用的有log4j,项目本身也引用有log4j,如果版本有冲突,则会出现控制台日志记录打印不出来的现象.解决:引用极光jar包的时候,排除log4j. <dependency ...

  8. jenkins+ant构建项目时候build.xml需要改动的地方说明

    上一节将build.xml文件代码列出来了,这一节给出说明,要想使用该文件,需要变更的地方有哪些.

  9. jedis指定数据库

    正常情况下,我们通过get或者set方法是从db0中取数据. 1.redis提供了 select命令,可以通过select index 这个指令,将数据库切换到index所在的那个数据库上 2.jed ...

  10. Onethink上传服务器后登录不了的问题

    本地修改完Onethink后上传到服务器,进入后台登录的时候,发现输入用户名和密码和验证码后,第一次点击登录没反应,第二次点击提示验证码错误. 经过一研究发现 onethink 的登陆是通过API连接 ...