1 条题解

  • 0
    @ 2025-8-24 22:21:54

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Utilokasteinn
    技不如人

    搬运于2025-08-24 22:21:54,当前版本为作者最后更新于2020-05-18 18:51:26,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    其实这道题主要代码2行就好了,连if都不用。

    定义一个二维map数组,如果不会map的请看这边:

    先写一个map,map是关键字
    map<数组下标类型,数组存储类型>数组名;
    
    举一个例子:
    map<long long,long long>a;
    就是一个数组a,下标类型是long long,存储类型是long long
    有的时候数组不够大就可以这样写,就是速度会比普通数组慢一些 
    
    这道题可以开一个map数组,数组下标是char类型的,存储的数据是int型的
    就像这样:
    map<char,int>a; 
    
    二维数组的话只要在map里面再写一个map就好了,比如这样:
    map<int,map<int,int> >;
    

    如果这里有房子就为1,没有则为0。所以,可以直接把上下左右的数加起来,如果有房子为1就加1,没有为0就相当于加0,也就是什么也没有加。代码很简洁,有压一点行。代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    int n,k,x,y,ans;
    map<int,map<int,int> >a;
    int main()
    {
    	for(cin>>n>>k;k--&&cin>>x>>y&&(a[x][y]=1);)//把输入循环赋值全部压这行里了 
    		ans+=a[x-1][y]+a[x+1][y]+a[x][y+1]+a[x][y-1];//上下左右全部加起来 
    	cout<<ans;//输出答案 
    	return 0;
    }
    

    谢谢观赏

    • 1

    信息

    ID
    5256
    时间
    1000ms
    内存
    250MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者