A. Cashier
水题,将整个时间线分成几段整除即可
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <vector>
#include <set>
#include <sstream>
#include <stack>
using namespace std;
char a[1005][1005];
int b[8][2] = {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
int main()
{
int n,m;
while(cin>>n>>m){
int ans = 0,cnt = 0;
for(int i = 0;i < n;i++)
for(int j = 0;j < m;j++){
cin>>a[i][j];
if(a[i][j] == '#')
ans++;
}
for(int i = 1;i < n-1;i++){
for(int j = 1;j < m-1;j++){
int co = 0;
for(int k = 0;k < 8;k++){
if(a[i+b[k][0]][j+b[k][1]] == '#' || a[i+b[k][0]][j+b[k][1]] == '1')
co++;
else
continue;
}
if(co == 8){
for(int k = 0;k < 8;k++){
if(a[i+b[k][0]][j+b[k][1]] == '#')
cnt++;
a[i+b[k][0]][j+b[k][1]] = '1';
}
}
}
}
//cout<<"ans: "<<ans<<endl;
//cout<<"cnt: "<<cnt<<endl;
if(ans == cnt) cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
B. Forgery
搜索,枚举(n-1)*(m-1)内每个点