求助站外题目qwq
  • 板块题目总版
  • 楼主BLX32M_10
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/7/17 20:42
  • 上次更新2023/11/4 14:21:47
查看原帖
求助站外题目qwq
529247
BLX32M_10楼主2021/7/17 20:42

描述

假设有两只猫:猫 A 和猫 B ,共同拥有 n 个休息地点排成一个环,位置顺时针编号为 1 至 n,他们要选择休息位置。

对于选择休息位置,两只猫有不同的策略:猫 A 在第 1 小时会选择休息位置 n,接下来每过一小时它就会逆时针移一个位置,也就是说它选择的位置的序列为 n,n−1,n−2,…,3,2,1,n,n−1,…。

猫 B 在第 1 小时会选择休息位置 1,接下来每过一小时它就会顺时针移一个位置,也就是说它选择的位置的序列为 1,2,3,…,n−1,n,1,2,…。

特别的,因为猫 A 比猫 B 老,所以猫 A 比猫 B 地位高一些,因此当两只猫相中了同一个位置时,由猫 A 占领这个位置,猫 B 会再顺时针移一个位置到下一个位置。

给定 n,k,求出第 k 小时猫 B 在哪个位置。

输入描述

第一行包含一个整数 T ( 1≤T≤10 4 ) ,表示测试数据的组数,接下来给出 T 组测试数据的具体信息,每组测试数据仅有一行,包含两个整数 n 和 k ( 2≤n≤10 9 , 1≤k≤10 9 ) 。

输出描述

对于每个测试数据,打印一个整数表示猫B将在一小时内休眠位置的索引。

用例输入

7

2 1

2 2

3 1

3 2

3 3

5 5

69 1337

用例输出

1

2

1

3

2

2

65

蒟蒻用这段代码WA了o(╥﹏╥)o

#include <cstdio>
int main() {
	int t, n, k, g;
	scanf("%d", &t);
	for (int i = 0; i < t; i++) {
		scanf("%d %d", &n, &k);
		k--;
		if (k == 0) {
			printf("1\n");
			continue;
		}
		if (!(n % 2)) {
            if (k % n == 0) {
                printf("%d\n", n);
                continue;
            }
			printf("%d\n", k % n);
			continue;
		}
		g = 2 * n - 1;
		printf("%d\n", (1 + k / (g) * (g + 1) + k % (g)) % n + 1);
	}
	return 0;
}
2021/7/17 20:42
加载中...