EOJ(排序)——2015. 自修室
2015. 自修室
一直不去自修室的 Rocker 最近迫于学习压力决定每天都要去自修,鉴于自修室多多,何必与人争挤,所以 Rocker 要坐在左右一个座位都没人,如果不是第一排,那么他的前面一个座位也没有人的位置上,当然 Rocker 也可以坐在墙边但前面或左边或右边有座位的话要没有人才可以。
Rocker 眼力异常好,只要在门口瞟一眼就可以知道哪个位置上有人哪个没有人,但 Rocker 大脑毕竟不像电脑可以迅速计算出这间教室有没有符合他要求的位置,所以请你写一个程序帮助他。
输入
输入有多个 case,每个 case 第一行有一个数 n 表示自修室的总间数,接下来描述 n(n⩽100) 个自修室的座位情况,接下来按照 Rocker 对于每间自修室,第一行有四个整数 ID,Dis,R,C(Dis⩽2000000,5⩽R,C⩽15),分别是教室的门号,教室距离 Rocker 寝室的距离,座位的行数以及列数。接下来是一个 R∗C 的 0-1 矩阵,
0 表示该座位没有人,1 表示有人。(每间教室 ID,Dis 互异),Rocker 按照距离远近依次找教室自修,去距离寝室最近的一间满足他条件的教室自修。
输出
每个 case 输出一行,如果 Rocker 可以自修的教室 ID,若无教室符合条件,输出 “Bad Luck,Rocker!”
样例
input
2
4110 16 15 15
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
4102 15 14 15
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
111111101111111
111111000011111
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
111111111111111
output
4102
题目大意:
给出n组数据,查找最近的满足条件的自习室。
题目解析:
用string数组读入数据并且判断自习室是否满足条件。
具体代码:
#include<iostream>
#include<algorithm>
using namespace std;
struct node {
int id;
int dis;
} arr[110];
string room[160];
bool cmp(node x,node y) {
return x.dis<y.dis;
}
int main() {
int n;
while(cin>>n) {
int count=0;
for(int i=0; i<n; i++) {
int id,dis,r,c;
cin>>id>>dis>>r>>c;
for(int j=0; j<r; j++)
cin>>room[j];
for(int j=0; j<r; j++) {
int flag=0;
for(int k=0; k<c; k++)
if(room[j][k]=='0'&&(j==0||room[j-1][k]=='0')&&(k==0||room[j][k-1]=='0')&&(k==r-1||room[j][k+1]=='0'))
flag=1;
if(flag) {
arr[count].id=id;
arr[count].dis=dis;
count++;
break;
}
}
}
if(count==0)
cout<<"Bad Luck,Rocker!"<<endl;
else {
sort(arr,arr+count,cmp);
cout<<arr[0].id<<endl;
}
}
return 0;
}