题目来源: P1789 【Mc生存】插火把 - 洛谷
时空限制 1000ms / 128MB
题目背景
初一党应该都知道......
题目描述
话说有一天linyorson在Mc开了一个超平坦世界,他把这个世界看成一个n*n的方阵,现在他有m个火把和k个萤石,分别放在x1,y1...xm,ym和o1,p1...ok,pk的位置,问在这个方阵中有几个点会生成怪物?(没有光或没放东西的地方会生成怪物)
P.S.火把的照亮范围是:
萤石:
输入输出格式
输入格式:
输入共m+k+1行。
第一行为n,m,k。
第2到第m+1行分别是火把的位置xi yi。
第m+2到第m+k+1行分别是萤石的位置oi pi。
注:可能没有萤石,但一定有火把。
所有数据保证在int范围内。
输出格式:
有几个点会生出怪物。
输入样例:
5 1 0
3 3
输出样例:
12
只怪自己太蒟蒻,只能if来判断
了解一下38个if语句的神奇。。。。(自己太蒟了)
这个题的思路嘛就是通过if来判断可不可以照亮。(捂脸)
所以,,我就打了38个if,不长不长193行罢了
上代码。。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
using namespace std;
char a[3000][3000];
int xi,yi,oi,pi;
int main() {
int n,m,k,num=0;
cin>>n>>m>>k;
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
a[i][j]='0';
}
}
for(int i=1; i<=m; i++) {
cin>>xi>>yi;
a[xi][yi]='1';//huabaya
}
for(int i=1; i<=k;i++) {
cin>>oi>>pi;
a[oi][pi]='2';//yingshiya
}
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
if(a[i][j]=='1') {
if(a[i+2][j]=='0') {
a[i+2][j]='3';
num++;
}
if(a[i+1][j-1]=='0') {
a[i+1][j-1]='3';
num++;
}
if(a[i+1][j]=='0') {
a[i+1][j]='3';
num++;
}
if(a[i+1][j+1]=='0') {
a[i+1][j+1]='3';
num++;
}
if(a[i][j-2]=='0') {
a[i][j-2]='3';
num++;
}
if(a[i][j-1]=='0') {
a[i][j-1]='3';
num++;
}
/*if(a[i][j]=='0') {
a[i][j]='3';
num++;
}*/
if(a[i][j+2]=='0') {
a[i][j+2]='3';
num++;
}
if(a[i][j+1]=='0') {
a[i][j+1]='3';
num++;
}
if(a[i-1][j-1]=='0') {
a[i-1][j-1]='3';
num++;
}
if(a[i-1][j]=='0') {
a[i-1][j]='3';
num++;
}
if(a[i-1][j+1]=='0') {
a[i-1][j+1]='3';
num++;
}
if(a[i-2][j]=='0') {
a[i-2][j]='3';
num++;
}
}
if(a[i][j]=='2') {
if(a[i+2][j]=='0') {
a[i+2][j]='3';
num++;
}
if(a[i+1][j-1]=='0') {
a[i+1][j-1]='3';
num++;
}
if(a[i+1][j]=='0') {
a[i+1][j]='3';
num++;
}
if(a[i+1][j+1]=='0') {
a[i+1][j+1]='3';
num++;
}
if(a[i][j-2]=='0') {
a[i][j-2]='3';
num++;
}
if(a[i][j-1]=='0') {
a[i][j-1]='3';
num++;
}
/*if(a[i][j]=='0') {
a[i][j]='3';
num++;
}*/
if(a[i][j+2]=='0') {
a[i][j+2]='3';
num++;
}
if(a[i][j+1]=='0') {
a[i][j+1]='3';
num++;
}
if(a[i-1][j-1]=='0') {
a[i-1][j-1]='3';
num++;
}
if(a[i-1][j]=='0') {
a[i-1][j]='3';
num++;
}
if(a[i-1][j+1]=='0') {
a[i-1][j+1]='3';
num++;
}
if(a[i-2][j]=='0') {
a[i-2][j]='3';
num++;
}
if(a[i-2][j-2]=='0') {
a[i-2][j-2]='3';
num++;
}
if(a[i-2][j-1]=='0') {
a[i-2][j-1]='3';
num++;
}
if(a[i-2][j+1]=='0') {
a[i-2][j+1]='3';
num++;
}
if(a[i-2][j+2]=='0') {
a[i-2][j+2]='3';
num++;
}
if(a[i-1][j+2]=='0') {
a[i-1][j+2]='3';
num++;
}
if(a[i+1][j+2]=='0') {
a[i+1][j+2]='3';
num++;
}
if(a[i+2][j+2]=='0') {
a[i+2][j+2]='3';
num++;
}
if(a[i+2][j+1]=='0') {
a[i+2][j+1]='3';
num++;
}
if(a[i+2][j+1]=='0')
{
a[i+2][j+1]=='3';
num++;
}
if(a[i+2][j-1]=='0') {
a[i+2][j-1]='3';
num++;
}
if(a[i+2][j-2]=='0') {
a[i+2][j-2]='3';
num++;
}
if(a[i+1][j-2]=='0') {
a[i+1][j-2]='3';
num++;
}
if(a[i-1][j-2]=='0') {
a[i-1][j-2]='3';
num++;
}
}
}
}
cout<<((n*n)-num)-m-k<<endl;
return 0;
}