A - Gamer Hemose
题意:
给你n个武器每个武器的伤害是ai,然后有一个H点血量的boss,问要使用几次武器把H清空,同意武器不能连续使用。
题解:排序使用最大的两个交替打就行了
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n,H;
cin>>n>>H;
vector<int> a(n+1);
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a.begin(),a.end());
int cont=H/(a[n]+a[n-1])*2;
H-=(a[n]+a[n-1])*cont/2;
if(H>0)
{
cont++;
H-=a[n];
}
if(H>0)
{
cont++;
H-=a[n-1];
}
cout<<cont<<endl;
}
}
B - Hemose Shopping
题意:
给你一个长度为n的数组,要求只能交换位置差为x的两个数,问是否可以构成一个不是严格递增的数列。
题解:不能交换的是当前位置数加上x超过n的这些数而其他的数可以通过交换变成递增的,只需要把这些不能交换的和已经排序好的进行比较就行了。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1;
int a[N],b[N];
int main()
{
int t;
cin>>t;
while(t--)
{
int n,x;
cin>>n>>x;
for(int i=1;i<=n;i++)
{
cin>>a[i];
b[i]=a[i];
}
sort(b+1,b+n+1);
bool flag=true;
int ans=max(1,n-x+1),sum=min(n,x);
for(int i=ans;i<=sum;i++)
if(a[i]!=b[i])
flag=false;
if(flag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}
C - Bakry and Partitioning
题意:
给你n个节点每个节点有第i个节点有权值为ai然后把它分成2到k棵树计算没个数的连通分量对应的异或使他们有相同的值。
题解:
还在理解中。。。。。
D - Hemose in ICPC ?
题意:
我再看看题解,有点没看懂。