【数学】Joyboard—CF1877C

Joyboard—CF1877C
参考文章

思路

a n + 1 a_{n+1} an+1 进行讨论:

  1. a n + 1   =   0 a_{n+1}~=~0 an+1 = 0
    此时 k   =   1 k~=~1 k = 1
  2. 0 < a n + 1 ≤ m i n ( n ,   m ) 0 < a_{n+1}\le min(n,~m) 0<an+1min(n, m)
    此时 k   =   2 k~=~2 k = 2
  3. n < a n + 1 ≤ m i n ( n ,   m ) n < a_{n+1}\le min(n,~m) n<an+1min(n, m)
    1. a n + 1   m o d   n   =   0 a_{n+1}~mod~n~=~0 an+1 mod n = 0
      此时 k   =   2 k~=~2 k = 2
    2. a n + 1   m o d   n   ≠   0 a_{n+1}~mod~n~≠~0 an+1 mod n = 0
      此时 0 < a n < n 0 < a_{n} < n 0<an<n。记 n n   =   n − 1 nn~=~n-1 nn = n1,那么这个式子等价于 0 < a n n + 1 < n n + 1 0 < a_{nn+1} < nn+1 0<ann+1<nn+1,即 0 < a n n + 1 < n n 0 < a_{nn+1} < nn 0<ann+1<nn。把 n n nn nn 当做一个测试样例中的“n”,即 0 < a n + 1 < n 0 < a_{n+1} < n 0<an+1<n,根据结论“2”可知 k   =   2 k~=~2 k = 2。综上所述,整体的 k k k 等于 3 3 3

由于 a i n + 1 a_{in+1} ain+1 的值是从 [ 0 ,   m ] [0,~m] [0, m] 中选取的,为了求出答案,我们再对 k k k 讨论:

  1. k   =   1 k~=~1 k = 1
    只有在 m   =   0 m~=~0 m = 0 a n + 1   =   0 a_{n+1}~=~0 an+1 = 0的时候满足,则 r e s   =   1 res~=~1 res = 1
  2. k   =   2 k~=~2 k = 2
    如果 m   ≤   n m~\le~n m  n r e s   =   m res~=~m res = m;如果 m   >   n m~>~n m > n r e s = n + ( m − n ) / n res=n+(m-n)/n res=n+(mn)/n
  3. k   =   3 k~=~3 k = 3
    如果 m < n m<n m<n r e s   =   0 res~=~0 res = 0;如果 m ≥ n m\ge n mn r e s = m − n − ( m − n ) / n res=m-n-(m-n)/n res=mn(mn)/n
  4. k   >   3 k~>~3 k > 3
    根据上边分析可知不存在 k   >   3 k~>~3 k > 3 的情况,即 r e s   =   0 res~=~0 res = 0

C o d e Code Code

#include <bits/stdc++.h>
#define int long long
#define sz(a) ((int)a.size())
#define all(a) a.begin(), a.end()
using namespace std;
using PII = pair<int, int>;
using i128 = __int128;
const int N = 2e5 + 10;

int n, m, k;

void solve() {
	cin >> n >> m >> k;
	
	cout << "       ";
	if (k == 1) { // 只有在a[n + 1] = 0的时候才满足
		cout << "1\n";
	} else if (k == 2) {
		if (m <= n) {
			cout << m << "\n";
		} else { // m > n
			cout << n + (m - n) / n << "\n";
		}
	} else if (k == 3) {
		if (m <= n) {
			cout << "0\n";
		} else { // m > n
			cout << m - n - (m - n) / n << "\n";
		}
	} else {
		cout << "0\n";
	}
}

signed main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int T = 1;
	cin >> T; cin.get();
	while (T --) solve();
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值