首页 > 试题广场 >

选数

[编程题]选数
  • 热度指数:469 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
~~~~~~整数 ,计算选择  个数最多能获得多少积分。
~~~~~~计分规则:初始积分为 ,对于被选取的整数 ,如果  没选,则积分加  。

输入描述:
~~~~~~每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\le T\le 10^5\right) 代表数据组数,每组测试数据描述如下:

~~~~~~在一行上输入两个整数 n,k\ (1\le n,k\le10^{12};\ k \leq n) ,含义和题面描述一致。


输出描述:
~~~~~~对于每一组测试数据,在一行上输出一个整数,代表最多能获得的积分。
示例1

输入

2
1 1
4 2

输出

1
2

说明

第一个样例选择 ,积分为 

第二个样例一种可行方案为 ,积分为 


备注:


const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    let row=0,t,n,k
    while(line = await readline()){
        if(row==0){
            t = line
            row++
        }else{
            let input = line.split(' ').map(item=>parseInt(item))
            n = input[0]
            k = input[1]
            let flag = Math.ceil(n/2)
            if(k<=flag){
                console.log(Math.min(k,flag))
            }else{
                if(n%2==0)
                console.log(flag-(k-flag)+1)
                else
                console.log(flag-(k-flag))
            }
        }
    }
}()

发表于 2025-12-11 17:26:07 回复(0)