• 航班座位_hihocoder


    题目2 : 航班座位

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    小Hi在给一个家庭旅游团订某次航班的机票。该航班的飞机一共有N排座位,每排座位有10个座位,从左到右依次编号ABCDEFGHJK。其中ABC连在一起,DEFG连在一起,HJK连在一起;而C和D以及G和H被过道隔开。  

    现在有M个座位已经被预订,小Hi想知道他最多能安排多少个三口之家搭乘本次航班。注意三口之家需要坐在同一排连续的3个座位上,不能被过道隔开。  

             ABC  DEFG  HJK
        1    XOO  OOOO  OOX
        2    OOO  XXXO  XOO
        3    OOO  OOOO  OXO
             ........
    

    输入

    第一行包含两个整数N和M。  

    以下M行每行包含一个座位号。  

    1 <= N <= 1000000000  

    1 <= M <= 100000

    输出

    输出一个整数代表答案

    样例输入
    3 7  
    1A
    1K
    3J
    2D
    2E
    2F
    2H
    样例输出
    4

    比赛已经结束,去题库提交

    写的好复杂啊.....是不是还有简单方法.

      1 #include <iostream>
      2 #include <fstream>
      3 #include <sstream>
      4 #include <map>
      5 #include <string>
      6 #include <list>
      7 #include <forward_list>
      8 #include <deque>
      9 #include <cstdio>
     10 #include <vector>
     11 #include <algorithm>
     12 #include <numeric>
     13 #include <ctime>
     14 #include <iterator>
     15 #include <set>
     16 #include <cstdio>
     17 
     18 using namespace std;
     19 
     20 set<long long> sll1;
     21 
     22 int calgewei(char c){
     23     if(c=='J') return 8;
     24     if(c=='K') return 9;
     25     return c-'A';
     26 }
     27 
     28 int main()
     29 {
     30     long long n,m;
     31     int row;
     32     char col;
     33     long long count=0;
     34     long long rr1;
     35     long long rr2,rr3,rr4,rr5;
     36     scanf("%lld %lld",&n,&m);
     37     for(int i=0;i<m;i++){
     38         scanf("%d%c",&row,&col);
     39         int gewei=calgewei(col);
     40         rr1=row*10+gewei;
     41         if(gewei==0||gewei==1||gewei==2){
     42             rr2=row*10;
     43             if(sll1.find(rr2)!=sll1.end()){
     44                 continue;
     45             }else{
     46                 count++;
     47                 sll1.insert(rr2);
     48             }
     49         }else if(gewei==7||gewei==8||gewei==9){
     50             rr2=row*10+7;
     51             if(sll1.find(rr2)!=sll1.end()){
     52                 continue;
     53             }else{
     54                 count++;
     55                 sll1.insert(rr2);
     56             }
     57         }else{
     58             rr2=row*10+3;
     59             rr3=rr2+1;
     60             rr4=rr3+1;
     61             rr5=rr4+1;
     62             if(gewei==3){
     63                 if(sll1.find(rr2)==sll1.end()&&sll1.find(rr3)==sll1.end()&&sll1.find(rr4)==sll1.end()&&sll1.find(rr5)!=sll1.end()){
     64                     count++;
     65                     sll1.insert(rr2);
     66                 }else{ 
     67                     sll1.insert(rr2);
     68                     continue;
     69                 }
     70             }else if(gewei==4){
     71                 if(sll1.find(rr2)==sll1.end()&&sll1.find(rr3)==sll1.end()&&sll1.find(rr4)==sll1.end() ||
     72                         sll1.find(rr3)==sll1.end()&&sll1.find(rr4)==sll1.end()&&sll1.find(rr5)==sll1.end()){
     73                     count++;
     74                     sll1.insert(rr3);
     75                 }else{
     76                     sll1.insert(rr3);
     77                     continue;
     78                 }
     79             }else if(gewei==5){
     80                 if(sll1.find(rr2)==sll1.end()&&sll1.find(rr3)==sll1.end()&&sll1.find(rr4)==sll1.end() ||
     81                         sll1.find(rr3)==sll1.end()&&sll1.find(rr4)==sll1.end()&&sll1.find(rr5)==sll1.end()){
     82                     count++;
     83                     sll1.insert(rr4);
     84                 }else{
     85                     sll1.insert(rr4);
     86                     continue;
     87                 }
     88             }else if(gewei==6){
     89                 if(sll1.find(rr2)!=sll1.end()&&sll1.find(rr3)==sll1.end()&&sll1.find(rr4)==sll1.end()&&sll1.find(rr5)==sll1.end()){
     90                     count++;
     91                     sll1.insert(rr5);
     92                 }else{
     93                     sll1.insert(rr5);
     94                     continue;
     95                 }
     96             }
     97         }
     98     }
     99     long long res=3*n;
    100     printf("%lld
    ",res-count);
    101     return 0;
    102 }
    View Code
  • 相关阅读:
    HDU 2767:Proving Equivalences(强连通)
    POJ 2828: Buy Tickets(线段树)
    HRBUST 2078:糖果(模拟,贪心)
    大视野 1016: [JSOI2008]最小生成树计数(最小生成树)
    HRBUST 2064:萌萌哒十五酱的宠物~(最近公共祖先LCA)
    HRBUST 2072:萌萌哒十五酱的礼物~(树,字典树)
    分组 F查询 Q 查询
    连表查询 复习
    django 多表操作
    orm 表单操作
  • 原文地址:https://www.cnblogs.com/TWS-YIFEI/p/10262641.html
Copyright © 2020-2023  润新知