fjwc2019 D3T2 送分题
这是原题..... 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 送分题的更多相关文章
- 送分题,ArrayList 的扩容机制了解吗?
1. ArrayList 了解过吗?它是啥?有啥用? 众所周知,Java 集合框架拥有两大接口 Collection 和 Map,其中,Collection 麾下三生子 List.Set 和 Queu ...
- BZOJ2509 : 送分题
求出每个点向上下左右能延伸的最大长度$left$.$right$.$up$.$down$. 枚举每一条对角线,如果$j$可以作为左上角,$i$可以作为右下角,那么有: $j+\min(down[j], ...
- 良心送分题(牛客挑战赛35E+虚树+最短路)
目录 题目链接 题意 思路 代码 题目链接 传送门 题意 给你一棵树,然后把这棵树复制\(k\)次,然后再添加\(m\)条边,然后给你起点和终点,问你起点到终点的最短路. 思路 由于将树复制\(k\) ...
- 牛客 26E 珂学送分2 (状压dp)
珂...珂...珂朵莉给你出了一道送分题: 给你一个长为n的序列{vi},和一个数a,你可以从里面选出最多m个数 一个合法的选择的分数定义为选中的这些数的和加上额外规则的加分: 有b个额外的规则,第i ...
- 算法笔记_063:蓝桥杯练习 送分啦(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 这题想得分吗?想,请输出“yes”:不想,请输出“no”. 输出格式 输出包括一行,为“yes”或“no”. 2 解决方案 初步一看,这题 ...
- C语言 · 送分啦
问题描述 这题想得分吗?想,请输出"yes":不想,请输出"no". 输出格式 输出包括一行,为"yes"或"no". ...
- 51nod 1174 区间中最大的数(送盾题)
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出一个有N个数的序列,编号0 - N - 1.进行Q次查询,查询编号i至j的所有数中,最大的数是多少. ...
- PAT 甲级 1050 String Subtraction (20 分) (简单送分,getline(cin,s)的使用)
1050 String Subtraction (20 分) Given two strings S1 and S2, S=S1−S2 is defined to be t ...
- 请问如何实现字符串UTF8->BIG5,BIG5->UTF8。保证送分。-Java/JavaSE
请问如何实现字符串UTF8-> BIG5,BIG5-> UTF8. ------回答--------- ------其他回答(100分)--------- public String BI ...
随机推荐
- "pip3 install requests"
后续设置参考 “selenium python3” https://www.cnblogs.com/jpr-ok/p/10108231.html
- 安装 pymongo
- 数据分析与挖掘 - R语言:KNN算法
一个简单的例子!环境:CentOS6.5Hadoop集群.Hive.R.RHive,具体安装及调试方法见博客内文档. KNN算法步骤:需对所有样本点(已知分类+未知分类)进行归一化处理.然后,对未知分 ...
- python路径相关操作
#获取当前文件所在目录filedir = __file__ print os.path.dirname(filedir) #获取文件名print os.path.basename(filedir)
- Cocos Creator 获取节点的方式
1.通过find方式获取//获取节点 var node=cc.find("Canvas/logo"); //获取精灵组件 var sprite=node.getComponent( ...
- django项目mysql中文编码问题
在做django+mysql项目的时候,遇到中文报错问题. 问题分析:是由于mysql数据库,字符集的问题 在cmd命令行模式进入mysql mysql -uroot -p以root身份进入mysql ...
- python subprocess中ssh命令的特殊性
今天尝试使用python 的 subprocess 模块 使用类似如下语句: p=subprocess.Popen(['ssh','root@localhost'],stdout=subprocess ...
- node事件循环和process
1.node.js事件循环 node.js事件可以继续插入事件,如果有事件就继续执行下去,每一次事件处理结束后等待下一个事件的发生:没有要处理的事件了,那整个就结束了; setTimeout插入一个 ...
- 超简单系列:ubuntu 13.04 安装 apache2.2+mod_wsgi+Django
1,Ubuntu更新系统 sudo apt-get update sudo apt-get upgrade 2,安装apache,mod_wsgi,Django sudo apt-get instal ...
- Rpgmakermv(30) GameQuest任务插件
插件简介: 很牛X的任务插件(个人目前用过中的) 插件用法说明 Report any bugs, editor or plugin related here: http://forums.rpgmak ...