首页 > 其他分享 >cf353D. Queue(整体考虑转移)

cf353D. Queue(整体考虑转移)

时间:2023-10-30 18:45:27浏览次数:32  
标签:const int st Queue cf353D include 转移 define

D. Queue
f[i]表示第i个F需要多少时间才能让所有的M都移到她后面,那么我们考虑转移,分为两种情况。
第i个F和第i-1个F挨着,那么显然f[i]=f[i-1]+1
假如中间隔着一些M,
可以分为两种情况,假如i可以在i-1完成之前追上它,那么就是f[i-1]+1,否则就说明
i一直在进行交换,时间为在i之前的M的个数,而我们应当取两者中较大的。
所以f[i]=max(f[i-1]+1, m)

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<vector>
#define A puts("YES")
#define B puts("NO")
#define fo(i,a,b) for (int (i)=(a);(i)<=(b);(i)++)
#define fd(i,b,a) for (int (i)=(b);(i)>=(a);(i)--)
#define mk(x,y) make_pair((x),(y))
using namespace std;
typedef double db;
typedef long long ll;
const ll cost=1e12+1;
const int N=1e6+5;
const int mo=998244353;
char s[N];
int f[N],a[N],n,tot,m;

int main()
{
//	freopen("data.in","r",stdin);
//	freopen("ans.out","w",stdout);
	
	scanf("%s",s+1);
	n=strlen(s+1);
	
	int st=1;
	while (s[st]=='F' && st<=n) st++;
	
	fo(i,st,n) {
		if (s[i]=='M') m++;
		else {
			++tot;
			f[tot]=max(f[tot-1]+1, m);
		}
	}
//	fo(i,1,tot) printf("%d ",f[i]);
//	return 0;
	
	printf("%d",f[tot]);
	
	return 0;
}

 
 

标签:const,int,st,Queue,cf353D,include,转移,define
From: https://www.cnblogs.com/ganking/p/17798537.html

相关文章

  • C++---数据结构---队列(queue)
    queue容器queue基本概念概念:Queue是一种先进先出(FirstInFirstOut,FIFO)的数据结构,它有两个出口队列容器允许从一端新增元素,从另一端移除元素队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为队列中进数据称为—入队push队列中出数据称为—出队popque......
  • 系统集成易混淆知识点汇总-风险规避、风险转移
    概念:(1)风险规避:风险规避是指通过改变项目计划,把项目目标与某个威胁隔离开来,使项目目标【完全】不受该威胁的影响。(2)风险转移:风险转移是指通过签署风险转移合同,把某个或某些【单个项目】风险转移给第三方承担,或者把【整体项目】风险转移给第三方承担。区别:(1)规避是要使项目彻底不......
  • AQS是什么?AbstractQueuedSynchronizer之AQS原理及源码深度分析
    文章目录一、AQS概述1、什么是AQS2、技术解释3、基本原理4、AQS为什么这么重要二、AQS数据结构1、AQS的结构2、ReentrantLock与AbstractQueuedSynchronizer3、AQS的state变量4、AQS的队列5、AQS的Node(1)Node的waitStatus(2)属性说明三、ReentrantLock的lock方法分析AQS源码1、类图2、......
  • Teamcenter 查询转移符 ~ 问题
    Teamcenter设置为Windows格式查询: 2.*作为多字符通配符,?作为大字符通配符有些用户的图号或ID中包含*,在查询是需要增加~*将*转化为普通字符,例如:123123~*231......
  • Java队列Queue简述
    概述​ Queue是java中实现队列的接口,它总共只有6个方法,我们一般只用其中3个就可以了。Queue的实现类有LinkedList和PriorityQueue。最常用的实现类是LinkedList。Queue的6个方法分类抛出异常返回特殊值插入add(e)offer(e)删除remove()poll()检查element(......
  • 华为云云耀云服务器L实例评测|企业项目最佳实践之计划任务与Queue队列实践 (十)
    十一、计划任务与Queue队列实践:1.计划任务:Linux环境下定时或者周期性的执行一些任务通常由cron这个守护进程来完成,这是一个系统自带的相对也比较方便的系统工具。sudoapt-getinstallcron//默认自带目录结构:目录说明/var/spool/cron/crontabs用户调度任务目录,是每个用户包括r......
  • 救济金发放(The Dole Queue, UVa 133)
    #include<stdio.h>#include<string.h>#definemaxn100intn,k,m,a[25];intleft,chance;intwin,lose;chars[maxn],s2[maxn];  intgo(intp,intd,intt){ while(t--){  do{    p=(p+d+n-1)%n+1;//将顺时针与逆时针合并,顺时针向前......
  • c: Queue Calling
     /*********************************************************************************@fileTakeNumber.h*@brief排队等号*@author(geovindu,GeovinDu,涂聚文)*@date2023-10-19*@copyrightgeovindu站在巨人的肩膀上St......
  • c# Queue 队列的基本使用
    C#中的 Queue 是一种基于链表的先进先出(FIFO)数据结构。以下是一个简单的 Queue 实例:///<summary>///普通队列///</summary>publicvoidQueueShow(){//创建一个QueueQueue<string>queue=newQu......
  • Java AbstractQueuedSynchronizer
    目录前言CLH锁AQS框架AQS核心思想AQS的同步状态AQS对资源的共享方式AQS的重要方法AQS的数据结构NodeConditionObjectConditionConditionObjectAQS源码分析核心方法acquire方法addWaiteracquireQueuereleaseAbstractQueuedSynchronizer总结前言Java中的大部分同步类,如L......