1487B - Cat Cycle

题目链接


题意:

假设你和两只猫住在一起:A 和 B。有n个两只猫通常睡觉的午睡点。

你的猫喜欢睡觉,也喜欢所有这些地方,所以它们每小时都会周期性地改变睡点:

  • 猫A按顺序改变它的午睡位置: n , n − 1 , n − 2 , ... , 3 , 2 , 1 , n , n − 1 , ...n,n-1,n-2,…,3,2,1,n,n-1,… 换句话说,在第一个小时它就在 n 然后循环递减;
  • 猫 B 按顺序改变它的午睡位置: 1 , 2 , 3 , … , n − 1 , n , 1 , 2 , …1,2,3,…,n-1,n,1,2,… 换句话说,在第一个小时它就在1 然后循环递增。

猫 B 更年轻,所以它们有严格的等级制度:A 和 B 不会躺在一起。换句话说,如果两只猫都想去X 然后 A 占据这个位置,B 按B的移动顺序到下一个位置。

计算K小时后,B的位置在哪里;


题解:

step=k-1表示B移动的步伐。

分成两种情况:

  1. n为奇数,AB会相遇。step/(n/2)表示AB相遇的次数,step+step/(n/2)表示移动的长度。
  2. n为偶数,AB不相遇。

//#include <bits/stdc++.h>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long int ll;
const int N = 2e5+5;


int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		int n, k;
		cin >> n >> k;
		int step = k - 1, ans;
		if (n & 1)
		{
			int meet = step / (n / 2);
			ans = (meet + step) % n + 1;
		}
		else
		{
			ans = (k - 1) % n + 1;
		}
		cout << ans << endl;
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值