CF1019B:交互题+二分

CF1019B

题解:

  • 任意两个人之间相差一个数字,手写模拟一下,可以发现规律。就是相对的两个人之间差值为-2,0,2。
  • 如果n = 4k+2,一定无解。因为它和对面的数字相差2k+1奇数个,根据奇偶相加规律。相对的一定是奇偶性不同。注意题目中说了n只能为偶数,所以n = 4k+1 or 4k+3不用考虑了。
  • 接下来就二分查找相同的数字。两个异号区间之间必定存在0    

代码:

#include <bits/stdc++.h>
using namespace std;
int n;
int Judge(int x){    //判断当前的数比对面的数大还是小
	int x1,x2;
	printf("? %d\n",x);	cout<<endl;
	cin>>x1;
	printf("? %d\n",x+n/2); 	cout<<endl;
	cin>>x2;
	if(x1 == x2){
		printf("! %d\n",x);	cout<<endl;
		exit(0);
	}
	return x1 > x2 ? 1 : -1;
}
int main(){
	scanf("%d",&n);
	if(n % 4){
		printf("! -1\n");
		exit(0);
	}
	int l = 1,	r = 1 + n / 2;   //另一边不用管,对称
	int dl = Judge(l),dr = -dl;   //互逆
	while(l <= r){
		int mid = (l + r) >> 1;
		int tmp = Judge(mid);
		if(dl > 0){   
			if(tmp > 0)	l = mid;
			else r = mid;
		}else{
			if(tmp > 0)	r = mid;
			else 	l = mid;
		}
	}
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<--- Last few GCs ---> [11584:0000020B71203B50] 69329 ms: Scavenge (reduce) 2037.9 (2050.3) -> 2037.3 (2051.3) MB, 6.3 / 0.0 ms (average mu = 0.348, current mu = 0.419) allocation failure [11584:0000020B71203B50] 69339 ms: Scavenge (reduce) 2038.2 (2053.3) -> 2037.6 (2053.3) MB, 3.2 / 0.0 ms (average mu = 0.348, current mu = 0.419) allocation failure [11584:0000020B71203B50] 69348 ms: Scavenge (reduce) 2038.3 (2050.5) -> 2038.1 (2052.0) MB, 3.3 / 0.0 ms (average mu = 0.348, current mu = 0.419) allocation failure 12: 00007FF6482BAB44 v8::internal::FactoryBase<v8::internal::Factory>::NewFixedArrayWithFiller+84 13: 00007FF6482BAE43 v8::internal::FactoryBase<v8::internal::Factory>::NewFixedArrayWithMap+35 14: 00007FF6480C8A10 v8::internal::HashTable<v8::internal::NameDictionary,v8::internal::NameDictionaryShape>::EnsureCapacity<v8::internal::Isolate>+208 15: 00007FF6480C6086 v8::internal::Dictionary<v8::internal::NameDictionary,v8::internal::NameDictionaryShape>::Add<v8::internal::Isolate>+102 16: 00007FF6480CF346 v8::internal::BaseNameDictionary<v8::internal::NameDictionary,v8::internal::NameDictionaryShape>::Add+118 17: 00007FF647FC430C v8::internal::Runtime::GetObjectProperty+2204 18: 00007FF64848B50D v8::internal::SetupIsolateDelegate::SetupHeap+463949 19: 00007FF6485017A9 v8::internal::SetupIsolateDelegate::SetupHeap+947945 20: 00007FF648423EF2 v8::internal::SetupIsolateDelegate::SetupHeap+40498 21: 00007FF648423EF2 v8::internal::SetupIsolateDelegate::SetupHeap+40498 22: 00007FF648423EF2 v8::internal::SetupIsolateDelegate::SetupHeap+40498 23: 00007FF648423EF2 v8::internal::SetupIsolateDelegate::SetupHeap+40498 24: 00007FF648423EF2 v8::internal::SetupIsolateDelegate::SetupHeap+40498 25: 00007FF648423EF2 v8::internal::SetupIsolateDelegate::SetupHeap+40498 26: 00007FF648423EF2 v8::internal::SetupIsolateDelegate::SetupHeap+40498 27: 0000028E519B08BF
07-22
这段错误堆栈信息显示了一系列垃圾回收(GC)的过程,并且在其中的某个回收过程中发生了分配失败(allocation failure)。这可能是由于内存不足导致的。 垃圾回收是为了回收不再使用的内存空间,并释放给其他对象使用。在这个过程中,通过标记和清除等算法来判断哪些对象是可回收的。 然而,如果在垃圾回收过程中发现内存不足以分配新的对象,就会导致分配失败。这可能是因为系统内存已经达到极限,或者存在内存泄漏等问。 要解决这个问,可以尝试以下步骤: 1. 检查代码中是否存在内存泄漏问:确保没有意外的循环引用或长期保留不必要的对象。 2. 优化代码和算法:检查代码中是否存在低效的内存使用方式,尝试优化算法以减少内存占用。 3. 增加内存限制:如果可能,可以尝试增加系统的内存限制,以提供更多的可用内存。 4. 分析内存使用情况:使用内存分析工具来检查应用程序的内存使用情况,找出是否存在大量占用内存的对象或数据结构。 5. 升级系统或环境:如果你的系统或环境版本较旧,可能存在一些已知的内存管理问。尝试升级到最新版本以解决这些问。 如果问仍然存在,请提供更多的上下文信息、代码示例或其他相关的错误信息,以便更好地理解问并提供更具体的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值