首页 > 其他分享 >abc355e 题解

abc355e 题解

时间:2024-06-06 12:00:54浏览次数:10  
标签:pre abc355e int 题解 read push dis

abc355e

思路

WC2024T3 中知道一个技巧:如果知道区间 \([l,r]\) 的和就连边 \(l\to r+1\),那么想推出 \([L,R]\) 的区间和就要求 \(L\) 和 \(R+1\) 联通。

按题意把符合要求的边连上,设边权为 \(1\) 跑 bfs,求出 \(L\) 到 \(R+1\) 的最短路并记录路径上的点,就可以得到要询问的区间。

因为是从小往大推,对于最短路上的边 \(u\to v\),如果 \(u<v\) 就把区间和加上,否则减去。

code

int n,a,b;
int dis[maxn],pre[maxn];
vector<pii> ans;int res;
queue<int> q;
signed main(){
	n=read();a=read();b=read();
	mems(dis,0x3f);dis[a]=0;q.push(a);
	while(!q.empty()){
		int u=q.front();q.pop();
		for(int i=1;i<=(1<<n);i<<=1){
			int v=u+i;
			if(u%i==0&&v<=(1<<n)){
				if(dis[v]>dis[u]+1)dis[v]=dis[u]+1,pre[v]=u,q.push(v);
			}
			v=u-i;
			if(v%i==0&&v>=0){
				if(dis[v]>dis[u]+1)dis[v]=dis[u]+1,pre[v]=u,q.push(v);
			}
		}
	}
	// cout<<dis[0]<<" "<<dis[8]<<"\n";
	int u=b+1;
	while(u!=a){
		ans.push_back({pre[u],u});
		u=pre[u];
	}
	for(auto [l,r]:ans){
		int i=log2(abs(l-r)),j=min(l,r)/abs(l-r);
		if(l<r){
			printf("? %lld %lld\n",i,j);fflush(stdout);
			res+=read();
		}
		else{
			printf("? %lld %lld\n",i,j);fflush(stdout);
			res-=read();
		}
	}
	res%=100,res+=100,res%=100;
	printf("! %lld\n",res);fflush(stdout);	
}

标签:pre,abc355e,int,题解,read,push,dis
From: https://www.cnblogs.com/yhddd/p/18234876

相关文章

  • CF1007B 题解
    CF1007B思路显然题目要求计数\(u\midA,v\midB,w\midC\)。\(O(n\sqrtn)\)预处理出每个数的所有因数,记为集合\(p_i\)。容斥,记集合\(a,b,c,ab,ac,bc,all\)为\(p_A,p_B,p_C,p_A\capp_B,p_A\capp_A,p_B\capp_C,p_A\capp_B\capp_C\)。可以用bitset维护交集。首先加......
  • 【面试宝藏】MySQL 面试题解析
    MySQL面试题解析1.数据库三大范式是什么?第一范式(1NF):确保每列的原子性,即每列不能再分。第二范式(2NF):在满足1NF的基础上,每个非主属性完全依赖于主键,即消除部分依赖。第三范式(3NF):在满足2NF的基础上,任何非主属性不依赖于其他非主属性,即消除传递依赖。2.MySQL有关权限......
  • 【面试宝藏】Redis 常见面试题解析其二
    Redis高级面试题解析20.说说Redis哈希槽的机制?Redis集群采用哈希槽(HashSlot)机制来分布和管理数据。整个哈希空间被划分为16384个槽,每个键通过CRC16校验后取模映射到一个哈希槽。每个节点负责一部分哈希槽,从而实现数据分片和负载均衡。21.Redis集群的主从复制......
  • P4785 [BalticOI 2016 Day2] 交换 题解
    看到\(i\)和\(\lfloor\frac{i}{2}\rfloor\),考虑一颗二叉树。题目的操作相当于按顺序交换当前节点和左右儿子的权值。假设当前考虑的节点为\(id\),左儿子为\(ls\),右儿子为\(rs\),当前这些点的值分别为\(A,B,C\)。因为\(id\)的位置最靠前,最终又要字典序最小,所以要尽可能......
  • 题解:SP1442 CHAIN - Strange Food Chain
    双倍经验:P2024[NOI2001]食物链思路:一眼鉴定为并查集。观察题目发现有三种状态,考虑使用种类并查集(又称扩展域并查集)。既然有三种状态那么种类并查集自然也要开三倍。CODE:#include<bits/stdc++.h>usingnamespacestd;intfa[150010];intGet_Find(intx){//寻找父节点......
  • P1654 OSU! 题解
    P1654OSU!题解题目链接好题!但不得不说早期洛谷的题解质量是真的差,感觉没有一篇题解是讲的特别清楚的,我看了好久才搞懂。下面是我认为的一种更规范的解题过程。首先,我们设随机变量\(X_i\)表示从\(i\)向左的极长1串的长度,并且对于任意的\(i\),我们要想办法求出\(E(X_i......
  • (第26天)【leetcode题解】226、翻转二叉树 589、N叉树的前序遍历 590、N叉树的后序遍
    目录226、翻转二叉树题目描述思路代码589、N叉树的前序遍历题目描述思路代码590、N叉树的后序遍历题目描述思路代码思考总结226、翻转二叉树题目描述给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。示例:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,......
  • Codeforces Round 949题解(A、B、C)
    A.TurtleandPiggyArePlayingaGame首先\(p\)选\(2\)的话除得最慢,得的分多。考虑二进制表示,如果\(x=(1000000000)_{bin}\),则每次除以\(2\)都是相当于右移一位,除完之后仍然是\(2\)的倍数,变成\(1\)的步数就是把最高位的\(1\)移动到\(0\)位的步数。因为\(2l\ler\),所以\(l......
  • P8125 [BalticOI 2021 Day2] The short shank 题解
    首先会发现若\(t_i<=T\)的话那么他最终一定会造反。我们只考虑\(t_i>T\)的情况。设\(lst_i\)表示\(i\)左边第一个可以影响(使他造反)到\(i\)的位置,那么我们一定要在\([lst_i,i]\)这个区间中的某一个位置放上床垫才能使\(i\)不造反。这样有一个\(O(nd)\)的dp,但......
  • 2024年03月 GESP等级认证Python编程(一级)试题解析
    【单选题】(每题2分)1、小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是?()A、小程序   B、计时器   C、操作系统   D、神话人物   正确答案:C2、中国计算机学会(CCF)在2024年1月27日的颁奖典礼上颁布了王选奖,王选先生的重大贡献是?()A、制......