• Codeforces 799B


    题目链接:http://codeforces.com/problemset/problem/799/B

    题目大意:有n件T恤,每件T体恤都分别有价格(每件衣服的价格不重复)、前面的颜色、背部的颜色三种属性。接下来有m个人每个人都有一种喜欢的颜色,他们按先后顺序选择衣服,如果没有喜欢的颜色的衣服了就输出“-1”,否则选择其中符合条件的衣服中价值最小的。输出每个人要付出的钱。

    解题思路:使用c++STL里的set(会自动按照从小到大的顺序排好,不存在重复),设置set[1],set[2],set[3]分别对应三种颜色。我们只要按颜色分别将价值存入set里,当要买指定颜色x的衣服是,只用输出set[x]里的第一个元素(即所需的最小价值),再把set[1]~set[3]中与输出元素相同大小的元素删除,即可完成模拟买走这件衣服的过程(因每件衣服价格都不同,所以不会误删)。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<set>
     4 using namespace std;
     5 const int N=2e5+5;
     6 set<int>ms[5];
     7 struct node{
     8     int val,front,back;
     9 }a[N];
    10 
    11 int main(){
    12     ios::sync_with_stdio(false);
    13     int n;
    14     cin>>n;
    15     for(int i=1;i<=n;i++){
    16         cin>>a[i].val;
    17     }
    18     for(int i=1;i<=n;i++){
    19         cin>>a[i].front;
    20     }
    21     for(int i=1;i<=n;i++){
    22         cin>>a[i].back;
    23     }
    24     for(int i=1;i<=n;i++){
    25         ms[a[i].front].insert(a[i].val);
    26         ms[a[i].back].insert(a[i].val);
    27     }
    28     int m;
    29     cin>>m;
    30     for(int i=1;i<=m;i++){
    31         int x;
    32         cin>>x;
    33         if(ms[x].size()==0)
    34             cout<<"-1"<<endl;
    35         else{
    36             int curval=*(ms[x].begin());
    37             cout<<curval<<" ";
    38             for(int i=1;i<=3;i++){
    39                 ms[i].erase(curval); 
    40             }
    41         }    
    42     }
    43 }
  • 相关阅读:
    实验四 代码评审
    实验三、UML 建模工具的安装与使用
    结对编程 第二阶段
    结对编程第一阶段
    实验一 GIT代码版本管理
    实验五 单元测试
    实验四 代码评审
    实验三 UML 建模工具的安装与使用
    结对编程阶段二
    结对编程第一阶段
  • 原文地址:https://www.cnblogs.com/fu3638/p/6847254.html
Copyright © 2020-2023  润新知