RT,今晚ABC的C,为什么用pair就wa,手写就ac?
WA:
#include <bits/stdc++.h>
using namespace std;
char ch[1005][1005];
int n;
inline int is_in (pair < int, int > x) {
int a = x.first;
int b = x.second;
if (a >= 1 && a <= n && b >= 1 && b <= n) return 1;
else return 0;
}
int possi[10];
inline pair < int, int > po1 (int x, int y) {
return make_pair (x, y - 5);
}
inline pair < int, int > po2 (int x, int y) {
return make_pair (x, y + 5);
}
inline pair < int, int > po3 (int x, int y) {
return make_pair (x - 5, y);
}
inline pair < int, int > po4 (int x, int y) {
return make_pair (x + 5, y);
}
inline pair < int, int > po5 (int x, int y) {
return make_pair (x - 5, y - 5);
}
inline pair < int, int > po6 (int x, int y) {
return make_pair (x - 5, y + 5);
}
inline pair < int, int > po7 (int x, int y) {
return make_pair (x + 5, y - 5);
}
inline pair < int, int > po8 (int x, int y) {
return make_pair (x + 5, y + 5);
}
signed main () {
cin >> n;
for (int i = 1;i <= n; ++ i) {
for (int j = 1;j <= n; ++ j) {
cin >> ch[i][j];
}
}
for (int i = 1;i <= n; ++ i) {
for (int j = 1;j <= n; ++ j) {
pair < int, int > s1 = po1 (i, j);
pair < int, int > s2 = po2 (i, j);
pair < int, int > s3 = po3 (i, j);
pair < int, int > s4 = po4 (i, j);
pair < int, int > s5 = po1 (i, j);
pair < int, int > s6 = po2 (i, j);
pair < int, int > s7 = po3 (i, j);
pair < int, int > s8 = po4 (i, j);
if (is_in (s2)) {
int bl = 0;
for (int k = 0;k <= 5; ++ k) {
if (ch[i][j + k] == '#') bl ++;
}
if (bl >= 4) {
cout << "Yes\n"; return 0;
}
}
if (is_in (s4)) {
int bl = 0;
for (int k = 0;k <= 5; ++ k) {
if (ch[i + k][j] == '#') bl ++;
}
if (bl >= 4) {
cout << "Yes\n"; return 0;
}
}
if (is_in (s6)) {
int bl = 0;
for (int k = 0;k <= 5; ++ k) {
if (ch[i - k][j + k] == '#') bl ++;
}
if (bl >= 4) {
cout << "Yes\n"; return 0;
}
}
if (is_in (s8)) {
int bl = 0;
for (int k = 0;k <= 5; ++ k) {
if (ch[i + k][j + k] == '#') bl ++;
}
if (bl >= 4) {
cout << "Yes\n"; return 0;
}
}
}
}
cout << "No\n"; return 0;
}
AC:
#include <bits/stdc++.h>
using namespace std;
char ch[1005][1005];
int n;
inline int is_in (int a, int b) {
if (a >= 1 && a <= n && b >= 1 && b <= n) return 1;
else return 0;
}
int possi[10];
signed main () {
cin >> n;
for (int i = 1;i <= n; ++ i) {
for (int j = 1;j <= n; ++ j) {
cin >> ch[i][j];
}
}
for (int i = 1;i <= n; ++ i) {
for (int j = 1;j <= n; ++ j) {
if (is_in (i, j + 5)) {
int bl = 0;
for (int k = 0;k <= 5; ++ k) {
if (ch[i][j + k] == '#') bl ++;
}
if (bl >= 4) {
cout << "Yes\n"; return 0;
}
}
if (is_in (i + 5, j)) {
int bl = 0;
for (int k = 0;k <= 5; ++ k) {
if (ch[i + k][j] == '#') bl ++;
}
if (bl >= 4) {
cout << "Yes\n"; return 0;
}
}
if (is_in (i - 5, j + 5)) {
int bl = 0;
for (int k = 0;k <= 5; ++ k) {
if (ch[i - k][j + k] == '#') bl ++;
}
if (bl >= 4) {
cout << "Yes\n"; return 0;
}
}
if (is_in (i + 5, j + 5)) {
int bl = 0;
for (int k = 0;k <= 5; ++ k) {
if (ch[i + k][j + k] == '#') bl ++;
}
if (bl >= 4) {
cout << "Yes\n"; return 0;
}
}
}
}
cout << "No\n"; return 0;
}