• 2021.1.28 个人rating赛补题报告


    A. Fingerprints

    题解:就是给定2个序列,在第二个序列中判断第一个序列是否存在这个数,然后按第一个序列的顺序输出就好

    #include<cstdio>
    #include<iostream>
    #include<string>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
     
    int main()
    {
        int n, m;
        int seq[20];
        int ans[20];
        scanf("%d %d", &n, &m);
        for (int i = 0; i < n; i++)
        {
            scanf("%d", &seq[i]);
        }
        for (int j = 0, temp; j<m; j++)
        {
            scanf("%d", &temp);
            for (int i = 0; i < n; i++)
            {
                if (seq[i] == temp)
                {
                    ans[i] = 1;
                    break;
                }
            }
        }
        for (int i = 0; i<n; i++)
        {
            if (ans[i] == 1)
            {
                printf("%d ", seq[i]);
            }
        }
        printf("
    ");
        return 0;
    }

    B. Knights of a Polygonal Table

    题意:有n个骑士,每个骑士能杀死比他战斗力低的骑士,且最多能杀死k个,问这个骑士最多能杀死谁得到多少金币。

    题解:使用结构体存储骑士的金币和战斗力,然后这题所有变量很明显是k最小,我的做法就是先按武力值排个序,这样所有在第i个骑士前面的武士都可以被杀掉,然后只需要动态维护前面所有的武士的钱的前k大即可,用一个堆就搞定了

    堆可以直接用priority_queue

    代码:

    #include<cstdio>
    #include<queue>
    #include<vector>
    #include<algorithm>
    #define int long long
    using namespace std;
    const int maxn=1e5+5;
    int n,k;
    struct node
    {
        int p,c,ans,id;
    }a[maxn];
    priority_queue<int> q;
    vector<int> v;
    bool cmp(node a,node b)
    {
        return a.p<b.p;
    }
    bool cmp1(node a,node b)
    {
        return a.id<b.id;
    }
    signed main()
    {
        scanf("%lld%lld",&n,&k);
        for(int i=1;i<=n;i++)
            scanf("%lld",&a[i].p);
        for(int i=1;i<=n;i++)
        {
            scanf("%lld",&a[i].c);
            a[i].ans=a[i].c;
            a[i].id=i;
        }
        sort(a+1,a+n+1,cmp);
        q.push(a[1].c);
        for(int i=2;i<=n;i++)
        {
            int s=q.size();
            int t=min(k,s);
            for(int j=1;j<=t;j++)
            {
                int x=q.top();
                q.pop();
                v.push_back(x);
            }
            for(int j=0;j<v.size();j++)
            {
                a[i].ans+=v[j];
                q.push(v[j]);
            }
            v.clear();
            q.push(a[i].c);
        }
        sort(a+1,a+n+1,cmp1);
        for(int i=1;i<=n;i++)
            printf("%lld ",a[i].ans);
        return 0;
    }
  • 相关阅读:
    (转)Xargs用法详解
    (转)运维老鸟教你安装centos6.5如何选择安装包
    (转)正则表达式与三剑客的使用技巧
    php OAuth服务端编写
    前端工程精粹(一):静态资源版本更新与缓存
    静态资源打包:一个javescript 的src引用多个文件,一个link引用多个CSS文件
    ie,cookie,域名与下划线
    HTML中css和js链接中的版本号
    PHP 优化详解
    jqury插件编写
  • 原文地址:https://www.cnblogs.com/liyongqi/p/14382110.html
Copyright © 2020-2023  润新知