#185. 「2019冬令营提高组」送分题

这是原题..... P3615 如厕计划

手推一推你发现,显然男性不能多于女性。

然后你或许可以发现一个神奇的性质。

对于每个序列,我们记$M$为$1$,$F$为$-1$

蓝后我们统计这个序列的后缀和。

如果这个序列合法,那么每个后缀和都$<=1$

如果出现$>=2$的......

举个栗子

F  F  F  M  M  M  M  M  F  F

0  1   2  3     2    1   0  -1  -2  -1

这个数列显然是不合法的。

我们要让它合法,就要把若干个M向左移。

你希望使得所有人中最大的不满值尽可能小,那么我们就把M都移到队首去(不管左移几位不满值都不变),并优先把靠右的M移走,这显然是最优的。

后缀和最大为3,那么我们只需移动2个M到队首

M  M  F  F  F  M  M  M  F  F 

0  -1   -2  -1    0    1   0  -1  -2  -1

这个数列就合法了。

队列以复读的形式给出,如何处理?

我们发现(感性理解吧......),对于相同的$k$段,统计一段的后缀和,与F的个数 - M的个数。

最后一段需要把后缀和最大值个的M移到队首,而前面的$k-1$段就只需要把max(F的个数 - M的个数)的M移走即可。

通过这个方法得出的数列一定满足每次匹配都是'MF'的情况(M消耗完后则为'FF')

但是我们允许'FM'的状况出现。

所以我们可以少移一次。

那么答案需-1

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
inline ll max(ll a,ll b){return a>b?a:b;}
#define M 100005
char a[M<<];
ll n,m,b[M],p[M],d[M],ans,tot;
int main(){
freopen("queue.in","r",stdin);
freopen("queue.out","w",stdout);
scanf("%lld%lld",&n,&m);
for(int i=;i<=m;++i){
scanf("%s%lld",a,&b[i]);
for(int j=strlen(a)-;j>=;--j){
p[i]+=(a[j]=='M'?:-);
d[i]=max(d[i],p[i]);
}tot+=p[i]*b[i];
}
if(tot>){
puts("-1"); return ;
}tot=;
for(int i=m;i;--i){
ans=max(ans,tot+(b[i]-)*max(,p[i])+d[i]);
tot+=p[i]*b[i];
}
printf("%lld",ans?ans-:);
return ;
}

fjwc2019 D3T2 送分题的更多相关文章

  1. 送分题,ArrayList 的扩容机制了解吗?

    1. ArrayList 了解过吗?它是啥?有啥用? 众所周知,Java 集合框架拥有两大接口 Collection 和 Map,其中,Collection 麾下三生子 List.Set 和 Queu ...

  2. BZOJ2509 : 送分题

    求出每个点向上下左右能延伸的最大长度$left$.$right$.$up$.$down$. 枚举每一条对角线,如果$j$可以作为左上角,$i$可以作为右下角,那么有: $j+\min(down[j], ...

  3. 良心送分题(牛客挑战赛35E+虚树+最短路)

    目录 题目链接 题意 思路 代码 题目链接 传送门 题意 给你一棵树,然后把这棵树复制\(k\)次,然后再添加\(m\)条边,然后给你起点和终点,问你起点到终点的最短路. 思路 由于将树复制\(k\) ...

  4. 牛客 26E 珂学送分2 (状压dp)

    珂...珂...珂朵莉给你出了一道送分题: 给你一个长为n的序列{vi},和一个数a,你可以从里面选出最多m个数 一个合法的选择的分数定义为选中的这些数的和加上额外规则的加分: 有b个额外的规则,第i ...

  5. 算法笔记_063:蓝桥杯练习 送分啦(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 这题想得分吗?想,请输出“yes”:不想,请输出“no”. 输出格式 输出包括一行,为“yes”或“no”. 2 解决方案 初步一看,这题 ...

  6. C语言 · 送分啦

    问题描述 这题想得分吗?想,请输出"yes":不想,请输出"no". 输出格式 输出包括一行,为"yes"或"no". ...

  7. 51nod 1174 区间中最大的数(送盾题)

    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出一个有N个数的序列,编号0 - N - 1.进行Q次查询,查询编号i至j的所有数中,最大的数是多少. ...

  8. PAT 甲级 1050 String Subtraction (20 分) (简单送分,getline(cin,s)的使用)

    1050 String Subtraction (20 分)   Given two strings S​1​​ and S​2​​, S=S​1​​−S​2​​ is defined to be t ...

  9. 请问如何实现字符串UTF8->BIG5,BIG5->UTF8。保证送分。-Java/JavaSE

    请问如何实现字符串UTF8-> BIG5,BIG5-> UTF8. ------回答--------- ------其他回答(100分)--------- public String BI ...

随机推荐

  1. 《Java程序设计》第一周学习记录(2)

    目录 使用JDB调试程序 系统文件被覆盖的挽救 参考资料 使用JDB调试程序 JDB是JDK自带的基于命令行的调试程序.我们先来man一下吧(说到这里,我之前在翻娄老师的博客的时候看到一篇文章:做中学 ...

  2. ASP.NET MVC5+EF6+EasyUI 后台管理系统--系统权限及操作指引

    系列目录 1.权限包括菜单权限,按钮权限,数据权限 2.角色组和用户之间是多对多的关系,即多个用户可以拥有多个角色组,权限是拥有角色组的并集 1.菜单界面,菜单都是动态数据由模块管理进行设置 2.权限 ...

  3. JQuery 获取页面某一元素在屏幕上的位置

    获取页面某一元素的绝对X,Y坐标 var X = $('#ElementID').offset().top;//元素在当前视窗距离顶部的位置 var Y = $('#ElementID').offse ...

  4. centos7安装Amber16 && AmberTools

    Centos7 安装amber16 1.准备下载好的amber(Amber16.tar.bz2)及tools(AmberTools16.tar.bz2)安装包: $ cd MySoftware_hom ...

  5. rosetta mpi编译时出现 MPI has not been declared 错误

    安装openmpi2.1.0版本,编译mpi rosetta时出现 MPI has not been declared 错误,经过一系列的摸索发现安装openmpi-1.6.5就可以顺利编译,降低版本 ...

  6. kdevelp 导入makefile工程

    比如upx工程,将upx/src/makefile中makefile改为makefile.am,自用kdevelop导入工程找到makefile.am,生成工程后去掉.am,这样就可以像vs一样调试程 ...

  7. Selenium基础知识(二)鼠标操作

    一.鼠标操作 这个需要使用webdriver下的ActionChains类,这个类是操作鼠标操作的: from selenium.webdriver import ActionChains 鼠标操作可 ...

  8. install scala & spark env

    安装Scala 1,到http://www.scala-lang.org/download/ 下载与Spark版本对应的Scala.Spark1.2对应于Scala2.10的版本.这里下载scala- ...

  9. innerText 与 innerHtml的区别

    j基本语法类似: innerHTML/innerText ->给除了表单元素的标签赋值内容 document.getElementById("div1").innerHTML ...

  10. Sitecore详细安装(包含sitecore安装过程截图)

    一.到Sitecore 官网下载安装包 1)浏览器中输入https://dev.sitecore.net/Downloads/Sitecore_Experience_Platform.aspx 2)安 ...