E - Rikka with Mutex

Sometimes, technical terms implicate some life philosophy. Mutex is one of them. On your way to dream, you may be locked by some difficulties, and you need someone to stop his step, and help you get through them.

To help you know better about the life philosophy inside mutex, Rikka comes up with a simple task. Maybe some of you know little about mutex, so she uses another scene to replace it.

There are nn gates in a row, several people in the left side of the gates and all of them want to go to the right side. There are two kinds of gates: black and white. These people share energy, which is represented by a non-negative number EE. Initially, E=0E=0.

If one person walks through a white gate, he will gain one point of energy, i.e., EE will be added by 11. And if one person walks through a black gate, he will lose one point of energy, i.e., EE will be subtracted by 11. Since EE must be a non-negative integer, if E=0E=0, no one can walk through a black gate until someone walks through a white gate. You can assume there won't be two people moving at the same time and all the people are selfless.

We use P to represent a black gate, V to represent a white gate and use a PV string to represent the row. Initially, all the people are at the beginning of the string, and all of them want to go through the whole string. But unfortunately, sometimes it may be impossible. So, they want to send at least one person to the right side.

Your task is to find out the minimal number of people which this group needs to achieve this goal.

For example, if the row is VPP, they need at least two people: The first person walk through the first white gate and the second person can use this point of energy to go through the whole string.

InputThe first line contains a single numner t(1≤t≤103)t(1≤t≤103), the number of the testcases.

For each testcase, the first line contains a PV string s(1≤|s|≤105)s(1≤|s|≤105) describing the gates.

The input guarantees that there are at most 3030 testcases with |S|>1000|S|>1000.OutputFor each testcase, output a single integer, the answer. And if it is impossible, output −1−1.

Sample Input

4
VPP
VPPVVVVPPPPPPPP
VPPPPPPPPPPPPPP
P

Sample Output

2
3
14
-1

题目大意:给定一串字符串由V和P组成,一个人的初始生命值为0,遇V+1,遇P-1,同伴中可以分享生命值,在保证生命值不为负的情况下,求最少需要多少人,能让一个人走到终点

 #include<iostream>
#include<cstring>
using namespace std; const int maxn = ;
char str[maxn]; int solve(int num){//判断派n个人是否能有人能通过
int now = , change = , i;
int len = strlen(str);
for(i=; i<len; i++){
change += (str[i]=='P'? -:);//派一个人前进
if(now + change < ) return ;//生命值用完,说明n个人不够
else if(change > ){//派一个人前进能获得更多生命值,则让所有人前进
now += change*num;
change = ;
}
}
return ;
} int main()
{
int t;
scanf("%d",&t);
while(t--){
scanf("%s", str);
if(str[]=='P') printf("-1\n");
else{
int left = , right = strlen(str)-, mid;
while(right > left){
mid = left+right>>;
if(solve(mid)) right = mid;
else left = mid+;
}
printf("%d\n",right);
}
}
}

 (1)因为初始生命值为0,所以当第一个字符即为P的时候,任务不可能完成
(2)可设left为0,设字符总长度为为right,对人数进行二分,然后判断该人数能否完成任务
(3)每次只派一个人前进,如果那个人前进过程中,能够获得更多的生命值,则让所有人都前进到那里;如果前进过程中生命值耗尽,则不能完成任务

二分-E - Rikka with Mutex的更多相关文章

  1. 2019 HZNU Winter Training Day 14 Comprehensive Training

    A - Choosing Capital for Treeland CodeForces - 219D 题意:有一颗单向边的树,要选取一个结点作为首都.要求是这个结点到其它结点,总共需要翻转的路径数量 ...

  2. 2018牛客网暑期ACM多校训练营(第十场)J Rikka with Nickname(二分,字符串)

    链接:https://ac.nowcoder.com/acm/contest/148/J?&headNav=acm 来源:牛客网 Rikka with Nickname 时间限制:C/C++ ...

  3. java开发中的Mutex vs Semaphore

    先看一下stackoverflow上是怎么说的吧 原文地址:http://stackoverflow.com/questions/771347/what-is-mutex-and-semaphore- ...

  4. HDU 6093 - Rikka with Number | 2017 Multi-University Training Contest 5

    JAVA+大数搞了一遍- - 不是很麻烦- - /* HDU 6093 - Rikka with Number [ 进制转换,康托展开,大数 ] | 2017 Multi-University Tra ...

  5. C#各种同步方法 lock, Monitor,Mutex, Semaphore, Interlocked, ReaderWriterLock,AutoResetEvent, ManualResetEvent

    看下组织结构: System.Object System.MarshalByRefObject System.Threading.WaitHandle System.Threading.Mutex S ...

  6. BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 8748  Solved: 3835[Submi ...

  7. BZOJ 2756: [SCOI2012]奇怪的游戏 [最大流 二分]

    2756: [SCOI2012]奇怪的游戏 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 3352  Solved: 919[Submit][Stat ...

  8. 整体二分QAQ

    POJ 2104 K-th Number 时空隧道 题意: 给出一个序列,每次查询区间第k小 分析: 整体二分入门题? 代码: #include<algorithm> #include&l ...

  9. [bzoj2653][middle] (二分 + 主席树)

    Description 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整. 给你一个长度为n的序列s. 回答Q个这样的询问:s的左端点在[a,b ...

随机推荐

  1. proptypes介绍

    开始 prop-types的主要作用:对props中数据类型进行检测及限制 引用方法:import PropTypes from 'prop-types' 用法: // 基本用法 用来检测数据类型 c ...

  2. Android eclipse环境配置

    需下载软件: JDK eclipse ADT SDK JDK的下载安装: 从官网下载JDK:http://www.oracle.com/: 安装好以后还需要进行jdk的环境配置: eclipse下载安 ...

  3. hadoop学习摘要

    参考链接:https://www.zhihu.com/question/333417513 https://www.oschina.net/p/hbase hadoop环境搭建:https://blo ...

  4. Everspin串口串行mram演示软件分析

    Everspin在磁存储器设计,制造和交付给相关应用方面的知识和经验在半导体行业中是独一无二的.在平面内和垂直磁隧道结(MTJ)STT-MRAM位单元的开发方面处于市场领先地位.包括40nm,28nm ...

  5. 安装PHP到Ubuntu(APT)

    运行环境 系统版本:Ubuntu 16.04.2 LTS 软件版本:PHP-5.6 硬件要求:无 安装过程 1.安装APT存储库 APT存储库由PPA提供. root@localhost:~# apt ...

  6. python生日贺卡制作以及细节问题的解决最后把python项目发布为exe可执行程序过程

    自己今天第一次做一个python生日贺卡: 效果图 参考之前有位大佬的作品,自己稍微的改造了一下下  首先:上程序 Birthday.py """ ----------- ...

  7. .Net Core通过json文件 配置管理后台导航菜单

    先来看个最终效果图 以前我们配置后台菜单 一般都是把菜单链接, 图标, 以及层级关系 配置到数据库,Core很容易通过json文件来配置导航菜单  而不用存数据库了 先添加个menuconfig.js ...

  8. Serverless Component 介绍和使用指南

    Serverless Component 是什么,我怎样使用它? Serverless Components 的目标是什么? 我们希望通过 Serverless Components 让广大开发者更加 ...

  9. Origin-作图相关

    1.跨越缺失数据连接直线

  10. 使用phpstudy向mysql中导入数据