CF1774C Ice and Fire *1300

Luogu

题意简述

有\(n\)个人,第\(i\)个人温度为\(i\),进行\(n-1\)次对战。

所以给出一个长度为\(n-1\)的\(01\)串\(s\),\(s_i\)表示第\(i\)局的对战环境为\(0\)或\(1\)。

每局任意选出\(2\)人对战,规则如下:

  • 如果该局对战环境为\(0\),则两人中温度低的获胜。
  • 如果该局对战环境为\(1\),则两人中温度高的获胜。
  • 每局结束,失败者被淘汰,其他玩家继续对战。

给定\(T\)组测试样例,每组样例给出\(n\)和长度为\(n\)的\(s\)。

对于每组样例,请分别输出前\(2\)个人、前\(3\)个人、……、前\(n\)个人按\(s\)的规则进行对局(\(s\)可能有剩余),多少人有机会获胜。

思路分析

咱先管前\(n\)个对局的情况。

首先可以发现当\(s\)全为\(0\)时,答案就是\(1\),而\(s\)全为\(1\)时,答案就是\(n\)。

那么当\(s\)是\(000111\)这种有两段的,怎么办?

\(s\)为两段的分析

\(n=6,s=00011\)时,我们发现填完前面\(3\)个\(0\)时,答案就是剩下的最大值了。所以我们只需要考虑前三轮对局剩下玩家的最大温度是多少。

我们设最后一段的长度为\(k=2\)。

我们可以发现如果某次对局环境是\(0\),那么我们能淘汰掉的值在\([2,n]\)区间内;如果是\(1\)则在\([1,n-1]\)内。

于是在这个样例中,前\(3\)次对战就相当于在\([2,6]\)中选取\(n-k-1=3\)个值淘汰掉,剩下\(3\)个。

  • 如果淘汰掉的人正好是\(\{6,5,4\}\),那么最大值就是\(3\)了。
  • 如果淘汰掉的人是\(\{6,5,3\}\)、\(\{6,5,2\}\)等,那么最大值就是\(4\)了。
  • 如果淘汰掉的人是\(\{6,4,3\}\)等,那么最大值就是\(5\)了。
  • 如果淘汰掉的人是\(\{5,4,3\}\)等,那最大值不变,就是\(6\)。

综上我们可以发现,\(s\)为两段时,根据被淘汰的人的连续情况,剩下人的最大值在\([k+1,n]\)之间,故答案为\(n-k\)。

推广——\(s\)为多段的分析

当\(s\)为\(3\)段或以上,会怎样呢?

\(n=7,s=100011\)时,\(k=2\),同样是求对战\(4\)次后的最大值。

那么前\(4\)次对战,我们相当于在\([1,n-1]\)淘汰掉\(1\)个,再在\([2,n]\)淘汰掉\(3\)个。

于是前\(4\)次对战就相当于在\([1,n]\)中选取\(n-k-1=4\)个值淘汰掉,剩下\(3\)个。

是不是很眼熟?只不过这次的区间是\([1,n]\),但是显然这并没有影响。因为对战一共\(n-1\)局,所以在最后一段前最多进行\(n-2\)次比赛。最坏情况我们可选淘汰的区间长度为\(n-1\),这种情况刚好够组成\(n-k\)个最大值,更别说这种可选区间长度为\(n\)的情况了。

所以呢,答案还是\(n-k\)。

预处理

至此,求前\(x\)个的答案,就是看\(s\)的前\([1,x]\)中,最后一段的长度。

直接遍历求每一个会超时,所以我们可以用\(dp\)的思想预处理一下。

实现见代码吧。

Code

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int t,n,siz[200010];
string s;
int main(){
cin>>t;
while(t--){
cin>>n>>s;
int len=s.size();
siz[0]=1;
for(int i=1;i<len;i++){
if(s[i]==s[i-1]) siz[i]=siz[i-1]+1;
else siz[i]=1;
}
for(int i=2;i<=n;i++){
cout<<i-siz[i-2]<<" ";
}
cout<<endl;
}
return 0;
}

[题解]CF1774C Ice and Fire的更多相关文章

  1. 【腾讯Bugly干货分享】移动App入侵与逆向破解技术-iOS篇

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e0acc896e9ebb6865f321 如果您有耐心看完这篇文章,您将懂 ...

  2. JavaScript构造函数+原型创建对象,原型链+借用构造函数模式继承父类练习

    虽然经常说是做前端开发的,但常常使用的技术反而是JQuery比较多一点.在JavaScript的使用上相对而言少些.尤其是在创建对象使用原型链继承上面,在项目开发中很少用到.所以今天做个demo练习一 ...

  3. python 自然语言处理(四)____词典资源

    词典或者词典资源是一个词和/或短语及其相关信息的集合,例如:词性和词意定义等相关信息.词典资源附属于文本,而且通常在文本的基础上创建和丰富.下面列举几种nltk中的词典资源. 1. 词汇列表语料库 n ...

  4. 9.Solr4.10.3数据导入(post.jar方式和curl方式)

    转载请出自出处:http://www.cnblogs.com/hd3013779515/ 1.使用post.jar方式 java -Durl=http://192.168.137.168:8080/s ...

  5. Solr记录-solr检索和查询数据

    Solr检索数据 在本章中,我们将讨论如何使用Java Client API检索数据.假设有一个名为sample.csv的.csv文档,其中包含以下内容. 001,9848022337,Hyderab ...

  6. Kafka Streams开发入门(2)

    背景 上一篇我们介绍了Kafka Streams中的消息转换操作map,今天我们给出另一个经典的转换操作filter的用法.依然是结合一个具体的实例展开介绍. 演示功能说明 本篇演示filter用法, ...

  7. Django总结篇

    1.0 简述http协议和常用请求头 http协议: ( 基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)) HTTP协议是Hyper Text Transfer Pro ...

  8. Deep Dive into Neo4j 3.5 Full Text Search

    In this blog we will go over the Full Text Search capabilities available in the latest major release ...

  9. AHUACM寒假集训II(线段树)

    B.Mayor's posters POJ2528 题目大意: D.Count Color POJ2777 题目大意:长为 L ( L ≤ 1 0 5 ) L( L\leq10^5) L(L≤105) ...

  10. HDU 1045(Fire Net)题解

    以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定大小的棋盘中部分格子存在可以阻止互相攻击的墙,问棋盘中可以放置最多多少个可以横纵攻击炮塔. [题目分析] 这题本来在搜索专题 ...

随机推荐

  1. 【深度评测】Joomla Auto Readmore插件:自动提取缩略图+智能摘要,双引擎驱动内容效率革命

    "文章缩略图与摘要分离管理.重复上传图片.移动端封面图比例失调--"这些Joomla站长的经典痛点,如今被Auto Readmore插件的全自动缩略图提取功能彻底终结.本文将深度解 ...

  2. Linux c 运行时获取动态库所在路径

    记录一下如何在Linux环境下运行时获取动态库路径. 只讨论Linux amd64和arm64环境,因为使用的办法都是平台相关的不具备可移植性. 准备 一般来说动态库并不需要关心自己所在的文件系统上的 ...

  3. 文本分割器html代码

    旨在优化文本处理任务的效率与效果.其核心功能是通过分析文本结构.语义或固定长度,将大段内容拆分为逻辑连贯的小单元,从而适配下游任务的输入限制(如大语言模型的上下文窗口),或提升文本分析的精准度.支持按 ...

  4. PTA 4-1

    PTA    习题4-1 求奇数和 (15分) 本题要求计算给定的一系列正整数中奇数的和. 输入格式: 输入在一行中给出一系列正整数,其间以空格分隔.当读到零或负整数时,表示输入结束,该数字不要处理. ...

  5. 视频音频对嘴--Wav2Lip

    之前介绍了将图片加音频进行对嘴处理,生成新的视频:基础版: https://www.cnblogs.com/cj8988/p/18952604 进阶版(加表情) :https://www.cnblog ...

  6. 一个C#二维码图片识别

    https://www.cnblogs.com/xuezhizhang/p/8968515.html 关键是这个 ThoughtWorks.QRCode.Codec; NuGet直接下载就可以了 // ...

  7. AI领域又新增协议: AG-UI

    随着AI的快速发展正在重塑技术生态,协议的演进速度尤为迅猛.一个令人头疼的问题浮现了:不同的AI智能体和前端应用之间就像说着不同语言的人,无法顺畅交流.开发者们需要为每个智能体单独编写接口,维护成本高 ...

  8. 安装程序无法自动安装virtual machine

    安装VMware Tools 失败 发现在给过旧的系统安装 安装VMware Tools 的时候,会失败,比如 win7.win server2008等. 原因 官网的说明,在这里 看不懂的自行翻译: ...

  9. Andriod SDK安装教程

    前言 最简单的方式 我们使用ANDROID STUDIO这款开发工具下载对应的Andriod SDK. 可是我们如果不开发安卓,只是用它的一些SDK包的话而安装整个开发工具,就没必要了. 这里讲的是用 ...

  10. Luogu P9588 队列 题解

    P9588 队列 考虑转化问题,将原问题转化为一个长度为 \(q\) 的序列.序列中 \(x\) 表示一段 \(1\sim x\) 的区间. 操作 \(1\) 每次增加时,输入 \(x\),在数组末尾 ...