首页 > 试题广场 >

选数

[编程题]选数
  • 热度指数:365 时间限制: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

说明

第一个样例选择 ,积分为 

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


备注:


import java.util.*;
 
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int T = in.nextInt();
        // 注意 hasNext 和 hasNextLine 的区别
        while (T-->0) { // 注意 while 处理多个 case
            long n = in.nextLong();
            long k = in.nextLong();
            if(k<=(n+1)/2){
                System.out.println(k);
            }else{
                System.out.println(n-k+1);
            }
        }
    }
}

发表于 2025-10-18 22:31:30 回复(0)