首页 > 其他分享 >20241020比赛总结

20241020比赛总结

时间:2024-10-20 16:10:24浏览次数:1  
标签:总结 100005 set 比赛 int 奇偶性 bfs include 20241020

T1 Reverse

https://www.gxyzoj.com/d/hzoj/p/P980

假设1在点i时,这个1可以通过一次翻转到达那些点,将这些点和i连边,此时答案就是s到x的最短路

但是,此时边数也会到达\(n^2\)级别

考虑优化,因为边权均为1,所以可以直接bfs,可以发现每个点能转移的点的奇偶性是有限制的,而且每个点至多被更新一次

所以可以将所有点按奇偶性分类后丢进set,然后找到转移边界,暴力更新即可

注意,选出的子串的长度必须为k,所以在靠近两个端点的地方是不能取点作为中心的

代码:

#include<cstdio>
#include<set>
#include<queue>
#define it set<int>::iterator
using namespace std;
int n,m,s,k,b[100005],ans[100005];
double lmid,rmid;
set<int> s1,s2;
queue<int> q;
void bfs(int st)
{
	for(int i=1;i<=n;i++)
	{
		ans[i]=1e9;
	}
	ans[st]=0;
	q.push(st);
	if(st%2) s1.erase(st);
	else s2.erase(st);
	while(!q.empty())
	{
		int u=q.front();
		q.pop();
		double ls=u-lmid,rs=rmid-u;
		int l=lmid-ls,r=rmid+rs;
		l=max(l,max(0,u-k+1)),r=min(r,min(n,u+k-1));
	//	printf("%d %d %d %d\n",u,l,r,ans[u]);
		if((u+k+1)%2)
		{
			it lid=s1.lower_bound(l);
			it rid=s1.lower_bound(r);
			while(*lid<=r&&lid!=s1.end())
			{
				if(b[*lid])
				{
					lid++;
					continue;
				}
				ans[*lid]=ans[u]+1;
				q.push(*lid);
				lid++;
			}
		//	printf("1");
			lid=s1.lower_bound(l);
			if(*rid<=r&&rid!=s1.end()) rid++;
			s1.erase(lid,rid);
		}
		else
		{
			it lid=s2.lower_bound(l);
			it rid=s2.lower_bound(r);
			while(*lid<=r&&lid!=s2.end())
			{
				if(b[*lid])
				{
					lid++;
					continue;
				}
				ans[*lid]=ans[u]+1;
				q.push(*lid);
				lid++;
			}
			lid=s2.lower_bound(l);
			if(*rid<=r&&rid!=s2.end()) rid++;
			s2.erase(lid,rid);
		}
	}
}
int main()
{
	freopen("reverse.in","r",stdin);
	freopen("reverse.out","w",stdout);
	scanf("%d%d%d%d",&n,&k,&m,&s);
	lmid=(1+k)*1.0/2.0,rmid=(n+n-k+1)*1.0/2.0;
	for(int i=1;i<=m;i++)
	{
		int x;
		scanf("%d",&x);
		b[x]=1;
	}
	for(int i=1;i<=n;i++)
	{
		if(i%2) s1.insert(i);
		else s2.insert(i);
	}
	bfs(s);
	for(int i=1;i<=n;i++)
	{
		if(ans[i]!=1e9) printf("%d ",ans[i]);
		else printf("-1 ");
	}
	return 0;
}

标签:总结,100005,set,比赛,int,奇偶性,bfs,include,20241020
From: https://www.cnblogs.com/wangsiqi2010916/p/18487428

相关文章

  • 2024-2025-1 20241328 《计算机基础与程序设计》第四周学习总结
    学期(如2024-2025-1)学号20241428《计算机基础与程序设计》第4周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标门电路,组......
  • 2024-2025-1 20231309《计算机基础与程序设计》第三周助教总结
    课程答疑最近同学们的提问大多都是与虚拟机、Linux命令有关,往往是在具体操作上出现了未曾意料的报错。而出现此类问题的主要原因包括:操作不规范,如Linux命令输入不准确等解决方案:出现报错后首先检查自己输入的命令是否准确无误,例如是否少空格少参数等,再看是否有缺漏步骤等。......
  • 《计算机基础与程序设计》第4周学习总结
    学期2024-2025-1学号20241414《计算机基础与程序设计》第四周学习总结作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里2024-2025-1计算机基础与程序设计第四周作业这个作业的目标1.算法的描述方法2.分支语句3.条件运算符4.逻......
  • USB协议详解第17讲(USB事务总结)
    1.USB传输回顾前面讲了四种传输的类型的事务组成,包括控制传输,同步传输,批量传输,中断传输。2.USB事务总结本节我们来对事务(transaction)相关内容做以总结,从前面学习中我们可以看到其实事务有三种类型,Setup事务、DataIN事务、DataOUT事务。Setup事务:主要向设备发送控制命令;Dat......
  • 2024-2025-1 20241305 《计算机基础与程序设计》第四周学习总结
    作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计(https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP))这个作业要求在哪里2024-2025-1计算机基础与程序设计第四周作业(https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/homework/13276))......
  • 24/10/10 第一次月考总结
    科目总分语文数学英语物理化学生物历史地理政治分数702.59398118.5838054437558级排10421466939503534497117114908241234成绩如上,非常惨痛。参考级部排名可以得到:化学>英语>物理>地理>数学>生物>政治>语文。......
  • 2024-2025-1 20241403《计算机基础与程序设计》第四周学习总结
    学期(如2024-2025-1)学号(如:20241403)《计算机基础与程序设计》第四周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第四周作业)这个作业的目标门电......
  • 16.java面向对象:面向对象的三大特征总结
    java面向对象:面向对象的三大特征面向对象的三大特征1.封装get和set规范属性的合法化2.继承类继承子类调用父类方法super的用法通过super调用父类public的属性super注意点super对比this方法重写静态方法中奇怪的现象非静态方法3.多态多态存在的条件多态中成员访问特点......
  • 20241313 刘鸣宇 《计算机基础与科学概论》第四周学习总结
    《C语言程序设计》学习总结1.学习了基础算数运算符并通过AI了解了常用运算符的优先级2.学习了复合的赋值运算符,增1与减1运算符,以及前缀与后缀的不同3.学习了宏常量与宏替换#define4.学习了const函数并对比了解const函数相比于宏常量的优势(const函数有数据类型,编译器能对其经......
  • 2024-2025-1 20241304 《计算机基础与程序设计》第4周学习总结
    2024-2025-120241304《计算机基础与程序设计》第4周学习总结作业信息|这个作业属于哪个课程|<2024-2025-1-计算机基础与程序设计)|>|-- |-- ||这个作业要求在哪里|<作业要求的链接>(https://www.cnblogs.com/rocedu/p/9577842.html#WEEK04))||这个作业的目标|<复习第四章内......