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;
}