P8160 [JOI 2022 Final] 星际蛋糕 (Intercastellar)

该篇文章介绍了一个编程问题,涉及如何根据JOI星球居民的喜好(不喜欢偶数)对一个长方体castella进行切割和调整,以确保所有段的长度均为奇数。通过C++代码实现,描述了如何利用二进制分解计算操作后指定位置段的长度。
摘要由CSDN通过智能技术生成

题目描述

castella 的形状是一个在水平方向上很长的长方体。它被切成了 N 段,其中从左往右的第 i 段的长度为整数Ai​。

几分钟前,我们得知 JOI 星球的居民不喜欢偶数。为了解决此问题,你需要不断执行下列操作,直到不存在长度为偶数的段。

  1. 在长度为偶数的段中,你选择最靠右的一段。
  2. 你将选中的这一段切成两个长度相等的段。也就是说,假设选中的这一段的长度是 k,你将其切成长度为 22k​ 的两段。你不改变其他段的位置。

为了确认操作是否被正确地执行了,比太郎让你回答 Q 个询问。第 j 个询问如下:

  • 当所有操作执行完毕后,从左往右的第 Xj​ 段的长度为多少?

给定 castella 的信息与询问,请写一个程序回答所有询问。

输入格式

第一行,一个正整数 N。

接下来 N 行,第 i 行一个正整数 Ai​。

接下来一行,一个正整数 Q。

接下来Q 行,第 j 行一个正整数 Xj​。

输出格式

输出 Q 行,第 j 行一个数,表示第 j 个询问的答案。

输入输出样例

输入 #1

4
14
9
8
12
6
2
3
5
7
11
13

输出 #1

7
9
1
1
1
3

输入 #2

13
1
4
1
4
2
1
3
5
6
2
3
7
3
8
2
10
11
13
15
17
18
20

输出 #2

1
1
1
1
5
3
1
3

输入 #3

16
536870912
402653184
536870912
536870912
134217728
536870912
671088640
536870912
536870912
536870912
939524096
805306368
536870912
956301312
536870912
536870912
5
2500000000
3355443201
4294967296
5111111111
6190792704

输出 #3

5
1
7
57
1
#include<bits/stdc++.h>
#define in long long 
#define maxn 200005
#define getll(x) scanf("%lld", &x)
using namespace std;
in n, a[maxn], num[maxn], q, x, s[maxn];
int main()
{
	getll(n);
	for(in i = 1; i <= n; i++) 
	{
		num[i] = 1;
		getll(a[i]);
		while(!(a[i] & 1)) 
		{
			a[i] >>= 1;
			num[i] <<= 1;
		}
		s[i] = s[i - 1] + num[i];
	}
	getll(q);
	while(q--) 
	{
		getll(x);
		in ans = a[(lower_bound(s + 1, s + 1 + n, x) - s)]; 
		printf("%lld\n", ans);
	}
	return 0; 
}

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值