I. The Humanoid
题意:
有n个宇航员,每个宇航员的能量是a[i],一个怪兽的力量是h,怪兽有两瓶绿色血清(使用后力量2),蓝色血清(使用后力量3),吃掉一个宇航员,将会获得他力量的一半取整。问最多能吃掉几个宇航员?
思路:
将a[i]排序,如果能吃,则吃掉,如果不能吃,则枚举绿绿蓝,绿蓝绿,蓝绿绿三种情况,取最大的。
代码:
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200200;
int n;
int arr[MAXN];
int solve(int i, long long h, int s2, int s3) {
if (i == n) return 0;
if (arr[i] < h)
return solve(i + 1, h + (arr[i] / 2), s2, s3) + 1;
int ans1 = (s2 ? solve(i, h * 2, s2 - 1, s3) : 0);
int ans2 = (s3 ? solve(i, h * 3, s2, s3 - 1) : 0);
return max(ans1, ans2);
}
int main() {
int t; cin >> t;
while(t--) {
long long h; cin >> n >> h;
for (int i = 0; i < n; ++i)
cin >> arr[i];
sort(arr, arr + n);
cout << solve(0, h, 2, 1) << endl;
}
}
K. Thermostat
题意:
在温度从l到r的温度器里,每次调温至少是x,从a到b最少需要调温几次,如果不行,则输入-1
思路:
- 如果a=b,则0
- 如果a到b的距离>=x,则为1
- 如果a-b的<x,则先把a移到符合题意的l或r,如果能到b,则输出2
- 如果不能到b,再把a从l或r移到r或l,如果能到b,则3
-
其他输出-1
代码:
#include<bits/stdc++.h> using namespace std; #define ll long long ll t,l,r,x,a,b; ll cnt; int main(){ cin>>t; while (t--){ cin>>l>>r>>x; cin>>a>>b; cnt=0; if(a==b) { cout << '0' << endl; } else if(abs(b-a)>=x) { cout << '1' << endl; } else if(abs(b-a)<x){ ll lll,rrr; lll=a-l; rrr=r-a; if(lll>=x){ if(b-l>=x){ cout<<'2'<<'\n'; continue; } } if(rrr>=x){ if(r-b>=x){ cout<<'2'<<'\n'; continue; } } if(lll>=x){ if(r-b>=x) { cout <<'3'<<'\n'; continue; } } if(rrr>=x){ if(b-l>=x){ cout<<'3'<<endl; continue; } } cout<<"-1"<<endl; } } }
# [G. Quests](https://codeforces.com/group/L9GOcnr1dm/contest/418722/problem/G)
## 题意:
n个硬币,第i个的价值是a[i],一天只能拿一个,在d天里,所拿硬币>=c,求出每个硬币的最大冷却时间k
## 思路:
- 首先降序排列a
- 二分查找k,k+1不成立,k成立
- 如果k>=d,则k无限
- 如果k趋近于0,不可能
- 其他输出k
## 代码:
```cpp
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int t,n,d;
ll a[200005],c;
int main(){
cin>>t;
while(t--){
cin>>n>>c>>d;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n,greater<ll>());
int l=0,r=d+2;
while(l<r){
int m=l+(r-l+1)/2;
ll s=0;
for(int i=0;i<d;i++){
if(i%m<n)
s+=a[i%m];
}
if(s>=c){
l=m;
}
else{
r=m-1;
}
}
if(l==d+2){
cout<<"Infinity"<<endl;
}
else if(l==0)
cout<<"Impossible"<<endl;
else cout<<l-1<<endl;
}
}
```
# H题暂时不太清楚异或逻辑运算