聽說這次cf的A題題意很可怕……
暴力模擬題意。
大意如下:
若這個人行道能通行,判斷「人行道同側的三車道」、「人行道對面的直道」、「人行道左方的右轉道」、「人行道右方的左轉道」是否至少有一個能通行。若有,說明事故可能發生。
本題不需要考慮兩車相撞的事故。
#include<bits/stdc++.h>
using namespace std;
int a[5][10];
main(){
for(int i = 1;i<=4;i++){
for(int j = 1;j<=4;j++){
cin >> a[i][j];
}
a[i][5] = a[i][1] || a[i][2] || a[i][3];
}
int ok = 0;
if(a[1][4]){
if(a[1][5] || a[2][1] || a[3][2] || a[4][3]) ok =1;
}
if(a[2][4]){
if(a[2][5] || a[3][1] || a[4][2] || a[1][3]) ok =1;
}
if(a[3][4]){
if(a[3][5] || a[4][1] || a[1][2] || a[2][3]) ok =1;
}
if(a[4][4]){
if(a[4][5] || a[1][1] || a[2][2] || a[3][3]) ok =1;
}
if(ok) cout << "YES\n";
else cout << "NO\n";
}
代碼有一定的對稱性,有用for簡化的餘地。但是就結果來看……並沒有得到什麼簡化。所以說,有些時候「手動」不僅正確性更高,「複製」、「粘貼」、「修改」,實際的代碼量也更少。
#include<bits/stdc++.h>
using namespace std;
int a[5][10];
main(){
for(int i = 1;i<=4;i++){
for(int j = 1;j<=4;j++){
cin >> a[i][j];
}
a[i][5] = a[i][1] || a[i][2] || a[i][3];
}
int ok = 0;
for(int i = 1;i<=4;i++){
if(a[i][4] && !ok){
for(int j = (i)%4+1,cnt=1,temp=a[i][5];cnt<=3;j=(j)%4+1){
temp = temp || a[j][cnt];
cnt++;
if(temp) ok = 1;
}
}
}
if(ok) cout << "YES\n";
else cout << "NO\n";
}