940D Alena And The Heater
题目大意
给出两个长度为N的数组A,B,以及一种计算规律: 
若t[i]=1,需满足t[i-1]=t[i-2]=t[i-3]=t[i-4]=0,以及max{A[i],A[i-1],A[i-2],A[i-3],A[i-4]} < l 
若t[i]=0,需满足t[i-1]=t[i-2]=t[i-3]=t[i-4]=1,以及min{A[i],A[i-1],A[i-2],A[i-3],A[i-4]} > r 
其他情况:t[i]=t[i-1](|l|,|r|≤109) 
现在要使得运算一次的结果t=B,求满足条件的l,r(保证有解) 
N≤100000
分析
由于l,r多解,所以我们不妨将l和r分别设为它们的极限-1e9和1e9,然后从B的第5为开始查找,由于数组可以向后传递,所以我们只需寻找与前一位相异的即可,找到后有两种情况:
1.t[i]=1,则l=max(l,max{A[i],A[i-1],A[i-2],A[i-3],A[i-4]}+1)
2.t[i]=0,则r=min(r,min{A[i],A[i-1],A[i-2],A[i-3],A[i-4]}-1)
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
int a[110000],b[110000];
char s[110000];
int main()
{     int n,m,i,j,k,le=-1e9,ri=1e9;
      cin>>n;
      for(i=1;i<=n;i++){
          scanf("%d",&a[i]);
      }
      scanf("%s",s+1);
      for(i=1;i<=n;i++)
         b[i]=s[i]-'0';
      int be=0;
      for(i=5;i<=n;i++)
         if(b[i]!=be){
             if(b[i]==1)
               le=max(le,max(a[i]+1,max(a[i-1]+1,max(a[i-2]+1,max(a[i-3]+1,a[i-4]+1)))));
               else 
                 ri=min(ri,min(a[i]-1,min(a[i-1]-1,min(a[i-2]-1,min(a[i-3]-1,a[i-4]-1)))));
             be=b[i];
             }
      cout<<le<<' '<<ri<<endl;
      return 0;
}
940D Alena And The Heater的更多相关文章
- 「日常训练」Alena And The Heater  (CFR466D2D)
		
题意(Codeforces 940D) 根据给定要求构建数列,求能构建出相同数列的l和r. 分析 这题写的是真的烦.一定要想到对b串要按照5个5个的看!为什么5个5个的看?因为根据题意,是先看前4个再 ...
 - CF940D Alena And The Heater
		
思路: 模拟. 实现: #include <bits/stdc++.h> using namespace std; const int INF = 1e9; ], n; string b; ...
 - Codeforces Round #466 (Div. 2) Solution
		
从这里开始 题目列表 小结 Problem A Points on the line Problem B Our Tanya is Crying Out Loud Problem C Phone Nu ...
 - Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F
		
Codeforces Round #466 (Div. 2) 题解 A.Points on the line 题目大意: 给你一个数列,定义数列的权值为最大值减去最小值,问最少删除几个数,使得数列的权 ...
 - Codeforces Round #466 (Div. 2)
		
所有的题目都可以在CodeForces上查看 中间看起来有很多场比赛我没有写了 其实是因为有题目没改完 因为我不想改,所以就没有写了(大部分题目还是改完了的) 我还是觉得如果是打了的比赛就一场一场写比 ...
 - Codeforces Round #466 (Div. 2)  题解
		
人生中第三次\(CF\)... 考试中切了\(A\)~\(E\) \(F\)题会做没时间写 题解 A:Points on the line 题意 给定一个数列,删最小的数,使最大差不大于一个定值 So ...
 - 【codeforces】【比赛题解】#940 CF Round #466 (Div. 2)
		
人生的大起大落莫过如此,下一场我一定要回紫. [A]Points on the line 题意: 一个直线上有\(n\)个点,要求去掉最少的点,使得最远两点距离不超过\(d\). 题解: 暴力两重fo ...
 - Codeforces Round #466
		
A. Points on the line 题意 给定一条直线上\(n\)个点,要求去掉最少的点,使得直线上相距最远的两个点的距离\(\leq d\). 思路 枚举长度为\(d\)的区间. Code ...
 - ACM团队周赛题解(3)
		
940和822两套div.2 老规矩 #define MAXN 1000000+5#define MOD 1000000007#define PI (acos(-1.0))#define EPS 1e ...
 
随机推荐
- sublime text3怎么批量查找替换文件夹中的字符
			
在编写代码的时候,往往有些代码是重复的,但是如果要改一处代码,其他的地方也要改.那么怎么批量修改呢?下面小编就以sublime text3为例来讲解一下sublime text3怎么批量查找替换文件夹 ...
 - PostgresSQL中的限制和级联删除
			
摘录自:http://www.mamicode.com/info-detail-879792.html 删除和更新时对应的操作是一样的
 - Java中泛型数组创建总结
			
在java中,可以声明一个泛型数组,不能通过直接通过T[] tarr=new T[10]的方式来创建数组,最简单的方式便是通过Array.newInstance(Classtype,int size) ...
 - RAC某节点v$asm_disk查询hang分析处理
			
主题:RAC某节点v$asm_disk查询hang分析处理 环境:Oracle 11.2.0.3 RAC 故障描述:RAC环境2个节点,节点1查询v$asm_disk正常返回结果,节点2查询v$asm ...
 - LED服务总结
			
简单的程序总结 一个简单的用于控制LED屏幕的小程序,用到的一个常识 LED服务开发总结 系统运行截图 系统功能说明: 1.ServerStrack服务,提供前台访问. 2.动态库调用,用于信息转 ...
 - ZooKeeper对比Eureka
			
刚开始看到Eureka这个单词的时候真心不会念,查了后发现他有一个好听的名字,来,大家一起念 [ jʊ'rikə ] 简介 Eureka本身是Netflix开源的一款提供服务注册和发现的产品,并且提供 ...
 - python2.7.5 安装pip
			
1 先安装setuptools 下载地址:https://pypi.python.org/pypi/setuptools#downloads 将下载后的tar文件解压,用CMD模式进入到解压后的文件所 ...
 - yum 安装zabbix2.4 /3.2.4
			
yum 安装zabbix2.4 首先zabbix需要的环境是web环境,默认的是lamp或者lnmp,讲道理,要是使用tomcat也是可以的,不过实验没有成功 系统:centos6.8_x64 附yu ...
 - 重定向stdin stdout stderr |
			
在Linux下,当一个用户进程被创建的时候,系统会自动为该进程创建三个数据 流,也就是题目中所提到的这三个.那么什么是数据流呢(stream)? 我们知道,一个程序要运行,需要有输入.输出,如果出错, ...
 - linux命令读取文件中特定行
			
1.如果你只想看文件的前5行,可以使用head命令, 如: head -5 /etc/passwd 2.如果你想查看文件的后10行,可以使用tail命令, 如: tail -10 /etc/passw ...