題目來源: P1789 【Mc生存】插火把 - 洛谷
時(shí)空限制??1000ms / 128MB
題目背景
初一黨應(yīng)該都知道......
題目描述
話說有一天linyorson在Mc開了一個(gè)超平坦世界,他把這個(gè)世界看成一個(gè)n*n的方陣,現(xiàn)在他有m個(gè)火把和k個(gè)螢石,分別放在x1,y1...xm,ym和o1,p1...ok,pk的位置,問在這個(gè)方陣中有幾個(gè)點(diǎn)會(huì)生成怪物?(沒有光或沒放東西的地方會(huì)生成怪物)
P.S.火把的照亮范圍是:

螢石:

輸入輸出格式
輸入格式:
輸入共m+k+1行。
第一行為n,m,k。
第2到第m+1行分別是火把的位置xi yi。
第m+2到第m+k+1行分別是螢石的位置oi pi。
注:可能沒有螢石,但一定有火把。
所有數(shù)據(jù)保證在int范圍內(nèi)。
輸出格式:
有幾個(gè)點(diǎn)會(huì)生出怪物。
輸入樣例:
5 1 0
3 3
輸出樣例:
12
只怪自己太蒟蒻,只能if來判斷
了解一下38個(gè)if語句的神奇。。。。(自己太蒟了)
這個(gè)題的思路嘛就是通過if來判斷可不可以照亮。(捂臉)
所以,,我就打了38個(gè)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;
}