cometoj---contest#3 棋盘
棋盘:(状压dp)
传送门:https://www.cometoj.com/contest/38/problem/B?problem_id=1535
题目描述
小猫有一个 2×N 的棋盘,每一个格子放着一个黑棋子或白棋子。
小熊觉得小猫的棋盘不够好看,想要把棋盘上的一部分白棋子替换成黑棋子,使得所有黑棋子都能够在仅允许上下左右四个方向走,且仅经过黑棋子在的格子的情况下两两互相到达。
小熊想知道至少要将多少个白棋子替换成黑棋子。
注意:不能将黑棋子替换成白棋子。
输入描述
第一行有一个正整数 N (1≤N≤105)。
接下来两行,每行 N个整数,描述整个棋盘。若第 i 行的第 j个整数是 0,代表棋盘 (i,j) 的位置放着白棋子,若是 1 则放着黑棋子。
数据保证至少存在一个黑棋子。
输出描述
输出一行包含一个整数,表示答案。
样例输入 1
3
1 0 0
0 0 1
样例输出 1
2
样例输入 2
5
0 1 0 1 0
0 0 1 0 0
样例输出 2
1
提示
样例一中可以将第一行的两个白棋子替换成黑棋子。
样例二中可以将位置 (1, 3)(1,3) 的白棋子换成黑棋子。
大佬分析:(自己完全没想到QAQ)
开始遍历每⼀列,因为只有两⾏,含1的每⼀列⽆⾮就是:上 1下 1,上0 下 1,上1 下0 ;只有这三种情况是需要变
化前⾯列的 来使 联通的,观察这三种情况,上1 下1 时,变换个数就是上⼀次有 的列号与当前列号差值的绝对
值 (直接由上⼀个有 的位置沿着⾏直线变化到当前列);上 1下0 时,就需要看上⼀次有1 的那⼀列的1 的情况
了,如果上⼀次有 1处和当前列有1 处是同⼀⾏,说明可以直线变换过来,变换个数就是上⼀次有 1的列号与当前
列号差值的绝对值-1 ,如果不是同⼀⾏,则需要多加 1(需要多变换⼀个棋⼦);上 下 的情况和上⼀种情况类
似解法。因此关键就是保存上⼀次有 1处的那列情况,在遇到某列有 时考虑上⾯的情况然后累加就⾏了。
/* */
# include <stdio.h>
int main()
{
long long int map[][]={}, n, i, j, sum=;
scanf("%lld", &n);
for( i=; i<; i++ )
{
for( j=; j<n; j++ )
{
scanf("%lld", &map[i][j]);
}
}
int nowone = ;
int nowtwo = ;
int flag=;
int f;
int pre;
for( j=; j<n; j++ )
{
nowone=;
nowtwo=;
if( map[][j] )
{
nowone = ;
}
if( map[][j] )
{
nowtwo = ;
}
if( nowone || nowtwo )
{
if( flag== )
{
f = j;
if( nowone )///上1下0
{
pre = ;
}
if( nowtwo )///上0下1
{
pre = ;
}
if( nowone && nowtwo )///上1下1
{
pre = ;
}
flag = ;
}
else
{
if( nowone && nowtwo )
{
sum += j - f - ;
pre = ;
}
if( nowone && !nowtwo )///上1下0
{
sum += j-f-;
if( pre== )///上0下1
{
sum++;
pre = ;///前方不连通则变为联通,此时这一列的状态变为上1下1
}
else
{
pre = ;///前方已经联通,这一列的状态不变
}
}
if( !nowone && nowtwo )///上0下1
{
sum += j - f - ;
if( pre== )///上1下0
{
sum++;
pre = ;///前方不连通则变为联通,此时这一列的状态变为上1下1
}
else
{
pre=;///前方已经联通,这一列的状态不变
}
}
f = j;
}
}
}
printf("%lld\n", sum);
return ;
}
cometoj---contest#3 棋盘的更多相关文章
- [Cometoj#3 B]棋盘_状压dp
棋盘 题目链接:https://cometoj.com/contest/38/problem/B?problem_id=1535 数据范围:略. 题解: 因为行数特别小,所以$dp$的时候可以状压起来 ...
- CometOJ Contest #3 C
题目链接:https://cometoj.com/contest/38/problem/C?problem_id=1542&myself=0&result=0&page=1&a ...
- 【杂题】【CometOJ Contest #5】E:迫真大游戏【概率】【排列组合】【多项式】
Description 有一个n个点的环,有一个指针会从1号点开始向后扫描,每次扫描有p的概率删除当前点 询问每个点最后一个被删除的概率. 答案对998244353取模 n<=200000 So ...
- 「CometOJ」Contest #11
Link Aeon 显然字典序最大就是把最小的字母放在最后 Business [动态规划] 简单dp dp[i][j]dp[i][j]dp[i][j]表示到第iii天,当前有jjj块钱,最后返还的钱最 ...
- Comet OJ - Contest #3 B -棋盘 (思维+分类讨论)
题目描述 小猫有一个 2\times N2×N 的棋盘,每一个格子放着一个黑棋子或白棋子. 小熊觉得小猫的棋盘不够好看,想要把棋盘上的一部分白棋子替换成黑棋子,使得所有黑棋子都能够在仅允许上下左右四个 ...
- 【CometOJ】Comet OJ - Contest #8 解题报告
点此进入比赛 \(A\):杀手皇后(点此看题面) 大致题意: 求字典序最小的字符串. 一场比赛总有送分题... #include<bits/stdc++.h> #define Tp tem ...
- 2016 Multi-University Training Contest 3
5/11 2016 Multi-University Training Contest 3官方题解 2016年多校训练第三场 老年选手历险记 暴力 A Sqrt Bo(CYD) 题意:问进行多少次开根 ...
- [contest 782] 9.7
[contest 782] 9.7 - XJOI 个人觉得温暖题啊,,,可是卡毛空间呀!!! T1 传送
- Comet OJ - Contest #2 简要题解
Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...
随机推荐
- 环境配置--升级Python 3.6爬坑
升级到3.6之后,发现ctrl alt t呼不出命令台,找了半天发现update manager也打不开,而且没有错误报告.....查阅了一番资料看到有人有类似的问题(https://askubunt ...
- 前端开发 Angular
https://www.angularjs.net.cn/tutorial/18.html
- 删除链表的倒数第 n 个节点
难度: 中等 leetcode地址: https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/ 分析: 1 ...
- Mongodb 学习笔记(一)
MongoDB 是一款开源.跨平台.分布式,具有大数据处理能力的文档存储数据库.在 2007 年由 MongoDB 软件公司开发完成,并实现全部代码源发展.目 前,该文档数据库被国内外众多知名网因所采 ...
- 【转载】C#使用Math.Ceiling方法对计算结果向上取整操作
在C#的数值运算中,有时候需要对计算结果进行向上取整操作,支持设定结算结果的有效位数,Math.Ceiling方法是C#中专门用来对数值进行向上取整的方法,此方法和Math.Round方法.Math. ...
- python3基础之“小练习(1)”
(一)打印3个不同的字符 # a=int("123") # b="123" # c=1.2 # print(type(a),a) # print(type(b) ...
- 详解iOS的presentViewController(转)
一.用途和相关概念iOS中显示ViewController的方式有两种push和modal,modal也叫模态,模态显示VC是iOS的重要特性之一,其主要用于有以下场景: - 收集用户输入信息- 临时 ...
- centos 7.6 安装php70
1.首先查看是否有老版本 yum list installed | grep php 2.如果安装的有,清除老版本 yum remove php.x86_64 php-cli.x86_64 php-c ...
- 系统调用IO和标准IO
目录 1. 系统调用IO(无缓冲IO) 系统调用 常用系统调用IO函数 open close read write lseek ioctl 2. 标准IO(带缓冲IO) 概述 缓冲与冲洗 常用标准IO ...
- Intel虚拟化技术——EPT、VPID
背景 内存用于暂存CPU将要执行的指令和数据,所有程序的运行都必须先载入到内存中才可以,内存的大小及其访问速度也直接影响整个系统性能.在平台虚拟化技术中,Guest的运行也需要依赖内存.和运行在真实物 ...