牛客小白月赛29部分题解

G:涂色

简单签到题,我们可以直观的看出答案其实就是n+1,那么我们直接输出n+1即可

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    cout<<n+1<<endl;
}

E:考试

这其实就是一个简单的数学问题,可能有的时候思维有点混乱,那么就手动写几组数组验证答案的正确性,我们统计一下不相同的题目数量有几个,然后和k比较一下就行,如果比k大,那么说明多的也是错的,如果比k小,那么与k的差值也是错的

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <set>
#include <map>
#include <math.h>
#include <vector>
#include <queue>
#include <string.h>
typedef long long ll;
using namespace std;
#define pi acos(-1.0)
const int maxn = 1e5 + 10;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + 7;
int a[maxn], b[maxn], vis[maxn];
int main()
{
    int n, k, cnt = 0;
    scanf("%d%d", &n, &k);
    for (int i = 1; i <= n; ++i)
        scanf("%d", &a[i]);
    for (int j = 1; j <= n; ++j)
        scanf("%d", &b[j]);
    for (int i = 1; i <= n; ++i)
        if (a[i] != b[i])
            cnt++;
    if (cnt > k)
        cout << n - cnt + k << endl;
    else
        cout << n + cnt - k << endl;
}

H:圆

简单几何题

我们只需要判断两个边界条件,一个是内含,一个是外离,这两种情况就是能够相交的临界情况,在两者之间就是所有能够相交的情况,然后再根据半径之间的关系算出临界值就是答案了

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <set>
#include <map>
#include <math.h>
#include <vector>
#include <queue>
#include <string.h>
typedef long long ll;
using namespace std;
#define pi acos(-1.0)
const int maxn = 1e5 + 10;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + 7;
int main()
{
    ll t;
    scanf("%lld", &t);
  //  double pii = 3.1415926535;
    while (t--)
    {
        ll x1, x2, r1, y1, y2, r2;
        scanf("%lld%lld%lld%lld%lld%lld", &x1, &y1, &r1, &x2, &y2, &r2);
        double d =sqrt ((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
       double maxx=r1+r2;
        double minn=abs(r1-r2);
        if (d >= minn&&d<=maxx) 
            puts("YES"); 
        else 
            puts("NO");

    }
}

A:进攻

贪心算法

首先对战机的破坏力从大到小排序,然后再把基地的防御值进行排序,让价值大的排在前面,如果价值相同则防御力小的排在前面,最后我们让破坏力大的飞机优先攻击价值大的基地,然后计算最大值就行,但是这里有一个坑点,就是基地的价值可能为负数,所以如果基地的价值为负数的话会让我们整个价值变小,那么遇到这种情况的时候,只需要跳过就行了,也就是说不攻击价值为负数的基地

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <set>
#include <map>
#include <math.h>
#include <vector>
#include <queue>
#include <string.h>
typedef long long ll;
using namespace std;
#define pi acos(-1.0)
const int maxn = 1e6 + 10;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + 7;
struct node
{
    int d, v;
    bool operator<(const node x) const
    {
        if (v != x.v)
            return v > x.v;
        else
            return d < x.d;
    }
} w[maxn];
int a[maxn];
int main()
{
    int n, m;
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; ++i)
        scanf("%d", &a[i]);
    sort(a + 1, a + n + 1, greater<int>());
    for (int i = 1; i <= m; ++i)
        scanf("%d", &w[i].d);
    for (int i = 1; i <= m; ++i)
        scanf("%d", &w[i].v);
    sort(w + 1, w + m + 1);
    int s = 1, i = 1;
    ll ans = 0;
    while (i <= n && s <= m)
    {
        if (a[i] > w[s].d && w[s].v > 0)
        {
            ans += w[s].v;
            ++i;
        }
        else
            ++s;
    }
    printf("%lld\n", ans);
}