Internet of Lights and Switches(MAP记录+二分) 2015年湖南省赛第 I 题

2024-05-12 20:18

本文主要是介绍Internet of Lights and Switches(MAP记录+二分) 2015年湖南省赛第 I 题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

You are a fan of "Internet of Things"(IoT, 物联网), so you build a nice Internet of Lights and Switches in your huge mansion. Formally, there are n lights and m switches, each switch controls one or more lights, i.e. pressing that switch flips the status of those lights (on->off, off->on).

blob.png

Initially, all the lights are on. Your task is to count the number of ways to turn off all the lights by pressing some consecutive switches. Each switch should not be pressed more than once. There is only one restriction: the number of switches you pressed should be between a and b (inclusive).


输入描述

There will be at most 20 test cases. Each test case begins with a line containing four integers n, m, a, b (2<=n<=50, 1<=a<=b<=m<=300000). Each of the following m lines contains a 01 string of length n. The i-th character is 1 if and only if that switch controls the i-th light. The size of the whole input file does not exceed 8MB.


输出描述

For each test case, print the case number, and the number of ways to turn off all the lights.


输入样例
2 4 1 4
01
10
11
00
2 4 3 3
01
10
11
00
6 3 1 3
101001
010110
101001

输出样例

Case 1: 3 Case 2: 0 Case 3: 2

题意:有n个灯最初是亮的,现在要通过连续的操作使得灯全灭,现在m个操作,可以连续的操作个数为a~b,问有多少种情况使得灯全灭。

解题:用map<long long , vector<int> >记录每种灯的状态所对应第 i 个操作(第i个操作的状态为:输入的前i个操作的异或状态) + 二分.

#include<stdio.h>
#include<string.h>
#include<string>
#include<map>
#include<vector>
using namespace std;
const int N = 300010 ;
#define ll long long
ll num[N] ;
map<ll, vector<int> >mp;
void two(ll tnum , int n , int& L , int& R )
{int l=0,r=mp[tnum].size()-1 , mid;while(l<=r){mid = (l+r)>>1;if(mp[tnum][mid]>=L)r = mid - 1 ;elsel = mid + 1;}L  = l ;if(L==mp[tnum].size()){L = -1 ;R =  L - 1 ;return ;}l = 0 , r = mp[tnum].size()-1 ;while(l<=r){mid = (l+r)>>1;if(mp[tnum][mid]>=R)r = mid - 1 ;elsel = mid + 1;}if(l==mp[tnum].size())R = l-1;else if(mp[tnum][l]>R)R = l-1 ;elseR = l ;
}int main()
{int n,m,a,b , ans , T = 0;char s[100] ;while(scanf("%d%d%d%d",&n,&m,&a,&b)>0){mp[0].push_back(0);num[0]=0;for(int i=1; i<=m; i++){scanf("%s",s);num[i] = 0 ;for(int j=0; j<n; j++)if(s[j]=='1'&& !(num[i-1]&(1LL<<j)) || s[j]=='0'&&(num[i-1]&(1LL<<j))==(1LL<<j))num[i] |= 1LL<<j ;mp[ num[i] ].push_back(i) ;// printf("size = %d\n",mp[num[i]].size());}ans = 0 ;for(int i=1; i<=m; i++){ll tnum = 0 ;for(int j=0; j<n; j++)if((num[i]&(1LL<<j))==0)tnum |= 1LL<<j;int L = i-b , R = i-a ;two(tnum , n , L , R );if(R>=L)ans += R-L+1 ;// printf("[ %d , %d ] num = %lld ,tnum = %lld size = %d\n",L,R,num[i],tnum,mp[tnum].size());}for(int i=0; i<=m; i++)mp[num[i]].clear() ;printf("Case %d: %d\n",++T , ans ) ;}
}

这篇关于Internet of Lights and Switches(MAP记录+二分) 2015年湖南省赛第 I 题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/983635

相关文章

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事