HZOI20190908模拟40 队长快跑,影魔,抛硬币 题解

题面:https://www.cnblogs.com/Juve/articles/11487699.html

队长快跑:

权值线段树与dp

yy的不错

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int MAXN=1e5+5;
int n,a[MAXN],b[MAXN],ans=0,lsh[MAXN<<1],cnt,tot=0;
struct node{
	int l,r,laz,mx;
}tr[MAXN<<4];
void build(int k,int l,int r){
	tr[k].l=l,tr[k].r=r;
	if(l==r){
		tr[k].mx=0;
		return ;
	}
	int mid=(l+r)>>1;
	build(k<<1,l,mid);
	build(k<<1|1,mid+1,r);
}
void down(int k){
	tr[k<<1].laz+=tr[k].laz;
	tr[k<<1|1].laz+=tr[k].laz;
	tr[k<<1].mx+=tr[k].laz;
	tr[k<<1|1].mx+=tr[k].laz;
	tr[k].laz=0;
}
void pushup(int k){
	tr[k].mx=max(tr[k<<1].mx,tr[k<<1|1].mx);
}
int query_max(int k,int opl,int opr){
	int l=tr[k].l,r=tr[k].r;
	if(opl<=l&&r<=opr) return tr[k].mx;
	if(tr[k].laz) down(k);
	int mid=(l+r)>>1,res=0;
	if(opl<=mid) res=max(res,query_max(k<<1,opl,opr));
	if(opr>mid) res=max(res,query_max(k<<1|1,opl,opr));
	return res;
}
void update(int k,int opt,int val){
	int l=tr[k].l,r=tr[k].r;
	if(l==r){
		tr[k].mx=max(tr[k].mx,val);
		return ;
	}
	if(tr[k].laz) down(k);
	int mid=(l+r)>>1;
	if(opt<=mid) update(k<<1,opt,val);
	else update(k<<1|1,opt,val);
	pushup(k);
}
void change(int k,int opl,int opr){
	int l=tr[k].l,r=tr[k].r;
	if(opl<=l&&r<=opr){
		++tr[k].mx;
		++tr[k].laz;
		return ;
	}
	if(tr[k].laz) down(k);
	int mid=(l+r)>>1;
	if(opl<=mid) change(k<<1,opl,opr);
	if(opr>mid) change(k<<1|1,opl,opr);
	pushup(k);
}
signed main(){
	scanf("%d",&n);
	for(int i=1;i<=n;++i){
		scanf("%d%d",&a[i],&b[i]);
		lsh[++tot]=a[i],lsh[++tot]=b[i];
	}
	sort(lsh+1,lsh+tot+1);
	cnt=unique(lsh+1,lsh+tot+1)-lsh;
	for(int i=1;i<=n;++i){
		a[i]=lower_bound(lsh+1,lsh+cnt+1,a[i])-lsh;
		b[i]=lower_bound(lsh+1,lsh+cnt+1,b[i])-lsh;
	}
	build(1,1,cnt);
	for(int i=n;i>=1;--i){
		if(a[i]>b[i]){
			int p=query_max(1,1,b[i]-1)+1;
			update(1,b[i],p);
			change(1,b[i]+1,a[i]);
		}else{
			int p=query_max(1,1,a[i]-1)+1;
			update(1,b[i]+1,p);
		}
	}
	printf("%d\n",tr[1].mx);
    return 0;
}

抛硬币:

乱搞dp

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int MAXN=3005;
const int mod=998244353;
int l,len,f[MAXN][MAXN],s[MAXN];
char ch[MAXN];
signed main(){
	scanf("%s",ch+1);
    scanf("%d",&l);
    len=strlen(ch+1);
	//cout<<len<<endl;
	for(int i=1;i<=len;++i){
		f[i][0]=1;
		for(int j=i-1;j>=1;--j){
			if(ch[j]==ch[i]){
				s[i]=j;
				break;
			}
		}
	}
	//for(int i=1;i<=len;++i) cout<<s[i]<<endl;
    f[0][0]=1;
    for(int i=1;i<=len;++i){
		for(int j=1;j<=l;++j){
			if(s[i]!=0) f[i][j]=((f[i-1][j]+f[i-1][j-1]-f[s[i]-1][j-1])%mod+mod)%mod;
			else f[i][j]=(f[i-1][j]+f[i-1][j-1])%mod;
		}
	}
	printf("%d\n",f[len][l]);
	return 0;
}

原文地址:https://www.cnblogs.com/Juve/p/11487702.html

时间: 2024-08-29 23:13:41

HZOI20190908模拟40 队长快跑,影魔,抛硬币 题解的相关文章

【python游戏编程之旅】第九篇---嗷大喵快跑小游戏开发实例

本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 前几期博客我们一起学习了,pygame中的冲突检测技术以及一些常用的数据结构. 这次我们来一起做一个简单的酷跑类游戏综合运用以前学到的知识. 程序下载地址:http://yunpan.cn/cLIcJgTvq4tZS 访问密码 901f 源代码网盘地址:http://yunpan.cn/cLIc67S4nNRFY 访问密码 c139 github地址:https://github.com/XINCGer/

LYK 快跑!(run)

LYK 快跑!(run)Time Limit:5000ms Memory Limit:64MB[题目描述] LYK 陷进了一个迷宫! 这个迷宫是网格图形状的. LYK 一开始在(1,1)位置, 出口在(n,m).而且这个迷宫里有很多怪兽,若第 a 行第 b 列有一个怪兽,且此时 LYK 处于第 c 行 d 列,此时这个怪兽对它的威胁程度为|a-c|+|b-d|.LYK 想找到一条路径,使得它能从(1,1)到达(n,m),且在途中对它威胁程度最小的怪兽的威胁程度尽可能大.当然若起点或者终点处有怪兽

横屏小游戏--萝莉快跑源码分析三

主角出场: 初始化主角 hero = new GameObjHero(); hero->setScale(0.5); hero->setPosition(ccp(100,160)); hero->setVisible(false); addChild(hero,1); 进入GameObjHero类ccp文件 创建主角及动作 this->setContentSize(CCSizeMake(85,90)); //接收触摸事件 CCDirector* pDirector = CCDire

横屏小游戏--萝莉快跑源码分析一

Cpp文件功能介绍 GameAboutScene.cpp 关于页面 GameMainScene.cpp游戏主页面 GameMark.cpp分数 GameMenuScene.cpp游戏主菜单 GameObjHero.cpp主角 GameObjMap.cpp游戏地图 GameObjStar.cpp星星 菜单主页面: 主菜单页面背景 CCSprite* bg = CCSprite::create("MainMenu.png"); bg->setScale(0.5); bg->se

静态分析第三发 so文件分析(小黄人快跑)

本文作者:i春秋作家--HAI_ 0×00 工具 1.IDA pro 2.Android Killer 0×01 环境 小黄人快跑 下载地址http://download.csdn.net/download/qq_36869808/10179100 0×02 支付分析 和其他的支付不一样,没有使用原生的Toast,所以我们要进行进一步分析. 0×03 祭神器 之前隐藏了一个技能,当然不是我的哈,是神器的技能.这个技能厉害到不需要动态调试就可以查看LOG.也是感谢程序员的辛勤奉献,不知道是不是调试

大话重构连载4:大布局与小步快跑

以往我们在重新设计一个系统时,总是喜欢大布局.全面地整理系统需求,全面地分析系统功能,再全面地设计系统.开发.测试.这样一个过程往往会持续数月,花费大量的工作量.但是,不到最后设计出来,谁都不知道会不会存在问题.这就是“大布局”的弊病. 正因为如此,软件大师在讲述系统重构时总是强调,系统重构应当避免大设计,而应当尽量采用一个一个连续不断的小设计.这就是我们所说的“小步快跑”的设计模式. 小步快跑体现出了敏捷软件开发的特点——简单与快速反馈.不要想得太多了,活在今天的格子里,因为你永远不可能预知今

cocos2dx实战篇——Demo《萝莉快跑》学习心得

[唠叨] 源码教程请移步:http://blog.csdn.net/iamlazybone/article/details/19612941 感谢懒骨头提供了这么多的Demo教程,对于初学者的我而言,帮助真的十分大. 注:本节仅仅记录博主自身学习<萝莉快跑>的心得体会. [游戏截图] [学习心得] 1.游戏主场景分层 如果将所有的元素全部都写在一个Game类里面,会很混乱,且改动也很麻烦. 所以应该对游戏的元素进行分层,如:背景层.人物层.怪物层.道具层等. 然后再将所有的层放入Game场景中

大话重构连载11:小步快跑是这样玩的

说了那么多.相信你对小步快跑的概念有了一个初步的印象,但理解还不是非常深.让我们来看一看一个实际工作中的样例,来亲身感受一下什么是大布局,什么是大设计.什么是小设计. 还是回到前面那个HelloWorld的样例,起初的需求总是简单而清晰的. 当用户登录一个站点时,站点往往须要给用户打一个招呼:"hi, XXX! ".同一时候,假设此时是上午则显示"Good morning! ",假设是下午则显示"Good afternoon! ",除此显示&qu

游戏开发视频教程_基于MFC设计的MINI快跑游戏

基于MFC设计的MINI快跑游戏(游戏开发.MFC精讲.线程与进程通信) 课程分类:游戏开发 适合人群:初级 课时数量:36课时 用到技术:MFC涉及项目:MINI快跑游戏 咨询QQ:1840215592 一.模块介绍 1.MFC基础篇:主要讲解c++的一些技术难点以及重点 容器与算法精讲 类与数据抽象精讲 模板与泛型编程精讲 标准IO库知识点深入浅出 2.MFC进阶篇:主要讲解MFC的深入浅出 CObject类详解 消息映射的实现 MFC的DLL精讲 MFC的进程和线程精讲 3.MFC设计篇: