C/C++教程

P1789 【Mc生存】插火把

本文主要是介绍P1789 【Mc生存】插火把,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

P1789 【Mc生存】插火把

题目背景

初一党应该都知道…

题目描述

话说有一天 linyorson在“我的世界开了ー一个nxn(n≤100)的方阵,现在他有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行分别是萤石的位置0i,pi。

注:可能没有萤石,但一定有火把。

所有数据保证在 int 范围内。

输出格式

有几个点会生出怪物。

输入输出样例

输入 #1复制

5 1 0
3 3

输出 #1复制

12

题解

python

n,m,k=map(eval,input().split())
matrix = [[0 for j in range(n)] for i in range(n)]

def Huoba(x,y):
   for i in range(x-2,x+3):
      if i<0 or i>n-1: continue
      matrix[i][y]=1
   for i in range(y-2,y+3):
      if i<0 or i>n-1: continue
      matrix[x][i]=1
   for i in range(x-1,x+2):
      for j in range(y-1,y+2):
         if i<0 or i>n-1 or j<0 or j>n-1: continue
         matrix[i][j]=1

def Yingshi(x,y):
   for i in range(x-2,x+3):
      for j in range(y-2,y+3):
         if i<0 or i>n-1 or j<0 or j>n-1: continue
         matrix[i][j]=1

for i in range(m):
   x,y=map(eval,input().split())
   Huoba(x-1,y-1)
for i in range(k):
   x, y = map(eval, input().split())
   Yingshi(x-1,y-1)

c=0
for i in matrix:c+=i.count(0)
print(c)

c++

#include <iostream>
using namespace std;
int a[10010][10010],n,m,k;
int Huoba(int x, int y){
    for (int i = x-2; i <= x+2; ++i) {
        if(i<0||i>n-1)continue;
        a[i][y]=1;
    }
    for (int i = y-2; i <= y+2; ++i) {
        if(i<0||i>n-1)continue;
        a[x][i]=1;
    }
    for (int i = x-1; i <= x+1; ++i) {
        for (int j = y-1; j <= y+1; ++j) {
            if(i<0||i>n-1||j<0||j>n-1)continue;
            a[i][j]=1;
        }
    }
    return 0;
}
int Yingshi(int x,int y){
    for (int i = x-2; i <= x+2; ++i) {
        for (int j = y-2; j <= y+2; ++j) {
            if(i<0||i>n-1||j<0||j>n-1)continue;
            a[i][j]=1;
        }
    }
    return 0;
}
int main() {
    cin>>n>>m>>k;
    for (int i = 0; i < m; ++i) {
        int x,y;
        cin >>x>>y;
        Huoba(x-1,y-1);
    }
    for (int i = 0; i < k; ++i) {
        int x,y;
        cin >>x>>y;
        Yingshi(x-1,y-1);
    }
    int c=0;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            if(a[i][j]==0)c++;
        }
    }
    cout<<c;
    return 0;
}
这篇关于P1789 【Mc生存】插火把的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!