D. Accommodation

news2024/11/23 19:54:03

Problem - 1804D - Codeforces

 

思路:首先我们可以统计一下开着灯的个数,对于一个卧室的来说, 不会存在让灯减少的情况,而对于两个卧室的来说,存在4种情况,00,01,10,11,只有在11的情况下,灯的数量会减少一个,因为这两个灯在同一个房子内,只算一遍,所以灯的数量会减少。那么我们就得到了一种情况,就是只有在11的情况下灯的数量会减少。那么对于最小值的情况,我肯定是希望11的数量越多越好,所以我只需要统计连续的1的长度,length,那么能够减少的数量就是length/2,统计完每一段连续的1之后,得到了sum,那么最终减少的数量就是min(sum,str.size()/4)。而对于最大值的情况,那么我们就希望11的数量越少越好,所以两个卧室的更多的用来匹配00,01,10,所以我们可以先遍历一遍数组,然后将所有的00,01,10先占用了两个卧室的,然后看看是否有剩余,如果有剩余的两个卧室的,则用11的占用了,剩下的没有被使用过的就是分配一个卧室的,直接统计出来即可又因为每行直接是没有关系的,所以我们直接每一行单独考虑,然后加在一起即可

// Problem: D. Accommodation
// Contest: Codeforces - Nebius Welcome Round (Div. 1 + Div. 2)
// URL: https://codeforces.com/problemset/problem/1804/D
// Memory Limit: 512 MB
// Time Limit: 2000 ms

#include<iostream>
#include<cstring>
#include<string>
#include<sstream>
#include<bitset>
#include<deque>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<vector> 
#include<set>
#include<cstdlib>
#define fi first
#define se second
#define i128 __int128
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> PII;
typedef pair<int,pair<int,int> > PIII;
const double eps=1e-7;
const int N=5e5+7 ,M=5e5+7, INF=0x3f3f3f3f,mod=1e9+7,mod1=998244353;
const long long int llINF=0x3f3f3f3f3f3f3f3f;
inline ll read() {ll x=0,f=1;char c=getchar();while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') {x=(ll)x*10+c-'0';c=getchar();} return x*f;}
inline void write(ll x) {if(x < 0) {putchar('-'); x = -x;}if(x >= 10) write(x / 10);putchar(x % 10 + '0');}
inline void write(ll x,char ch) {write(x);putchar(ch);}
void stin() {freopen("in_put.txt","r",stdin);freopen("my_out_put.txt","w",stdout);}
bool cmp0(int a,int b) {return a>b;}
template<typename T> T gcd(T a,T b) {return b==0?a:gcd(b,a%b);}
template<typename T> T lcm(T a,T b) {return a*b/gcd(a,b);}
void hack() {printf("\n----------------------------------\n");}

int T,hackT;
int n,m,k;
char str[N];
bool st[N];

int get1() {
	int n=strlen(str+1);
	int res=0;
	for(int i=1;i<=n;i++) if(str[i]=='1') res++;
	int last=0;
	int sum=0;
	for(int i=1;i<=n;i++) {
		if(str[i]=='1') last++;
		else {
			sum+=last/2;
			last=0;
		}
	}
	sum+=last/2;
	res-=min(sum,m/4);
	
	return res;
}

int get2() {
	int n=strlen(str+1);
	int res=0;
	int a=n/4;
	memset(st,false,sizeof(bool)*(n+4));
	for(int i=1;i<=n;i++){
		if(i+1<=n) {
			if(str[i]=='0'&&str[i+1]=='0') {
				st[i]=st[i+1]=true;
				a--;
				i++;
			}else if(str[i]=='1'&&str[i+1]=='0') {
				st[i]=st[i+1]=true;
				res++;
				a--;
				i++;
			}else if(str[i]=='0'&&str[i+1]=='1') {
				st[i]=st[i+1]=true;
				res++;
				a--;
				i++;
			}
		}
		if(a==0) break;
	}
	
	if(a!=0) {
		for(int i=1;i<=n;i++) {
			if(st[i]) continue;
			if(i+1<=n) {
				if(st[i+1]) continue;
				if(str[i]=='1'&&str[i+1]=='1') {
					st[i]=st[i+1]=true;
					a--;
					res++;
				}
			}
			if(a==0) break;
		}
	}
	
	for(int i=1;i<=n;i++) {
		if(st[i]) continue;
		if(str[i]=='1') res++;
	}
	
	return res;
}

void solve() {
	n=read(),m=read();
	
	int ansl=0,ansr=0;
	for(int i=1;i<=n;i++) {
		scanf("%s",str+1);
		int l=get1();
		int r=get2();
		ansl+=l,ansr+=r;
		// printf("%d %d\n",l,r);
	}
	
	printf("%d %d\n",ansl,ansr);
}   

int main() {
    // init();
    // stin();

    // scanf("%d",&T);
    T=1; 
    while(T--) hackT++,solve();
    
    return 0;       
}          

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/767191.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

hosts文件锁定,如何修改hosts文件权限

hosts文件能够让我们配置域名和IP的映射关系&#xff0c;方便局域网的用户&#xff0c;可是有的用户想在hosts里添加修改&#xff0c;发现host文件被锁死&#xff0c;host文件左下角出现一个&#x1f512;&#xff0c;怎么办呢&#xff0c;如何修改hosts文件权限。 应用程序-实…

【DevOps】Atlassian插件开发指南

本文以Bamboo插件开发为例&#xff0c;记录一下插件开发过程。 一、简介 Atlassian Bamboo 6.9.1 是一款持续集成和持续交付&#xff08;CI/CD&#xff09;工具&#xff0c;支持使用插件扩展其功能。如果需要开发自己的 Bamboo 插件并添加到 Bamboo 中&#xff0c;则可以参考…

OpenCv之图像形态学(二)

目录 一、形态学梯度 二、顶帽操作 三、黑帽操作 一、形态学梯度 梯度原图 - 腐蚀腐蚀之后原图边缘变小&#xff0c;原图 - 腐蚀 就可以得到腐蚀掉的部分&#xff0c;即边缘 案例代码如下: import cv2 import numpy as np# 导入图片 img cv2.imread(6.jpg)# 注意调节kern…

nginx基础2——配置文件详解(网页配置篇)

文章目录 一、基本了解二、nginx.conf配置参数2.1 调试参数2.2 必配参数2.3 优化性能参数2.4 event{}段配置参数2.5 网络连接参数2.6 fastcgi配置参数2.7 总结常配参数 三、http{}段配置参数3.1 配置结构3.2 精简配置网页3.3 location定义网页3.3.1 root path用法3.3.1 alias p…

atc201(组合数学)+cf1400(溢水法)

C - Secret Number 题意&#xff1a;给你一个字符串&#xff0c;分别表示0-9的状态。求一个四位密码的组合有多少种。 O&#xff1a;表示密码一定有该数字。 X&#xff1a;表示密码一定没有该数字。 &#xff1f;&#xff1a;不确定密码里有没有&#xff0c;可能有可能没有&…

bgp联邦

1、ip配置 [r1-LoopBack0]ip address 192.168.1.1 24 [r1-LoopBack1]ip address 10.0.0.1 24 [r1-GigabitEthernet0/0/0]ip address 12.0.0.1 24[r2-GigabitEthernet0/0/0]ip address 12.0.0.2 24 [r2-GigabitEthernet0/0/1]ip address 172.16.1.1 29 [r2-GigabitEthernet0/0/…

js - 对forEach()函数的一些理解

1&#xff0c;定义和用法 定义&#xff1a; forEach() 方法用于调用数组的每个元素&#xff0c;并将元素传递给回调函数。注意: forEach() 对于空数组是不会执行回调函数的。 用法&#xff1a; // 箭头函数 forEach((element) > { /* … */ }) forEach((element, index) &…

RS485远传电表有哪些功能?

RS485远传电表是一种具有远程传输功能的电表&#xff0c;可以通过RS485接口进行数据传输。它主要用于远程测量电能消耗、监测电力质量和实时控制电力负载等方面。 RS485远传电表具有多种功能&#xff0c;如&#xff1a; 1.远程测量电能消耗&#xff1a;RS485远传电表可以通过远…

【Linux工具】编译器、调式器、项目自动化构建工具以及git的使用3(GDB调试器的基础使用)

【Linux工具】编译器、调式器、项目自动化构建工具以及git的使用3&#xff08;GDB调试器的基础使用&#xff09; 目录 【Linux工具】编译器、调式器、项目自动化构建工具以及git的使用3&#xff08;GDB调试器的基础使用&#xff09;背景gdb的一些指令gdb实际运用显示代码运行程…

spring boot +vue 读取excel数据代码生成器

项目介绍 最近在开发工程中&#xff0c;需要根据excel中的数据生成标签类&#xff0c;手写太费劲啦&#xff0c;还得一边写一边对&#xff0c;受不了啦 决定写一个解析工具&#xff0c;自动生成代码 项目架构 项目采用springboot vue的开发方式&#xff0c;但vue并不是分离项目…

day38-Mybatis映射

0目录 Mybatis映射 1.2.3 1. Mybatis映射 1.1 映射文件XXMapper.xml语法 1.2 namespace&#xff1a;命名空间 namespace 的命名必须跟某个接口同名 1.3 id&#xff1a;命名空间中的唯一标识符 接口中的方法与映射文件中的SQL语句id一一对应 1.4 parameterType&#xf…

尚硅谷大数据Flink1.17实战教程-笔记03【Flink运行时架构】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址&#xff1a;尚硅谷大数据Flink1.17实战教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据Flink1.17实战教程-笔记01【Flink概述、Flink快速上手】尚硅谷大数据Flink1.17实战教程-笔记02【Flink部署】尚硅谷…

好用的Net反编译工具,界面和VS差不多,供大家学习研究参考

1、无需设置 由于它是一个便携式工具&#xff0c;它不需要您将其安装在目标计算机上&#xff0c;因为只需拆包其存档并启动可执行文件即可完全访问其功能。 您还可以从可移动存储介质(如USB闪存驱动器或外部HDD)运行它。此外&#xff0c;它不会修改系统中的注册表项&#xff0c…

学习记录——SpectFormer、DilateFormer、ShadowFormer

SpectFormer: Frequency and Attention is what you need in a Vision Transformer, arXiv2023 频域混合注意力SpectFormer 2023 论文&#xff1a;https://arxiv.org/abs/2304.06446 代码&#xff1a;https://badripatro.github.io/SpectFormers/ 摘要视觉变压器已经成功地应用…

【Spring——Spring的基础与创建】

目录 &#x1f367;1. 什么是 Spring &#xff1f; &#x1fad6;1.1 容器 &#x1f359;1.2 IoC &#x1f97d;1.3 汽车类——传统写法 &#x1f358;1.4 汽车类——IoC 写法 &#x1f32d;2. 配置 maven 国内源 &#x1f32e;2.1 在设置中勾选文件 &#x1f364;2.2 在…

SpringCloud学习路线(4)—— Nacos注册中心

一、认识和安装Nacos &#xff08;一&#xff09;概念&#xff1a; Nacos是Alibaba的产品&#xff0c;现在是SpringCloud中的一个组件&#xff0c;相较于Eureka功能更加丰富。 &#xff08;二&#xff09;下载地址&#xff1a; https://github.com/alibaba/nacos/releases &am…

一文看懂《关于网络安全和信息化工作重要指示》

7月14日至15日&#xff0c;全国网络安全和信息化工作会议在京召开。《关于网络安全和信息化工作重要指示》也在会上得到解读与传达。 从近年来党的二十大等重大会议上网络安全和数据安全等相关话题多次被提及、我国陆续发布多部网络安全&数据安全相关政策法规等等&#xf…

个人微信号二次开发的实现,api接口

各位兄弟姐妹们大家好&#xff01;&#xff01;&#xff01;&#xff01; 我又瞧到了好玩的微信机器人分享给大家&#xff01; 社群运营这几年风头正盛&#xff0c;不能落伍啊&#xff0c;我们也赶紧组建了社群。 但是微信群还是社交属性为主的&#xff0c;当我们运营多个社群的…

(栈队列堆) 剑指 Offer 09. 用两个栈实现队列 ——【Leetcode每日一题】

❓ 剑指 Offer 09. 用两个栈实现队列 难度&#xff1a;简单 用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和 deleteHead &#xff0c;分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素&#xff0c;deleteHead …