写在前面

自闭了吗?

自闭了

掉分了吗

掉分了

就算自闭到怀疑人生,还是要补题啊

艹艹艹艹艹艹艹艹艹艹艹艹

我真的怀疑人生了啊!!!!!!!!!!!!!

A Superhero Transformation

没什么好说的

上代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1005;
char a[N],b[N];
bool check(char x)
{
    if(x=='a'||x=='e'||x=='i'||x=='o'||x=='u')return true;
    return false;
}
int main()
{
    scanf("%s%s",a,b);
    if(strlen(a)!=strlen(b)){
        cout<<"No"<<endl;
        return 0;
    }
    for(int i=0;i<(int)strlen(a);i++){
        if(check(a[i])&&!check(b[i])){
            cout<<"No"<<endl;
            return 0;
        }
        if(check(b[i])&&!check(a[i])){
            cout<<"No"<<endl;
            return 0;
        }
    }
    cout<<"Yes"<<endl;
}

B Average Superhero Gang Power

哎,又被数据坑了,测试数据是无法涵盖所有情况,很多情况需要通过经验判断,这个题如果n大于m,去掉前面所有的绝对是最好的选择,这个题会很简单

但是。。。。

n还有可能小于m啊。。。。。

然后就是套路了,先认为一个都不删,然后再从小到大一个个删去,操作次数是 n-1m 之间的最小值,然后每次删去总共增加的值为 m-i ,但是要小于等于 *(n-i)k

一开始没能发现的是,删去的时候直接把加上的值加到总和上就可以,不许要在意加到了哪个值上,所以。。。。

一开始虽然想到了正解但是没有做出来,然后又傻逼得没能想到 n>m ,所以这次杯具完全是我自己的锅,我会认真检讨

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e6+1000;
ll a[N];
int main()
{
    ll n,m,k;
    cin>>n>>k>>m;
    ll sum=0;
    for(ll i=1;i<=n;i++){
        cin>>a[i];
        sum+=a[i];
    }
    ll s=min(n*k,m);
    double ans=(double)((double)(sum+s)/(double)n);
    sort(a+1,a+n+1);
    for(ll i=1;i<=min(n-1,m);i++)
    {
        ll h=min(m-i,(n-i)*k);
        sum-=a[i];
        ans=max(ans,(double)(sum+h)/(double)(n-i));
    }
    printf("%.20lf\n",ans);
}

C Creative Snap

这个题学长说是分治,但是我不知道分治具体是什么东西。。。。

我一开始是想直接递归深搜就好,虽然是$$O({2}^)$$复杂度,但是其实可以剪枝,没有英雄在的区间直接消掉就好,就不用继续递归了,但是如何确定区间里有几个英雄对我来说是个难点,原本是想二分来查。。。

但是。。。

心态被B题搞崩了。。。

还好找到了跟我思路差不多的代码,我是真的忘了还有lower_bound和upper_bound了。。。。

先把数组排序,想找 ( l , r ) 中英雄的个数,因为 lr 都是2的正整数幂,所以找第一个大于等于 l 的数的位置,和第一个大于 r 的数的位置,相减就是在区间里的英雄的个数

然后递归搜索就行了,每次比较,取拆或不拆中较小的那个

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+5;
ll a[N];
ll k,n,A,B;
ll dfs(int l,int r)
{
    ll t=upper_bound(a+1,a+k+1,r)-lower_bound(a+1,a+k+1,l);
    if(t==0){
        return A;
    }
    if(l==r)return t*B;
    return min(t*B*(r-l+1),dfs(l,(l+r-1)>>1)+dfs(((l+r-1)>>1)+1,r));
}
int main()
{
    ios::sync_with_stdio(false);
    cin>>n>>k>>A>>B;
    for(int i=1;i<=k;i++)cin>>a[i];
    sort(a+1,a+k+1);
    ll ans=dfs(1,1<<n);
    cout<<ans<<endl;
}

D Destroy the Colony

unsolved

E Tree

unsolved

过年啦,过年了

woc又过年。。。。

过年好烦。。。。