传送门

Wc在苦学一学期的魔法之后终于有所成就,并成功获得了奖学金。

现在有一条长廊,上面有n个房间,从1开始编号,wc要去第k个房间拿奖学金。刚开始在第一个房间和第n个房间处分别有一个传送门,WC可以利用传送门进行传送。

传送门的传送有如下规则:

1)传送门只能传送到两个魔法阵中间的位置
如:传送门在1、1位置,那么只能传送到1

传送门在1、2位置,那么只能传送到1

传送门在1、3位置,那么只能传送到2

传送门在1、4位置,那么只能传送到2(简单的除法)

2)在传送完成后,如果到达第k个房间,则传送结束;如果未到目的地,就只能在面向第k个房间的方向的前一个房间的位置设置一个新的传送门,并且移除背对自己的传送门,确保传送门只有两个

如:有5个房间,要去第4个房间 传送门的位置在1、5

第一次传送 到达第3个房间,4在3的右边,所以在第4个房间设置传送门,移除第1个房间的传送门,现在传送门的位置在4、5

第二次传送 到达第4个房间

如果在传送到第1个房间,只能在第2个房间设置传送门

如果在传送到第n个房间,只能在第n-1个房间设置传送门

 

现在问你wc至少要传送几次才能到达第k个房间。

 

Input

输入数据有多组 
每行两个整数n、k (1<=k<=n<=1000000) 

Output

每行一个整数,表示最少的传送次数

Sample Input

2 2
9 5
5 4
50 3
1000000 1000000

Sample Output

2
1
2
4
20

Hint

#include<iostream>
using namespace std;
int a[1000015];
int main()
{
	int n,k;
	while(cin>>n>>k)
	{   int x;
	int count=0;
	int i=1;
for(int j=1;j<=n;j++)
a[j]=j;
	
		while(i<=n)
		{
			x=(a[i]+a[n])/2;
			
			count++;
			if(x==k)
			{
				cout<<count<<endl;
				break;
			}
			else if(x<k)
			{
				i=x+1;
			}
			else
			n=x-1;
		
			
		}
		
	}
	
	
	return 0;
}

这个有点多余,下面这个比较好

#include<iostream>
#include<algorithm>
using namespace std;

int n,k;
int ans;

int binary_search(int l,int r,int k){
	int sum=0;
	while(l<=r){
		sum++;
		int mid=(l+r)/2;
		if(mid==k) return sum;
		if(mid<k) l=mid+1;
		if(mid>k) r=mid-1;
	}
}

int main(){
	while(cin>>n>>k){
		ans=binary_search(1,n,k);
		cout<<ans<<endl;
	}
}


//模拟二分搜索  

 

在Unity中实现传送门效果,通常涉及多个方面的开发与配置,包括环境搭建、Shader编程、AR技术集成等。以下是一个较为完整的指南,涵盖基础原理和实现方法: ### 三、实现传送门效果的关键步骤 #### 1. Unity ShaderGraph 实现旋涡(传送门)效果 使用 **ShaderGraph** 是制作传送门视觉效果的一种常见方式。通过编写自定义着色器,可以模拟出类似“旋涡”或“扭曲”的动态视觉效果,使用户感受到传送门的神秘感和动态感。 - 在Unity编辑器中启用 **Shader Graph** 插件,并完成基础配置。 - 创建一个新的Shader Graph,添加主纹理节点,并将其连接到主输出节点。 - 添加时间节点(Time Node)并将其与UV扰动结合,创建一个动态变化的效果。 - 使用噪声函数(如Simple Noise或Gradient Noise)来生成随机扰动,从而产生类似漩涡的流动感。 - 将最终的Shader应用到一个Quad或者Plane上,作为传送门的视觉表现[^2]。 示例代码片段(用于控制材质参数): ```csharp public class PortalEffect : MonoBehaviour { public Material portalMaterial; private float time = 0f; void Update() { time += Time.deltaTime; portalMaterial.SetFloat("_Time", time); } } ``` #### 2. AR 环境下的传送门实现 如果你希望将传送门功能集成到增强现实(AR)环境中,可以借助 **Unity ARFoundation** 来实现跨平台支持。 - 首先设置好AR Foundation环境,包括导入必要的包(如ARKit或ARCore),并确保设备兼容性。 - 利用平面检测功能(Plane Detection)来识别现实世界中的地面或其他平面,作为传送门放置的位置。 - 创建两个相机:一个用于显示真实世界的画面(AR摄像机),另一个用于渲染虚拟场景(即传送门另一侧的世界)。 - 使用遮挡处理技术(如模板测试或深度测试)来确保传送门只在特定区域内可见,避免虚拟内容穿透现实对象。 - 控制AR状态的开启与关闭,例如通过按钮触发AR模式,同时进行硬件检测以确保设备支持所需功能[^3]。 #### 3. PICO 设备上的传送门实现 对于VR设备如PICO系列,尤其是PICO4,可以通过以下方式实现传送门效果: - 调用PICO SDK提供的透视接口(Passthrough API)来获取真实世界的影像流。 - 在Unity中构建一个三维传送门模型,通常是一个带有开口的框架。 - 在传送门的两端分别放置两个Quad,其中一个面向真实世界,应用带有深度测试或模板测试的材质;另一个面向虚拟世界,应用“Underlay”类型的“开洞”Shader,使得透过传送门可以看到虚拟内容。 - 对于复杂的交互逻辑,还可以结合物理系统与摄像机切换机制来提升沉浸感[^4]。 #### 4. Post-processing 后处理优化 为了增强视觉体验,可以在项目中引入后处理功能,例如模糊、发光、颜色校正等。Unity HDRP 或 URP 提供了对Post-processing Stack的支持,也可以参考GitHub上的开源项目来实现更高级的视觉效果[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值