题目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
比赛已经结束,去题库提交
写的好复杂啊.....是不是还有简单方法.
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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\n",res-count); 101 return 0; 102 }