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 --- 字符编码学习小结(二)
距离上一篇的python --- 字符编码学习小结(一)已经过去2年了,2年的时间里,确实也遇到了各种各样的字符编码问题,也能解决,但是每次都是把所有的方法都试一遍,然后终于正常.这种方法显然是不科学 ...
- Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient报错,问题排查
背景 最近在整合pyspark与hive,新安装spark-2.3.3以客户端的方式访问hive数据,运行方式使用spark on yarn,但是在配置spark读取hive数据的时候,这里直接把hi ...
- “http”和“https”的区别是什么?优缺点是什么?
1. http 的URL 以http:// 开头,https以https:// 开头. 2. http 标准端口是80 ,https是443. 3.https 协议需要到ca申请证书,http不需要. ...
- android studio 出现 Default Activity not found
1.AndroidManifest.xml <activity android:name=".activity.StartPage" android:screenOrient ...
- RedHat6.9下替换yum源
因为RedHat的yum需要收费,且要注册后才能使用.因此想把Yum源更新为CentOS的.使用的RedHat版本为6.9,因此对应的CentOS版本也要为6.9 1. 检查并删除原有的yum源 rp ...
- 批处理引擎MapReduce内部原理
批处理引擎MapReduce内部原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MapReduce作业生命周期 MapReduce作业作为一种分布式应用程序,可直接运行在H ...
- 2013.6.21 - OpenNER第一天
下午去实验室继续写实验报告,跟伟杰要了一个实验报告,然后大师兄叫我,我们在走廊唠了一会儿. 大 师兄想做Open NE,他说这个会比较难,目前没有人做,因为还没有发现相关的文章,大家研究的都是指定了哪 ...
- qingqing的项目
1 https://www.cnblogs.com/zhangqing979797/p/10147679.html 2 https://www.cnblogs.com/zhangqing979797/ ...
- HTTP和HTTPS的区别和常见的面试题
本篇会着重介绍http和https的区别和常见的面试题 常见的http和https面试题: Http与Https的基本概念和他们的区别 HTTPS工作原理 常用的HTTP方法有哪些 GET方法与POS ...
- test20190725 夏令营测试11
50+80+90=220.(每题满分90) 砍树 小A在一条水平的马路上种了n棵树,过了几年树都长得很高大了,每棵树都可以看作是一条长度为a[i]的竖线段.由于有的树过于高大,挡住了其他的树,使得另一 ...