P9532 [YsOI2023] 前缀和

难度:普及-

题目背景

Ysuperman 模板测试的试机题。

小心立秋,小心秋丽。

题目描述

立秋有一个长度为 n 的数组 a,所有数字都是正整数,并且除了其中第一个数字以外其它数字都等于前面所有数字的和。

例如,数组 [1,1,2,4,8,16] 就有可能是立秋有的一个数组,因为除了第一个数字 1,后面的每个数字都是前面数字的和,例如:

  • 第二个数字 1=1。
  • 第三个数字 2=1+1。
  • 第四个数字 4=1+1+2。
  • 第五个数字 8=1+1+2+4。
  • 第六个数字 16=1+1+2+4+8。

现在立秋告诉了秋丽数字 x 存在于这个数组中,秋丽希望知道 an​ 最小会是多少,或者说整个数组最后一个数字最小有多少。

输入格式

本题有多组测试数据。

输入第一行一个数字 T 表示测试数据组数。

接下来 T 行每行两个正整数 n,x。

输出格式

输出共 T 行,分别表示每组测试数据的答案。

对于某组数据 n,x,输出一行一个正整数表示可能的最小的 an​。

输入输出样例

输入 #1

3
2 2
3 2
4 2

输出 #1

2
2
4

输入 #2

3
3 1
3 2
3 4

输出 #2

2
2
4

输入 #3

3
2 6
3 6
4 6

输出 #3

6
6
12

输入 #4

3
3 3
3 6
3 12

输出 #4

6
6
12

说明/提示

样例 1 解释
  • 第一组数据只有唯一可能的数组 [2,2],所以答案为 2;
  • 第二组数据有两种可能的数组,分别是 [2,2,4] 和 [1,1,2],所以答案为 2;
  • 第三组数据有两种可能的数组,分别是[2,2,4,8] 和 [1,1,2,4],所以答案为 4。
样例 2 解释
  • 第一组数据只有唯一可能的数组 [1,1,2],所以答案为 2;
  • 第二组数据有两种可能的数组 [1,1,2] 和 [2,2,4],所以答案为 2;
  • 第三组数据有两种可能的数组 [2,2,4] 和 [4,4,8],所以答案为 4。
数据范围

对于前 30% 的数据,满足 x 不能被 2 整除,或者说 2 不是 x 的一个因数,或者说 x 是奇数。

另有 30% 的数据,满足 x 可以被 2n−2 整除,或者说 2n−2 是 x 的一个因数。

另有 20% 的数据,满足 x≤1000,可以证明在这个数据范围下答案可以使用一个 int 类型变量存储。

对于 100% 的数据,满足 1≤T≤10^4,2≤n≤20,1≤x≤10^9。

思路

贪心算法

完整代码

#include<bits/stdc++.h>//T4
using namespace std;
long long t,n,x,a[25];
int main(){
	cin>>t;
	//freopen("a.in","r",stdin);
    //freopen("b.out","w",stdout);
	long long sum=1;
	for(int i=0;i<=18;i++){
		a[i]=sum;
		sum*=2;
	}
	while(t--){
		cin>>n>>x;
		long long pre=x;
		while(1){
			if(pre%a[n-2]==0){
				cout<<pre<<endl;
				break;
			}
			else pre*=2;
		}
	}
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值