zoukankan      html  css  js  c++  java
  • 洛谷 P1789 【Mc生存】插火把 题解

    P1789 【Mc生存】插火把

    题目背景

    初一党应该都知道......

    题目描述

    话说有一天 linyorson 在“我的世界”开了一个 (n imes n(nle 100)) 的方阵,现在他有 (m) 个火把和 (k) 个萤石,分别放在 ((x_1,y_1)...(x_m,y_m))((o_1,p_1)...(o_k,p_k)) 的位置,没有光或没放东西的地方会生成怪物。请问在这个方阵中有几个点会生成怪物?

    P.S.火把的照亮范围是:

        |暗|暗| 光 |暗|暗|
        |暗|光| 光 |光|暗|
        |光|光|火把|光|光|
        |暗|光| 光 |光|暗|
        |暗|暗| 光 |暗|暗|
    
    

    萤石:

        |光|光| 光 |光|光|
        |光|光| 光 |光|光|
        |光|光|萤石|光|光|
        |光|光| 光 |光|光|
        |光|光| 光 |光|光|
    
    

    输入格式

    输入共m+k+1行。

    第一行为n,m,k。

    第2到第m+1行分别是火把的位置xi yi。

    第m+2到第m+k+1行分别是萤石的位置oi pi。

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

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

    输出格式

    有几个点会生出怪物。

    输入输出样例

    输入 #1

    5 1 0
    3 3

    输出 #1

    12

    【思路】

    模拟
    很暴力的模拟

    【闲话】

    如果这片题解过掉的话
    那就是我通过的第100篇题解了
    纪念一下,所以我还是选择MC生存系列的题来交我的第100篇题解
    毕竟我从12年左右就开始玩MC了
    很有感情

    【题目大意】

    给你一块nn的地和萤石、火把若干
    萤石可以照亮以自身为中心5
    5的矩阵
    火把可以照亮上下左右各两格。
    四个方向对角线上各一格
    求没法被照亮的方块块数

    【题目分析】

    读入数据
    因为只有萤石和火把这两种可能
    所以用if判断一下放置的是什么就好了
    然后如果是火把
    那就将他的上下左右的两个和对角线四个方向上各一格都标为亮了
    如果是萤石
    那就将以他为中心的5*5的矩阵上面每一个方块都标为亮的
    标记的话可以用for循环来标记
    也可以直接if标记

    【注意】

    放置了火把和萤石的方块是亮的
    不会生成怪物。

    【完整代码】

    #include<iostream>
    #include<cstring>
    using namespace std;
    int main()
    {
    	int n,m,k;//n为边长,m为火把,k为萤石
    	cin>>n>>m>>k;
    	int owo,qwq;
    	int awa,pwp;
    	int a[n+5][n+5];
    	memset(a,0,sizeof(a));
    	for(int i=1;i<=m;++i)//火把循环,标为1代表火把 
    	{	
    		cin>>owo>>qwq;
    		a[owo][qwq]=1;
    	}
    	for(int j=1;j<=k;++j)//萤石循环,标为2代表萤石 
    	{
    		cin>>awa>>pwp;
    		a[awa][pwp]=2;
    	}
    	for(int l=1;l<=n;++l)
    	{
    		for(int u=1;u<=n;++u)
    		{
    			if(a[l][u]==1)
    			{
    				if(a[l-1][u]==0)a[l-1][u]=3;//3代表有光但不是火把也不是萤石
    				if(a[l-2][u]==0)a[l-2][u]=3;
    				if(a[l+1][u]==0)a[l+1][u]=3;
    				if(a[l+2][u]==0)a[l+2][u]=3;
    				if(a[l][u+1]==0)a[l][u+1]=3;
    				if(a[l][u+2]==0)a[l][u+2]=3;
    				if(a[l][u-2]==0)a[l][u-2]=3;
    				if(a[l][u-1]==0)a[l][u-1]=3;
    				if(a[l-1][u-1]==0)a[l-1][u-1]=3;
    				if(a[l+1][u+1]==0)a[l+1][u+1]=3;
    				if(a[l-1][u+1]==0)a[l-1][u+1]=3;
    				if(a[l+1][u-1]==0)a[l+1][u-1]=3;
    			}
    			if(a[l][u]==2)
    			{
    				if(a[l-1][u]==0)a[l-1][u]=3;//3代表有光但不是火把也不是萤石
    				if(a[l-1][u+1]==0)a[l-1][u+1]=3;
    				if(a[l-1][u-1]==0)a[l-1][u-1]=3;
    				if(a[l-1][u+2]==0)a[l-1][u+2]=3;
    				if(a[l-1][u-2]==0)a[l-1][u-2]=3;
    				if(a[l-2][u+2]==0)a[l-2][u+2]=3;
    				if(a[l-2][u-2]==0)a[l-2][u-2]=3;
    				if(a[l-2][u-1]==0)a[l-2][u-1]=3;
    				if(a[l-2][u+1]==0)a[l-2][u+1]=3;
    				if(a[l-2][u-1]==0)a[l-2][u-1]=3;
    				if(a[l-2][u]==0)a[l-2][u]=3;
    				if(a[l+1][u-2]==0)a[l+1][u-2]=3;
    				if(a[l+1][u+2]==0)a[l+1][u+2]=3;
    				if(a[l+1][u-1]==0)a[l+1][u-1]=3;
    				if(a[l+1][u+1]==0)a[l+1][u+1]=3;
    				if(a[l+1][u]==0)a[l+1][u]=3;
    				if(a[l+2][u+1]==0)a[l+2][u+1]=3;
    				if(a[l+2][u-1]==0)a[l+2][u-1]=3;
    				if(a[l+2][u+2]==0)a[l+2][u+2]=3;
    				if(a[l+2][u-2]==0)a[l+2][u-2]=3;
    				if(a[l+2][u]==0)a[l+2][u]=3;
    				if(a[l][u-1]==0)a[l][u-1]=3;
    				if(a[l][u-2]==0)a[l][u-2]=3;
    				if(a[l][l+2]==0)a[l][l+2]=3;
    				if(a[l][u+1]==0)a[l][u+1]=3;
    			}
    		}
    	}
    	int js=0;
    	for(int p=1;p<=n;++p)
    	{
    		for(int o=1;o<=n;++o)
    		{
    			if(a[p][o]==0)
    			js++;
    		}
    	}
    	cout<<js<<endl;
    	return 0;
    }
    

    第100篇在洛谷上面通过的题解,
    爱我MC
    爱我OI

  • 相关阅读:
    甘草
    html2pdf
    gitlab jenkins 安装笔记
    mac phpbrew安装
    域名解析各项记录对应的值
    网站添加ico图标
    dom控制
    webstrom 代码工具(转http://www.cnblogs.com/tangdanni11/p/5149063.html)
    http协议(转http://www.cnblogs.com/guguli/p/4758937.html)
    预解析机制
  • 原文地址:https://www.cnblogs.com/acioi/p/11746574.html
Copyright © 2011-2022 走看看