zoukankan      html  css  js  c++  java
  • CodeForces

    题目链接

    http://codeforces.com/problemset/problem/799/B

    题意
    给出N件衣服
    pi 表示 第i件衣服的价格
    ai 表示 第i件衣服的前面的颜色
    bi 表示 第i件衣服的后面的颜色
    然后有 m 位顾客
    顾客会给出 他中意的颜色 只要 衣服的前面或者后面有这个颜色 那么 这件衣服 就是符合要求的 然后他要购买 目前还剩下的 最便宜的那件

    先来先服务原则 并且 每件衣服 只有一件

    思路

    用 三个 vector 来保存 三个颜色的衣服 卖出 后 要标记一下

    刚开始 T 了 因为我们每次都是从 头开始遍历的

    后来想想 可以用三个 标记 分别标记 三个 vector 的头 这样 前面已经遍历过的 就可以不用 遍历 (还是 大佬提醒 才做出来)

    刚开始 要给这三个 vector sort

    对了 这个 价格 应该都是不同的 因为用 sort 都能过

    大佬 给普及了一下 sort 的效率 最快是 nlogn 只有当 每个元素都不同时
    最慢是 n^2 每个元素都相同时

    插入排序是比较稳定的 nlogn

    AC代码

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<string>
    #include<cstring>
    #include<map>
    #include<set>
    #include<list>
    #include<vector>
    #include<deque>
    #include<stack>
    
    #define ll long long
    
    using namespace std;
    
    const int INF=0x3f3f3f3f;
    const int maxn=2e5+10;
    
    struct node
    {
        int v, id;
    }q[maxn];
    
    vector <node> c[3];
    
    int visit[maxn];
    
    bool comp(node x, node y)
    {
        return x.v < y.v;
    }
    
    int main()
    {
        memset(visit, 0, sizeof(visit));
        int n;
        scanf("%d", &n);
        for (int i = 0; i < n; i++)
        {
            scanf("%d", &q[i].v);
            q[i].id = i;
        }
        int color;
        for (int i = 0; i < n; i++)
        {
            scanf("%d", &color);
            c[color - 1].push_back(q[i]);
        }
        for (int i = 0; i < n; i++)
        {
            scanf("%d", &color);
            c[color - 1].push_back(q[i]);
        }
        sort(c[0].begin(), c[0].end(), comp);
        sort(c[1].begin(), c[1].end(), comp);
        sort(c[2].begin(), c[2].end(), comp);
        int m;
        scanf("%d", &m);
        int count[3] = {0};
        int flag[3] = {0};
        for (int i = 0; i < m; i++)
        {
            scanf("%d", &color);
            if (i)
                printf(" ");
            int len = c[color - 1].size();
            if (count[color - 1] >= len)
            {
                printf("-1");
                continue;
            }
            int ans  = -1;
            for (int j = flag[color - 1]; j < len; j++)
            {
                if (visit[c[color - 1][j].id] == 0)
                {
                    visit[c[color - 1][j].id] = 1;
                    ans = c[color - 1][j].v;
                    count[color - 1]++;
                    flag[color - 1] = j + 1;
                    break;
                }
            }
            printf("%d", ans);
        }
        printf("
    ");
    }
  • 相关阅读:
    .net core 经典面试题
    面试常问概念类问题
    常见 .net 面试题目
    Linux 最常用150个命令汇总
    .net core 国际化(web通用版)
    vim 命令合集
    解决Mariadb安装时的Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-qenllaxj/mysqlclient/报错
    正则表达式
    python中的JWT
    chapter2.3、react高阶组件,装饰器
  • 原文地址:https://www.cnblogs.com/Dup4/p/9433119.html
Copyright © 2011-2022 走看看