2 条题解
-
2
#include <bits/stdc++.h> using namespace std; #define int long long const int N = 1e6, mod = 1e9+7, inf = 1e18 + 5; void solve() { int n,m,k; cin >> n >> k >> m; int s = n / k; // k的倍数的个数 int les = n - s; // 不是k的倍数的个数 int ans = 0; if(m <= les){ // 若可以改变的个数m <= 非k的倍数的个数 ans += m; // 将 m 个 非k倍数的数 改为k, 对答案贡献 + m ans += (s + 1) / 2; // 原本是k的倍数的数,相邻两个数对贡献 + 1 //(s+1) / 2 : (s+1) } else{ // 可以改变的个数m > 非k的倍数的个数 ans += les; // 将非k的倍数的数全变为k,对答案贡献 + les m -= les; // 还能改变的个数 m = m - les s -= m; // k的倍数的个数有s个,将改变其中的m个变成k ans += m; // 贡献 + m ans += (s+1)/2; // 相邻两个数对贡献 + 1 } cout << ans << endl; } signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int T = 1; cin >> T; while (T--) solve(); return 0; } -
1
#include<stdio.h> #define int long long signed main() { int t; scanf("%lld", &t); while (t--) { int n, k, m; scanf("%lld%lld%lld", &n, &k, &m); int q; q = n / k; int count = 0; if(m==n){ printf("%lld\\n",n); //特例m==n } else if (m - (n - q) >= 0) { count = n - q; //非k倍数,全部都要改 count += 1; //把K先算进去 m = m - (n - q); //剩余可改数 q = q - m - 1; //把剩下的m全部给q(k的倍数)改,k提前提出来,所以要减去1 count = count + m + q / 2; //剩余几个k的倍数的两两结合 printf("%lld\\n", count); } else if (m - (n - q) < 0) { count = m + (q + 1) / 2; printf("%lld\\n", count); } } return 0; }
- 1
信息
- ID
- 1192
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 119
- 已通过
- 23
- 上传者