P1789 【Mc生存】插火把

题目背景

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

题目描述

话说有一天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范围内。

输出格式:

有几个点会生出怪物。

输入输出样例

输入样例#1:

5 1 0
3 3

输出样例#1:

12
#include<iostream>
#include<cstdio>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
#define LL long long
int map[6000][6000];
int n,m,k;
int L,R,T,B;
int main()
{
    scanf("%d%d%d",&n,&m,&k);
    for(int kk=1,x,y;kk<=m;kk++)
    {
        scanf("%d%d",&x,&y);
        int l=x-2,r=x+2;
        int i=0;
         for( i=0;l<=x;l++,i++)
        {
            L=max(1,l);R=min(n,r);
            T=min(y+i,n);B=max(y-i,1);
            map[L][B]+=1;
            if(B!=T)
                map[L][T]+=1;
        }
        l--,i=2;
        for(;l<=R;l++,i--)
        {
            L=max(1,l);R=min(n,r);
            T=min(y+i,n);B=max(y-i,1);
            map[L+1][B]-=1;
            if(B!=T)
                map[L+1][T]-=1;
        }
    }

    for(int i=1,x,y;i<=k;i++)
    {
        scanf("%d%d",&x,&y);
        L=max(x-2,1);R=min(n,x+2);
        T=min(y+2,n);B=max(y-2,1);
        for(;B<=T;B++)
            map[L][B]+=1;
        B=max(y-2,1);
        for(;B<=T;B++)
            map[R+1][B]-=1;
    }
    int all=0;
    for(int j=1;j<=n;j++)
    {
        int tot=0;
        for(int i=1;i<=n;i++)
        {
            tot+=map[i][j];
            if(tot>0)    all++;
        }
    }
    cout<<(n*n-all);
    return 0;
}
时间: 2024-10-06 15:11:01

P1789 【Mc生存】插火把的相关文章

洛谷P1789【Mc生存】插火把 题解

题目传送门 这道题目可以纯暴力: #include<bits/stdc++.h> //Minecraft 666 using namespace std; int a[110][110]; int n,m,k,ans; int main(){ scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=m;i++){ int x,y; scanf("%d%d",&x,&y); a[x-2

luogu p1867【Mc生存】经验值

原题链接:https://www.luogu.org/problem/show?pid=1867 今天看到这个题原来做过没A的时候,心里想:这不就是个模拟吗,看我2min切了它... 然后就硬生生调了0.5h,用出了各种大招,freopen,double,数组,中间结果,才将其拿下...... 思路应该没难度n<=20的数据o(n+玄学)复杂度,0ms跑过全部的点无压力,只是有几个细节... 用了double,按理说float也行的,不知道为啥不能A,而且hp赋初值的时候不要加小数点... 而且

BZOJ 3439: Kpm的MC密码( trie + DFS序 + 主席树 )

把串倒过来插进trie上, 那么一个串的kpm串就是在以这个串最后一个为根的子树, 子树k大值的经典问题用dfs序+可持久化线段树就可以O(NlogN)解决 ------------------------------------------------------------------ #include<cstdio> #include<cstring> #include<algorithm> #include<cctype> using namespa

互联网时代U盘化生存 5分钟演讲稿

在演讲之前先问大家个问题,先不要开始计时啊! (第一个,加上手势)有谁能说一下U盘的特点? (第二个,加上手势) 问一下有谁是自由职业者,或者在创业和单干? 好的,感谢各位朋友的精彩回答! 今天我的演讲题目是"互联网时代的U盘化生存方式": "U盘化生存"概括起来就是十六个字:"自带信息,不装系统,随时插拔,自由协作". 随着互联网的发展,人和人的协作变得更加自由,那么衡量一个节点价值的方式,就出现了非常重要的变化. 在北上广深这样的大城市,我们

survival analysis 生存分析与R 语言示例 入门篇

生存分析,survival analysis,顾名思义是用来研究个体的存活概率与时间的关系.例如研究病人感染了病毒后,多长时间会死亡:工作的机器多长时间会发生崩溃等.  这里“个体的存活”可以推广抽象成某些关注的事件. 所以SA就成了研究某一事件与它的发生时间的联系的方法.这个方法广泛的用在医学.生物学等学科上,近年来也越来越多人用在互联网数据挖掘中,例如用survival analysis去预测信息在社交网络的传播程度,或者去预测用户流失的概率. R里面有很成熟的SA工具. 本文介绍生存分析的

利用烧鹅制作简单BadUSB,插谁谁怀孕

所用硬件设备为烧鹅,烧鹅是RadioWar基于Teensy++ 2.0 AT90USB1286芯片设计的USB Rubber Ducky类开发板. 使用veil编码meterpreter生成payload(经过编码的payload在杀软中仅能够存活几分钟),放到服务器上.插入烧鹅,模拟键盘输入,在cmd中下载payload,并执行. Github:https://github.com/RadioWar/FireGoose 0x1 利用veil编码打造免杀的meterpreter  [email 

Javsssist用InsertAt()方法对语句插桩

基于上一篇的方法插桩,这一篇则是进一步的对每行的语句进行插桩. 对于存在分支的方法(例如if(){}else{}),对方法插桩的方法是不能够全部涉及到的.所以要对程序的每条语句进行插桩. 插入什么语句呢?可以插入包括以下的内容: 1‘ classname 2’ linenumber 此时需要用到javassist  api里的类CtMethod的方法insertAt(),对程序的每条语句进行插桩. 逻辑思想就是:读取class文件,对类的方法进行获取,读取每个类的行号范围,在每个行号前用inse

单链表的尾插,头插,遍历,查找和插入

单链表的基本结构 function Node(val,next){ this.val = val; this.next = next || null; } 1.链表的创建 a.尾插法,就是正常的尾部顺序插入,从数组创建链表 function tailCreateList(aSrc){ var head = new Node(); pHead = head; aSrc.forEach((item) => { var node = new Node(item); pHead.next = node;

黑客玩法,插上你的专有U盘才能开机

这个玩法的效果是这样的: 1.插上你的专有U盘,按电脑开机按钮,电脑正常启动运行: 2.如果不插专有优U盘,按电脑开机按钮,进入桌面后1秒钟电脑自动关机,无法使用.也就是说,没有优U盘将无法使用你的电脑. 下面教你如何实现上面的玩法: 第一步:在自己的U盘(假设是F盘)里,新建一个文本文件,内容可以为空,另存为"密码U盘.txt"文件. 第二步:在电脑的D盘里,新建一个文本文件,编辑该文本文件,文本文件内容如下: @echo off if not exist F:\密码U盘.txt s