zoukankan      html  css  js  c++  java
  • Codeforces Gym101606 E.Education (2017 United Kingdom and Ireland Programming Contest (UKIEPC 2017))

    E Education

    这个题有点意思,就是找满足条件的最小价格里的最大值的人数,有点贪心的思想吧,一开始写错了,人群的那个不能排序,而且是最小价格里找能住下人最多的部门,让这个部门去住这个房间。在循环的时候处理一下,找出来符合条件的人群的最大数就可以了。代码写的巨丑。。。

    代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<queue>
     6 #include<set>
     7 #include<algorithm>
     8 #include<map>
     9 using namespace std;
    10 const int INF=0x3f3f3f3f;
    11 struct node{
    12     int n;
    13     int m;
    14     int pos;
    15     int flag;
    16 }a[100000];
    17 bool cmp(node a,node b){
    18     return a.m<b.m;
    19 }
    20 int s[100000];
    21 int ans[100000];
    22 int flagg[100000];
    23 int main(){
    24     int d,b;
    25     while(~scanf("%d%d",&d,&b)){
    26             memset(flagg,0,sizeof(flagg));
    27         for(int i=0;i<d;i++){
    28             scanf("%d",&s[i]);
    29             flagg[i]=1;
    30         }
    31         for(int i=0;i<b;i++){
    32             a[i].pos=i+1;
    33             a[i].flag=1;
    34         }
    35         for(int i=0;i<b;i++)
    36             scanf("%d",&a[i].n);
    37         for(int i=0;i<b;i++)
    38             scanf("%d",&a[i].m);
    39         sort(a,a+b,cmp);
    40         int h=0;
    41         for(int j=0;j<b;j++){
    42             int maxx=-INF;int situ=-1;int ret=-1;
    43             for(int i=0;i<d;i++){
    44                 if(a[j].n>=s[i]&&a[j].flag==1&&flagg[i]==1){
    45                     if(maxx<s[i]){
    46                         maxx=s[i];
    47                         ret=i;
    48                         situ=j;
    49                     }
    50                 }
    51             }
    52             if(ret!=-1){
    53                 ans[ret]=a[situ].pos;
    54                 a[situ].flag=0;
    55                 flagg[ret]=0;
    56                 h++;
    57             }
    58         }
    59         if(h<d)printf("impossible
    ");
    60         else{
    61         for(int i=0;i<d;i++){
    62             printf("%d",ans[i]);
    63             if(i!=d-1)printf(" ");
    64             else printf("
    ");
    65         }
    66         }
    67     }
    68     return 0;
    69 }
  • 相关阅读:
    C++11特性
    DBC文件小结
    关于宏定义
    CentOS 6.5下Zabbix的安装配置
    CentOS下搭建LAMP环境详解
    VS2010中汉字拷贝到Word出现乱码问题解决
    DLL注入
    数组赋值
    CDC的StretchBlt函数载入位图时图片失真问题
    2019年下半年Web前端开发初级理论考试
  • 原文地址:https://www.cnblogs.com/ZERO-/p/9703443.html
Copyright © 2011-2022 走看看