2 条题解
-
0
#include <bits/stdc++.h> using namespace std; #define int long long int n,m,k; signed main() { ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); int t; cin >> t; while(t--) { int res=0; cin >> k >> n >> m; if(k%2==0) { cout << (n+2*m)/k << endl; } else if(k==1) { cout << n+m << endl; } else { res=min(m/(k/2),n); n-=res; m-=(k/2*res); if(m==0&&n==0) { cout << res << endl; continue; } else if(m==0) { res+=(n/k); } else if(n==0) { res+=(m/((k+1)/2)); } else { res+=((n+2*m)/k); } cout << res << endl; } } }k为偶数:不会浪费能量,直接算即可;
特判k==1;
k为奇数时:
ex1 : 对于k=5,n=2,m=10的,每次充能先将小水晶填充一个,剩下全都用大水晶填充,res = 2;
ex2 : 对于k=5,n=10,m=7,重复上面的过程,res = 3;
m/(k/2)是按这种方式大水晶可以填充的块数,n就是这种方式小水晶可以填充的块数;
再判断:
(1)n=0,m=0,正好全部填充完;
(2)n>0,m=0,直接算;
(3)n=0,m>0,也可以直接算,注意(k+1),否则每次需要的块数少算一个;
(4)n>0,m>0,此时必定为n>0,m<(k/2)(可以想一下为什么),直接算即可,大水晶的能量不可能被浪费.
信息
- ID
- 1156
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 284
- 已通过
- 33
- 上传者