1 条题解

  • 0
    @ 2025-8-24 23:00:25

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar zhengpie
    天降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行指乱其所为,所以动心忍性,曾益其所不能。

    搬运于2025-08-24 23:00:25,当前版本为作者最后更新于2024-07-06 19:44:20,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    1.思路

    考虑使用一个变量 ansans 维护被覆盖的面积。(注意要开成 double 类型)

    一张窗花的中心在 (x,y)(x,y),此时再贴一张窗花,窗花的中心在 (a,b)(a,b),那么有一下三种情况:(后面统一省略单位)

    • x=a,y=bx=a,y=b,即这两张窗花重合(样例中的第四张与第五张),那么 ansans 不变。

    • a=x±1,b=ya = x \pm 1,b=yb=y±1,a=xb = y \pm 1,a=x,那么他们会重叠 (2÷2)×(2÷2)÷2=0.5(2\div2)\times(2\div2)\div2=0.5 的面积,而一张窗花可以覆盖 2×2÷2=22\times2\div2=2 的面积,故一共会新覆盖 1.51.5 的面积,ansans+1.5ans \gets ans + 1.5。(这种情况是样例中的第一张和第二张)

    • 如果以上两种都不符合,那么就会新覆盖 22 的面积,ansans+2ans \gets ans+2

    2.代码

    #include<bits/stdc++.h>
    using namespace std;
    int n,mp[114][514];
    double cnt;
    signed main()
    {
    	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    	cin>>n;
    	while(n--)
    	{
    		int x,y;
    		cin>>x>>y;
    		if(mp[x][y]) continue;
    		cnt += 2.0000000000000000;
    		mp[x][y]++;
    		cnt -= 0.500000000 * (double)(mp[x - 1][y] + mp[x + 1][y] + mp[x][y - 1] + mp[x][y + 1]);
    	}
    	cout<<cnt;
    	
    	return 0;
    	
    }
    
    • 1

    信息

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