CodeForces-650B Image Preview

题意

手机里有n张图片,打开相机出现的是第一张,第一张右滑得到第n张,同理第n张左滑得到第1张,翻页耗费a秒,看照片耗费1s,但是照片有横屏的竖屏的,如果是横屏的需要翻转一下,翻转需要的时间为bs,如果某张照片是已经看过的,可以不看,否则必须看完才能左滑或者右滑(注意),现在你有t秒时间,最多可以看多少张照片。

思路

就是一个模拟题,两种看法,先左滑,然后二分判断右滑可以再看多少张,先右滑再二分左滑可以再看多少张。

代码写得有点恶心。

代码

//#include<bits/stdc++.h>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<string>
#include<math.h>
#define pb push_back
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e6+10;
const int mod=1e9+7;
const int inf=0x3f3f3f3f;
const double eps=1e-14; char str[N];
int pre[N],suf[N];
int n,a,b,t;
int check(int aga,int en,int rel)
{
int tur=(en-aga)*a;
int roa=pre[en]-pre[aga-1];
int rea=en-aga+1;
return (tur+roa+rea)<=rel;
}
int main()
{
scanf("%d%d%d%d",&n,&a,&b,&sum);
scanf("%s",str+1);
for(int i=n+1;i<=2*n;i++)
str[i]=str[i-n];
for(int i=1;i<=2*n;i++)
pre[i]=pre[i-1]+b*(str[i]=='w');//旋转
int maxn=0;
for(int i=2;i<=n;i++)//先向左再向右,从第n+1张左滑到第i张
{
int time=(n+1-i)*a+pre[n+1]-pre[i-1]+n+2-i;//看到第i张花费的时间
if(time>sum) continue;
int rel=sum-time-(n+1-i)*a-a;//剩余还有多少时间从第n+2张往右看
int l=n+2,r=n+i-1,ans=0;//二分
while(l<=r)
{
int mid=(l+r)/2;
if(check(n+2,mid,rel))
{
ans=mid-n-1;
l=mid+1;
}
else r=mid-1;
}
maxn=max(ans+(n+2-i),maxn);
}
for(int i=n+1;i<=2*n;i++)//从第n+1张右滑到第n+i张,再左滑
{
int time=a*(i-n-1)+(i-n)+pre[i]-pre[n];
if(time>sum) continue;
int rel=sum-time-(i-n-1)*a-a;//翻到第n页,还剩多少时间
int l=i-n+1,r=n,ans=0;//二分
while(l<=r)
{
int mid=(l+r)/2;
if(check(mid,n,rel))
{
ans=n-mid+1;
r=mid-1;
}
else l=mid+1;
}
maxn=max(i-n+ans,maxn);
}
printf("%d\n",maxn);
return 0;
}

博客

CodeForces-650B Image Preview 二分+模拟的更多相关文章

  1. codeforces 650B . Image Preview 二分

    题目链接 B. Image Preview time limit per test 1 second memory limit per test 256 megabytes input standar ...

  2. Codeforces 650B Image Preview(尺取法)

    题目大概说手机有n张照片.通过左滑或者右滑循环切换照片,滑动需要花费a时间:看一张照片要1时间,而看过的可以马上跳过不用花时间,没看过的不能跳过:有些照片要横着看,要花b时间旋转方向.那么问T时间下最 ...

  3. Codeforces 650B Image Preview

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  4. CodeForces.158A Next Round (水模拟)

    CodeForces.158A Next Round (水模拟) 题意分析 校赛水题的英文版,坑点就是要求为正数. 代码总览 #include <iostream> #include &l ...

  5. [Codeforces 1199C]MP3(离散化+二分答案)

    [Codeforces 1199C]MP3(离散化+二分答案) 题面 给出一个长度为n的序列\(a_i\)和常数I,定义一次操作[l,r]可以把序列中<l的数全部变成l,>r的数全部变成r ...

  6. Codeforces Round #379 (Div. 2) A B C D 水 二分 模拟

    A. Anton and Danik time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  7. Codeforces 1132D(二分模拟)

    要点 二分显然,关键在于怎么判断 题解方法:开k个队列代表每个时间有哪些电脑会挂掉,这部分O(n)预处理一下,之后扫一遍时间,每个时间点贪心选取最靠前的会挂的电脑未雨绸缪给它充电,然后看看充电以后要不 ...

  8. Codeforces 651D Image Preview【二分+枚举】

    题意: 若干张照片,从头开始可以向左右两边读,已经读过的不需要再读,有的照片需要翻转,给定读.滑动和翻转消耗的时间,求在给定时间内最多能读多少页? 分析: 首先明确,只横跨一次,即先一直读一边然后再一 ...

  9. Codeforces 1011C Fly(二分+模拟)

    题意: 是有n个星球,1代表地球,然后输入一个m表示火箭的重量,然后输入了两组n个数,第一组表示在每个星球起飞时消耗一吨燃料的质量数,a[i]就表示每a[i]吨就要消耗1吨燃料,第二组就表示在每个星球 ...

随机推荐

  1. 简单的中国MOOC大学列表提取 - Python

    有些时候我们想知道网页中包含哪些具体的信息,比如如下的这个网页, http://www.icourse163.org/university/view/all.htm 我们只想知道自己的学校是否在这个列 ...

  2. python与excel的关系;铁打的python流水的excel

    现在很多行业,都离不开用Excel: 做财务的,要用Excel做报表:做物流的,会用Excel来跟踪订单情况:做HR的,会用Excel算工资:做分析的,会用Excel计算数据做报表.不知道你有没有这样 ...

  3. Java封装 概述

    封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式.好处:隐藏实现细节,提供公共的访问方式提高了代码的复用性提高安全性 封装原则:将不需要对外提供的内容都隐藏起来把属性隐藏,提供公共方法对其访 ...

  4. pytorch seq2seq闲聊机器人beam search返回结果

    decoder.py """ 实现解码器 """ import heapq import torch.nn as nn import con ...

  5. 干货!Python中字符串、列表、元祖、字典,集合之间的转换

    一.字符串的转化 1.字符串转换成列表 字符串转换成list 的时候,str可以作为迭代对象,直接放入:也可以使用split对字符串进行切割.然后返回list s = '1a1b1c' print(l ...

  6. 数据结构(C语言版)---查找

    1.查找表:同一类型的数据元素构成的集合. 2.对查找表进行的操作:查询某特定元素.检索满足条件的元素的属性.插入元素.删除元素. 1)若对查找表进行的操作只涉及前两种,则为静态查找表:需要进行插入和 ...

  7. 手机app抓包[小米]

    方案一:(手机电脑在同一wifi下) 打开burp设置代理 这里的ip为电脑的ip 手机手动设置代理为电脑的ip+8080 导入证书 电脑上下载下证书(http://burp) 传到手机上

  8. bootstrop登陆页面

    bootstrap做登入注册页面,使用validate做表单验证 技术:bootstrap,font-awesome,jquery-validate: 特点:响应式布局,表单验证(用户两次密码是否相同 ...

  9. ARP/RARP报文格式

    arp协议 地址解析协议ARP(Address Resolution Protocol)是用来将IP地址解析为MAC地址的协议. arp格式: 一个字节等于8位 硬件类型:指明发送方想知道的硬件接口类 ...

  10. Libra教程之:move语言的特点和例子

    文章目录 move语言的特点 资源优先 灵活性 安全性 可验证性 Move语句初探 点对点支付交易脚本 Currency Module move语言的特点 Libra的目标是打造一个全球话的金融和货币 ...