HDU 5741 Helter Skelter(构造法)

 

【题目链接】 http://acm.hdu.edu.cn/showproblem.php?pid=5741

 

【题目大意】

  一个01相间的串,以0开头,给出的序列每个数字表示连续的0的个数或者1的个数,现在有m个询问,求0的个数为a且1的个数为b的串是否存在。

 

【题解】

  我们发现形如11001这样子以1为开头结尾的串是包含1001这样子的串的,同理以0为开头结尾的串也是包含了一些开头结尾数字相同的子串。

  可以发现,当0的个数固定,1的个数是数轴上的一个区间,而且在0的个数相差1时,必定可以取到相同的1的个数,因此可行域在二维平面内是一个实心的联通图,且上边界和下边界的点坐标单调非减。

  那么我们首先计算出上下边界的点,可以发现在0的个数固定的情况下,1的个数的上界一定是由1开始,1结尾的子串产生的,下界是由0开始,0结尾的子串产生的,那么保存这些点。

  然而在图形中两个横纵坐标都不相同的点就能够确定一个矩形可行区域,因此,只要保留上下边界坐标均单调递增的点即可,二分查询(a,b)是否在连通块区域内,就能够判断是否存在这样子的子串

 

【代码】

#include <cstdio>
#include <utility>
#include <climits>
#include <algorithm>
using namespace std;
const int N=1010,M=N*N;
typedef pair<int,int> PII;
char ans[M];
int T,n,m,a,b,t[N],cntd,cntu,cnt;
PII D[M],U[M];
int main(){scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);for(int i=0;i<n;i++)scanf("%d",&t[i]);cntd=cntu=cnt=0;for(int i=0;i<n;i++){int x=0,y=0;for(int j=i;j<n;j++){if(j%2)y+=t[j];else x+=t[j];if(i%2==0&&j%2==0)D[cntd++]=PII(x,y);if(i%2&&j%2)U[cntu++]=PII(x,y);}}sort(D,D+cntd);for(int i=0,j;i<cntd;i=j){for(j=i;j<cntd&&D[i].first==D[j].first;j++);while(cnt&&D[cnt-1].second>=D[i].second)cnt--;D[cnt++]=D[i]; }cntd=cnt;sort(U,U+cntu); cnt=0;for(int i=0,j;i<cntu;i=j){for(j=i;j<cntu&&U[i].first==U[j].first;j++);if(!n||U[cnt-1].second<U[j-1].second)U[cnt++]=U[j-1];}cntu=cnt;for(int i=0;i<m;i++){scanf("%d%d",&a,&b);int x=upper_bound(U,U+cntu,PII(a,INT_MAX))-U;int y=upper_bound(D,D+cntd,PII(a,INT_MIN))-D;ans[i]='0'+(y<cntd&&U[x-1].second>=b&&D[y].second<=b);}ans[m]=0; puts(ans);}return 0;
}

 

  

 

转载于:https://www.cnblogs.com/forever97/p/hdu5741.html

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

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

相关文章

集成学习之参数调整策略

1 Random Forest和Gradient Tree Boosting参数详解 在sklearn.ensemble库中&#xff0c;我们可以找到Random Forest分类和回归的实现&#xff1a;RandomForestClassifier和RandomForestRegression&#xff0c;Gradient Tree Boosting分类和回归的实现&#xff1a;GradientBoost…

python中tkinter的使用-下

00表格数据 import tkinter from tkinter import ttkwin tkinter.Tk() win.title("Liuwang") win.geometry("400x40020020")#表格 tree ttk.Treeview(win) tree.pack() #列 tree["columns"] ("姓名","年龄","身高&…

计算机科学和建筑设计结合,智能化建筑中计算机科学与技术的应用

4494 科技创新 建筑工程技术与设计2018年5月上【摘要】随着我国经济的发展&#xff0c;计算机科学技术已经逐渐应用到各个领域。将计算机科学与建筑相结合&#xff0c;为建筑业的发展提供了契机。本文介绍了计算机科学技术在智能化建筑中的应用&#xff0c;以期其为加快我国智能…

符号

符号&#xff1a;; 多个命令的分隔符/ 根或者路径的分隔符> 或1>标准输出重定向&#xff08;数据流朝着箭头的方向流动&#xff09;&#xff0c;覆盖原来的文件>>或1>>追加重定向&#xff08;数据流朝着箭头的方向流动&#xff09;&#xff0c;再原来的文件…

Random Forest算法中的参数详解

本篇不是介绍RF的&#xff0c;关于RF网上有很多通俗易懂的解释 西瓜书与统计学习方法等很多教材中的解释也都足够 本篇仅针对如何使用sklearn中的RandomForestClassifier作记录 一、代码怎么写 [python] view plaincopy print?class sklearn.ensemble.RandomForestClassifier(…

python中自动化办公 【笔记】

00读取csv文件 import csv def readCsv(path):infolist []with open (path,"r") as f:allFileInfo csv.reader(f)print(allFileInfo)for row in allFileInfo:infolist.append(row)return infolistpath r"D:\xiazaipan\第1章 Python语言基础\15、自动化办公与…

Python爬虫:一些常用的爬虫技巧总结

1、基本抓取网页 get方法 import urllib2 url "http://www.baidu.com" respons urllib2.urlopen(url) print response.read() post方法 import urllib import urllib2url "http://abcde.com" form {name:abc,password:1234} form_data urllib.urlenco…

微型计算机选用要点,微型计算机原理以及应用考试_new要点分析.doc

微型计算机原理以及应用第一章&#xff1a;1&#xff0e;微机的主要的特点是&#xff1a;(1)体积小、重量轻&#xff1b;(2)价格低廉&#xff1b;(3)可靠性高、结构灵活(4)应用面广2&#xff0e;微型机的分类&#xff1a;按微处理器规模分类&#xff1a;单片机 、个人计算机、 …

到底什么是API经济

编者按&#xff1a;这是一篇两年前的文章&#xff0c;作者为原CA TECH的中国区技术总监。他在文章中阐述的问题&#xff0c;今天读来依旧让人振聋发聩。但遗憾的是&#xff0c;国人在API成为一种服务的概念上似乎还停留在遥远的PC时代&#xff0c;说白了还都只是一些低端的数据…

解决Linux下vi或vim操作Found a swap file by the name

在linux下用vi或vim打开 文件时 E325: ATTENTION Found a swap file by the name ".1.py.swp" owned by: liu dated: Sat Apr 20 17:37:19 2019 file name: ~liu/1.py modified: YES user name: liu host name: localhos…

给未来的自己一封信计算机,给未来的自己的一封信范文(精选5篇)

给未来的自己的一封信范文(精选5篇)在日常生活或是工作学习中&#xff0c;大家总免不了要接触或使用书信吧&#xff0c;书信一般包括称呼、问候语、正文、祝语、署名、日期六个部分。你知道书信怎样写才规范吗&#xff1f;下面是小编为大家收集的给未来的自己的一封信范文(精选…

matlab神经网络函数

1.设计函数 solvein 设计线性网络&#xff1b; solverb 设计径向基网络&#xff1b; solverbe 设计精确的径向基网络&#xff1b; solvehop 设计Hopfield网络。 2.传递函数 hardlim 硬限幅传递函数&#xff1b; hardl…

GBDT算法简介

在网上看到一篇GBDT介绍非常好的文章&#xff0c;GBDT大概是非常好用又非常好用的算法之一了吧(哈哈 两个好的意思不一样) GBDT(Gradient Boosting Decision Tree) 又叫 MART&#xff08;Multiple Additive Regression Tree)&#xff0c;是一种迭代的决策树算法&#xff0c;该算…

DevExpress Chart空间Y轴归一化(线性归一化函数)

数据的标准化&#xff08;normalization&#xff09;是将数据按比例缩放&#xff0c;使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到&#xff0c;去除数据的单位限制&#xff0c;将其转化为无量纲的纯数值&#xff0c;便于不同单位或量级的指标能够进行比较…

Linux samba的配置和使用

推荐局域网内使用 不推荐远程服务器 一、安装Samba服务 yum -y install samba # 查看yum源中Samba版本 yum list | grep samba # 查看samba的安装情况 rpm -qa | grep samba Samba服务器安装完之后, 会生成配置文件目录/etc/samba, /etc/samba/smb.conf是samba的核心配置文件.…

23期PHP基础班第四天

转载于:https://www.cnblogs.com/lihang666/p/6078982.html

SVM和SVR简介

1、支持向量机&#xff08; SVM &#xff09;是一种比较好的实现了结构风险最小化思想的方法。它的机器学习策略是结构风险最小化原则 为了最小化期望风险&#xff0c;应同时最小化经验风险和置信范围&#xff09; 支持向量机方法的基本思想&#xff1a; &#xff08; 1 &#…

gojs实现最短路径寻址实例

2019独角兽企业重金招聘Python工程师标准>>> JS function init() {if (window.goSamples) goSamples(); // init for these samples -- you dont need to call thisvar $ go.GraphObject.make; // for conciseness in defining templatesmyDiagram $(go.Diagram,…

河南王牌计算机专业,河南计算机专业实力突出的7所大学,郑大位列次席,榜首实至名归...

郑州大学是省内唯一的211建设高校&#xff0c;整体办学实力在国内同类高校之中名列前茅&#xff0c;虽然没有能够在学科评估之中取得A类学科&#xff0c;但学校有化学、考古学、材料科学与工程等多个学科获评B&#xff0c;学校计算机科学与技术学科取得了C的成绩&#xff0c;虽…

Linux中配置ftp服务器

1. 先用rpm -qa| grep vsftpd命令检查是否已经安装&#xff0c;如果ftp没有安装&#xff0c;使用yum -y install vsftpd 安装,(ubuntu 下使用apt-get install vsftpd) 2. service vsftpd start / service vsftpd restart 启动要让FTP每次开机自动启动&#xff0c;运行命令:…