航班座位_hihocoder

题目2 : 航班座位

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

描述

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

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

         ABC  DEFG  HJK1    XOO  OOOO  OOX2    OOO  XXXO  XOO3    OOO  OOOO  OXO........

输入

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

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

1 <= N <= 1000000000  

1 <= M <= 100000

输出

输出一个整数代表答案

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

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

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

  1 #include 
  2 #include 
  3 #include 
  4 #include 
  5 #include <string>
  6 #include 
  7 #include 
  8 #include 
  9 #include 
 10 #include 
 11 #include 
 12 #include 
 13 #include 
 14 #include 
 15 #include <set>
 16 #include 
 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){
 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\n",res-count);
101     return 0;
102 }
View Code

 

转载于:https://www.cnblogs.com/TWS-YIFEI/p/10262641.html


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部