首页 > 其他分享 >CF1956F Nene and the Passing Game 解题报告

CF1956F Nene and the Passing Game 解题报告

时间:2025-01-15 09:04:08浏览次数:1  
标签:2000005 CF1956F 2000006 数轴 Nene ne int Game 区间

假设 \(j>i\) ,则:\(i+l_i\le j-l_j,i+r_i\le j-r_j\)

所以相当于看区间 \([i+l_i,i+r_i]\) 和区间 \([j-r_j,j-l_j]\) 是否有交集

可以将这些区间放在数轴上,考虑建虚点,将数轴上的每个点向包含它的区间连边

但是这样会有一个问题,记加为右区间,减为左区间,此时就无法判断是哪种区间在相交

所以可以只保留既有左区间又有右区间覆盖的点,这样就能保证一定是符合条件的

但是依次对每个点连边显然会T,考虑优化

先用 \(pre\) 和 \(ne\) 记录前/后满足条件的最近的点

对于区间 \([l,r]\),操作就应在 \([ne_l,pre_r]\)

利用差分的思想,统计数轴上每个点被覆盖且不为末端点的次数

因为作为末端点,后面没有与之相邻的点,就无法向后合并

如果次数不为0,就向后连边,最后看有多少连通块即可

代码:

#include<cstdio>
#include<algorithm>
using namespace std;
int T,n,l[2000006],r[2000005],pre[2000005],ne[2000006];
int cntl[2000006],cntr[2000006],f[4000006],tot;
int v[2000005];
int find(int x)
{
	if(f[x]!=x) f[x]=find(f[x]);
	return f[x];
}
int main()
{
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		tot=0;
		for(int i=0;i<=n;i++)
		{
			cntl[i]=cntr[i]=0;
			pre[i]=ne[i]=v[i]=0;
		}
		for(int i=1;i<=n;i++)
		{
			scanf("%d%d",&l[i],&r[i]);
			cntl[max(1,i-r[i])]++;
			cntl[max(1,i-l[i]+1)]--;
			cntr[min(n,i+l[i])]++;
			cntr[min(n,i+r[i]+1)]--;
			f[i]=i;
		}
		for(int i=1;i<=n;i++)
		{
			cntl[i]+=cntl[i-1];
			cntr[i]+=cntr[i-1];
			if(cntl[i]&&cntr[i])
			{
				pre[i]=ne[i]=++tot;
				f[n+tot]=tot+n;
			}
			
			else
			{
				pre[i]=pre[i-1];
			}
		}
		ne[n+1]=1e9;
		for(int i=n;i>0;i--)
		{
			if(!ne[i]) ne[i]=ne[i+1];
		}
		for(int i=1;i<=n;i++)
		{
			int ql=ne[max(1,i-r[i])];
			int qr=pre[max(0,i-l[i])];
			if(ql<=qr)
			{
				v[ql]++,v[qr]--;
				f[find(i)]=find(qr+n);
			}
			ql=ne[min(n+1,i+l[i])];
			qr=pre[min(n,i+r[i])];
			if(ql<=qr)
			{
				v[ql]++,v[qr]--;
				f[find(i)]=find(qr+n);
			}
//			printf("%d",i);
		}
		for(int i=1;i<=tot;i++)
		{
			v[i]+=v[i-1];
		}
		for(int i=1;i<=tot;i++)
		{
			if(v[i])
			{
				f[find(i+n)]=find(n+i+1);
			}
		}
		int ans=0;
		for(int i=1;i<=n+tot;i++)
		{
			if(f[i]==i) ans++;
		}
		printf("%d\n",ans);
	}
	return 0;
}

标签:2000005,CF1956F,2000006,数轴,Nene,ne,int,Game,区间
From: https://www.cnblogs.com/wangsiqi2010916/p/18672071

相关文章

  • Beyond Outcomes: Transparent Assessment of LLM Reasoning in Games
    题目超越成果:对LLM游戏推理的透明评估论文地址:https://arxiv.org/abs/2412.13602项目地址:https://visual-ai.github.io/gamebot摘要    大型语言模型(LLM)越来越多地部署在需要复杂推理的现实世界应用中。为了跟踪进展,需要强大的基准来评估它们在表面模式识别......
  • 让我们一起用Pygame Zero 画圆形(空心圆圈、实心圆、多个小球、多层同心圆、随机颜色同
    让我们一起用PygameZero画圆形(空心圆圈、实心圆、多个小球、多层同心圆、随机颜色同心圆、有渐变效果填充圆)本文目录:零、时光宝盒一、绘制空心圆圈二、绘制实心圆三、画多个静止小球四、绘制多层同心圆4.1、绘制5层同心圆4.2、绘制20层同心圆​4.3、绘制条纹相间......
  • RaceGame-Qt游戏项目构建-游戏地图
    RaceGame-Qt游戏项目构建-游戏地图游戏地图概述游戏界面固定为450px*800px;游戏地图由10px*10px像素的方块构成,采用等比缩放记录在一个45*80的array容器中。GameMap相关类GameMap相关类放在gamemap.h头文件中,对应的源文件是gamemap.cpp。一、classGameMa......
  • RaceGame-Qt游戏项目构建-图形界面
    RaceGame-Qt游戏项目构建-图形界面Qt提供了很多图形库,可以直接使用,绘制游戏地图、更新玩家位置,显示操作按钮等。游戏的主体逻辑已经通过Player类和GameMap类实现,只需要根据玩家信息、地图信息,绘制出图形化界面即可。游戏界面概述游戏界面的绘制主要包括:地图/墙体,玩家,操作......
  • RaceGame-Qt游戏项目构建-游戏框架
    RaceGame-Qt游戏项目构建-游戏框架游戏企划使用Qt图形化界面开发一款名为RaceGame的小游戏,游戏玩法是4方玩家(方块)在带有墙体的地图中以一定速度、一定方向前进,碰到墙体会反弹,最终玩家按照到达目的地的先后顺序排名。游戏过程中,玩家可以通过界面上的Button按钮进行释放技能,......
  • Luogu P3041 USACO12JAN Video Game G 题解 [ 紫 ] [ AC 自动机 ] [ 动态规划 ]
    VideoGamesG:弱智紫题,30min切了,dp思路非常板。多模式串一看肯定就是要建出AC自动机,然后在fail树里下传标记,预处理每个节点到达后的得分。然后设计\(dp_{i,j}\)表示第\(i\)个字符,AC自动机里匹配节点在\(j\)的最大答案,刷表法转移即可:\[dp_{i+1,ch_{j,c}}\gets\ma......
  • 玩转物联网-4G模块如何快速将数据上传到OneNET平台(自动注册)
    目录1前言2环境搭建2.1硬件准备2.2软件准备2.3硬件连接2.4检查驱动3创建和获取OneNET平台连接信息3.1创建账号3.2创建产品3.3设置物模型3.4获取注册设备信息4连接OneNET4.1打开配置工具读取基本信息4.2设置模块连接参数并进行数据交互5.总结......
  • 【静】1.修改fps microgame成为手机版(鼠标)
    1.fps鼠标锁死,先解决这个问题!2.vs中查找"mouse",一共有24处。看了看,有的涉及数值,但锁不住鼠标3.同上查找cursor,21处。Cursor.lockState(锁定在屏幕中央),Cursor.visible=false;(显示鼠标),不要想着一次性达到双端效果,现在就只做手机版。 4.粗略看,在结束游戏、退出游戏、唤醒......
  • 01.03 CW 模拟赛 T2. game
    思路先把赛时的思路搬一下你发现确定两个人的起始点,其实是可以确定\(\rm{Alice}\)的选点可能的,考虑写个代码验证一下具体的,就是分成两个弧,\(\rm{Alice}\)可以选择一个弧的优势(过半),然后其他的劣势感觉现在是猜结论,全靠感性,我也不知道怎么解释这个问题那么......
  • CT5GPROG Gameplay Programming
    GameplayProgramming(CT5GPROG)ModuleCode:M30849Level:5GeneralAssessmentInformationAssessment1(100%):MechanicsDemoandPresentationSubmitonlineviaMoodle.CheckMoodleforduedate.ShortDescription:Thecourseworkiscompletedindividual......