首页 > 其他分享 >abc349g-ti-jie

abc349g-ti-jie

时间:2024-05-08 18:22:39浏览次数:26  
标签:10 jie pw int h2 maxn ti abc349g mod

abc349g

思路

从前往后枚举 $i$,每次对 $i+1\le j\le i+a_i$ 的 $j$ 赋值 $b_j=b_{i\times 2-j}$。同时有 $b_{i+a_i+1}\ne b_{i-a_i-1}$。用 $ban_{i,j}$ 记录 $i$ 不能是 $j$,如果要给 $i$ 赋值就选最小的。

最直接的就是并查集倍增将两段区间并起来。

可以用类似马拉车的思路得到一个贪心算法。枚举,维护 $r$ 表示当前已知 $b_1\dotsb b_r$。如果 $i+a_i\ge r$ 就把 $r$ 更新到 $i+a_i$,否则什么也不做。最后在 hash 判断所有 $a_i$ 是不是都满足条件。

code

int n,a[maxn],b[maxn];
int h[maxn],h2[maxn],pw[maxn],bas,val[10];
int calc(int l,int r){return (h[r]-h[l-1]*pw[r-l+1]%mod+mod)%mod;}
int calc2(int l,int r){return (h2[l]-h2[r+1]*pw[r-l+1]%mod+mod)%mod;}
vector<int> ban[maxn];bool vis[10];
void work(){
	n=read();
	for(int i=1;i<=n;i++)a[i]=read();
	for(int i=2,r=1;i<=n;i++){
		if(i>r){
			int mex=10;
			for(int j:ban[i])vis[j]=1;
			for(int j=0;j<10;j++)if(!vis[j]){mex=j;break;}
			for(int j:ban[i])vis[j]=0;
			if(mex==10){printf("No\n");return ;}
			b[r=i]=mex;
		}
		if(i+a[i]>r){
			for(int j=r+1;j<=i+a[i];j++)b[j]=b[i*2-j];
			r=i+a[i];
		}
		if(i-a[i]-1){ban[i+a[i]+1].push_back(b[i-a[i]-1]);}
	}
	srand(time(0));
	bas=rand()*rand()%mod;
	for(int i=0;i<10;i++)val[i]=rand()*rand()%bas;
	pw[0]=1;for(int i=1;i<=n;i++)pw[i]=pw[i-1]*bas%mod;
	for(int i=1;i<=n;i++)h[i]=(h[i-1]*bas+val[b[i]])%mod;
	for(int i=n;i;i--)h2[i]=(h2[i+1]*bas+val[b[i]])%mod;;
	for(int i=1;i<=n;i++){
		if(calc(i-a[i],i)!=calc2(i,i+a[i])){printf("No");return ;}
		if(i-a[i]>1&&i+a[i]<n){
			if(b[i-a[i]-1]==b[i+a[i]+1]){printf("No");return ;}
		}
	}
	printf("Yes\n");
	for(int i=1;i<=n;i++)printf("%lld ",b[i]+1);
}

标签:10,jie,pw,int,h2,maxn,ti,abc349g,mod
From: https://www.cnblogs.com/yhddd/p/18180554

相关文章

  • Elements in iteration expect to have 'v-bind:key' directives.
    当组件中使用v-for时,如果不指定key,则会有红色警告信息。解决方案如下。方案一:绑定key(亲试有效)//方式一<liv-for="(item,index)inlist":key="index">//方式二<liv-for="(item,index)inlist":key="item.id">//方式三<liv-for="(item,in......
  • GeometryCollection 的类型映射器(TypeHandler)
    byemanjusakafromhttps://www.emanjusaka.top/2024/05/mybatis-typeHandler-geometryCollection彼岸花开可奈何本文欢迎分享与聚合,全文转载请留下原文地址。GeometryCollection是GeoJSON数据模型中的一个类型,用于表示一个几何对象的集合。MySQL8中支持了GeometryCol......
  • 为什么在有@Transactional注解的方法,一定要加rollbackFor异常回滚的异常类型?
    在spring项目中,@Transactional注解默认会回滚运行时异常(RuntimeException)及其子类当你在一个有@Transactional注解方法里面抛了一个Expection类型的异常,呢它是不支持事务回滚的,异常继承体系我们在一个方法里面要对事务进行操作,如果要抛异常,应该抛出untimeException,不能直接......
  • spring刷题记录——to be continue
    在牛客网刷的题目,类似于补基础了?这里按照知识点进行分类,因为发现有些同样的知识点不同的题目还是很痛苦。这里就不用颜色标记了,因为我觉得都要记。Spring容器篇Spring容器也叫做Ioc容器(Ioc,在我之前写的随笔里面也有谈到),本质上就是一个工厂。Sp......
  • Windows下使用ONNXRuntime推理YOLOv8
    一、准备工作将训练好的pt文件转为onnx格式。yoloexportmodel=best.ptformat=onnxdevice=0opset=13dynamic#如果是动态Shape的话,命令行参数dydynamic一定要加上,不然就是static的模型二、下载与安装ONNXRuntime注意:下载安装onnxruntime-gpu时需要保证其与cuda的兼容......
  • c# Dictionary<TKey,TValue>.TryAdd
    原文链接:https://learn.microsoft.com/zh-cn/dotnet/fundamentals/code-analysis/quality-rules/ca1864Dictionary<TKey,TValue>.ContainsKey(TKey) 和 Dictionary<TKey,TValue>.Add 都执行查找操作,这是冗余设置。如果字典中已存在键,Dictionary<TKey,TValue>.Add 也会引发异......
  • Server-side vulnerabilities :path traversal
    来自bp的学院,提供了靶机,是个学习好地方服务器漏洞之路径遍历 就是说网站提供的图片,如果直接通过src="/loadImage?filename=xxx.jpg“读取的话,可以通过构造”filename=../../../etc/passwd"参数,拿到服务器的passwd文件,这样能读取服务器的用户放一个靶机地址:https://portswigg......
  • 【container】【docker-compose】【mysql】【redis】【rabbit mq】【mongo】【elastic
    @目录写在前面mysqlredisrabbitmqmongoelasticsearch单节点多节点参考资料dockerkuberneteshelmk3s写在前面相关博文个人博客首页免责声明:仅供学习交流使用!开源框架可能存在的风险和相关后果将完全由用户自行承担,本人不承担任何法律责任。mysqlversion:'3'services:......
  • sql server时间戳timestamp
    原文链接:https://www.cnblogs.com/hanke123/p/4741561.html在SQLServer中联机丛书是这样说的:SQLServertimestamp数据类型与时间和日期无关。SQLServertimestamp是二进制数字,它表明数据库中数据修改发生的相对顺序。实现timestamp数据类型最初是为了支持SQLServer恢......
  • ITIL4视角下的IT监控与故障管理:守护服务健康的双刃剑
    引言:监控的曙光在IT服务管理的浩瀚星图中,"监控"这一璀璨星辰终于得到了应有的重视与聚焦。ITIL4的出台,不仅明确将监控告警纳入事件管理的广阔宇宙,而且强调了其在预防故障、保障服务连续性中的核心地位。当组织拥抱ITIL4的管理智慧时,多套监控系统的部署成为了常态,每一束监控之光......