首页 > 其他分享 >P3392 涂国旗 题解

P3392 涂国旗 题解

时间:2023-06-07 14:55:08浏览次数:39  
标签:国旗 int 题解 ...... P3392 MAXN include 分割线

题目大意

题目真的是不说人话......

有一个国家的国旗是由一个 N * M 的方格组成的。如果想要这面国旗合法,就必须满足要求:

  • 国旗从上到下必须是白色、蓝色和红色,顺序不能改变。
  • 每一种颜色都至少有一行。

小a这时候捡到了一块破布,希望你通过涂颜色的方式,把破布成合法的国旗,并且要求涂的地方最少,输出有几个要涂的地方。

话说这小a......
然后这国旗好像是俄罗斯的

思路

一开始我还在想dp,想不出来,一看数据范围......

连100都不到,dp啥啊......吐槽一句,这要不是kkk出的题,肯定是红的。还橙题唉

废话说完了。思路就是暴力。但是我们需要先做一下初始化。初始化什么呢?
大家想一想,我们是要统计最少的填涂次数。所以,我们把每一行不是 "W"、"B"、"R"的代价算出来,存到三个数组里。

好,现在有了这些东西,开始正式暴力了。

我们其实只需要枚举两条分割线,分割线就是两种不同颜色中间的那条线。这样,有了两条分割线,就可以算答案,然后取最小值就行了。

ok啊,看代码!

代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#define MAXN 55
using namespace std;

int n, m;
char s[MAXN][MAXN];
int cntW[MAXN], cntB[MAXN], cntR[MAXN];
int answer = 1e9;

int main () {
	cin >> n >> m;

	for (int i = 1; i <= n; ++i) {
		int cnt1 = 0, cnt2 = 0, cnt3 = 0;
		for (int j = 1; j <= m; ++j) {
			cin >> s[i][j];
			if (s[i][j] != 'W') cnt1 += 1;
			if (s[i][j] != 'B') cnt2 += 1;
			if (s[i][j] != 'R') cnt3 += 1;
			cntW[i] = cnt1;
			cntB[i] = cnt2;
			cntR[i] = cnt3;
		}
	}

	int c = 0;
	for (int i = 2; i <= n - 1; ++i) {
		for (int j = i; j <= n - 1; ++j) {
			for (int a = 1; a < i; ++a) {
				c += cntW[a];
			}
			for (int a = i; a <= j; ++a) {
				c += cntB[a];
			}
			for (int a = j + 1; a <= n; ++a) {
				c += cntR[a];
			}
			answer = min (answer, c);
			c = 0;
		}
	}

	cout << answer << endl;
	return 0;
}

完结散花。

道路千万条,自己编码第一条。
复制棕名后,陶片放逐两行泪。

标签:国旗,int,题解,......,P3392,MAXN,include,分割线
From: https://www.cnblogs.com/blogs-for-Ruan-ji/p/17463307.html

相关文章

  • 题解 P4556 [Vani有约会]雨天的尾巴 /【模板】线段树合并
    传送门如题目所言,这就是个线段树合并的板子题。题目大意题目描述首先村落里的一共有\(n\)座房屋,并形成一个树状结构。然后救济粮分\(m\)次发放,每次选择两个房屋\((x,y)\),然后对于\(x\)到\(y\)的路径上(含\(x\)和\(y\))每座房子里发放一袋\(z\)类型的救济粮。然......
  • 【每日一题】LeetCode 786. 第K个最小的素数分数(待补全题解思路)
    题目给你一个按递增顺序排序的数组arr和一个整数k。数组arr由1和若干素数组成,且其中所有整数互不相同。对于每对满足0<i<j<arr.length的i和j,可以得到分数arr[i]/arr[j]。那么第k个最小的分数是多少呢?以长度为2的整数数组返回你的答案,这里answer......
  • 2023上半年(下午)网络工程师试题解析
    2023上半年(下午)网络工程师试题解析试题一(20分)某企业办公楼网络拓扑如图1-1所示。该网络中交换机Switch1-Switch4均是二层设备,分布在办公楼的各层,上联采用千兆光纤。核心交换机、防火墙、服务器部署在数据机房,其中核心交换机实现冗余配置。图1-1问题1(4分)该企业办公网络采用172.16.1......
  • CF1559D2 Mocha and Diana (Hard Version) 题解
    Luogu|Codeforces题意给定两个森林\(A\)和\(B\),均有编号\(1\)到\(n\)的节点,边数分别为\(m_1,m_2\)。现在进行加边操作,但是有两个要求:如果在第一个森林加一条\((u,v)\)的边,第二个森林也要进行同样的操作。反之同理。加边后两个森林依旧是森林。一棵树也是森林。......
  • 应用问题解决-分布式锁(LUA保证删除原子性)
    问题:删除操作缺乏原子性场景1、index1获得锁、执行具体操作、比较lock的uuid值确实和自己生成的uuid是否相等,相等则删除锁。uuid=v1set(lock,uuid)uuid.equals(get("lock"))2、但是index1执行删除前,lock刚好过期时间已经到了,被redis自动释放3、此时index2获取锁,执行具体......
  • 在centos7升级nodejs存在的无法切换版本的问题解决
    1.安装n管理工具npminstall-gn安装最新版本nlatest安装指定版本 n8.11.3 2.切换nodejs版本n选择已安装的版本 ο node/8.11.3  node/10.4.1查看当前版本node-v,下面表示已切换成功v8.13.3但问题来了,切换后,查看版本还是原来的v6.13.3,看下面 使用n切换nodejs......
  • 应用问题解决——缓存穿透、缓存击穿、缓存雪崩
    一、缓存穿透缓存穿透:key对应的数据在数据源并不存在,每次针对key的请求从缓存中获取不到,请求都会压到数据源,从而可能压垮数据源,比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库现象:1、应用服务器压力变大2、redis命中率......
  • Meteors 题解
    Meteors蒟蒻初学整体二分,写一篇题解记录一下思考与看法。题目大意在一个环形的轨道上分别着若干国家的空间站,在接下来的一段时间内会出现若干次陨石,每次出现在环形的某一段轨道,每个国家都想收集一定量的陨石,需要判断每个国家最少在什么时候可以集齐所需的陨石。思路分析首先......
  • Full Tank 题解
    FullTank题目大意给定一张\(n\)个点,\(m\)条边的连通无向图,在每个点有一个加油站,油价为该点的点权,每条边的油耗为该边的边权。现给出若干询问,问一辆油箱容量为\(c\)的车子是否能从\(s\)开到\(e\),如果可以,求出最小所需的钱。思路分析看到这种有图有权求最小消耗的题,我......
  • Visible Lattice Points 题解
    VisibleLatticePoints题目大意给定一个\(N×N×N\)的由若干点组成的立方体,点的坐标从\((0,0,0)\)到\((N,N,N)\),求从点\((0,0,0)\)处可以看见多少个点。思路分析我们将立方体上的点分成三类:在\(xy,yz,xz\)平面上的点。在\(x,y,z\)轴上的点。即不在平面,也不在......