zoukankan      html  css  js  c++  java
  • 洛谷T8115 毁灭

    题目描述

    YJC决定对入侵C国的W国军队发动毁灭性打击。将C国看成一个平面直角坐标系,W国一共有n^2个人进入了C国境内,在每一个(x,y)(1≤x,y≤n)上都有恰好一个W国人。YJC决定使用m颗核导弹,每一颗核导弹将杀死某个圆内所有的W国人,恰好在圆上也会被杀死。现在YJC想知道,在这一轮核打击之后,还有多少个W国人在C国境内。

    输入输出格式

    输入格式:

    第一行包含两个整数n和m,意思如题所示。

    接下来m行每行三个整数x,y和r,表示以(x,y)为圆心,r为半径的圆圆内和圆上的W国人被全部杀死。

    输出格式:

    一行,包含一个整数,表示幸存的W国人个数。

    输入输出样例

    输入样例#1:
    3 2
    2 2 1
    1 1 2
    输出样例#1:
    1

    说明

    第一枚导弹杀死了(1,2)、(2,1)、(2,2)、(2,3)、(3,2)上的W国人,第二枚导弹杀死了(1,1)、(1,2)、(1,3)、(2,1)、(2,2)、(3,1)上的W国人,只剩下(3,3)上的W国人没有被杀死。

    对于50%的数据,满足n,m≤50。

    对于100%的数据,满足1≤x,y≤n≤5000,0≤r≤n,1≤m≤5000。

    还是码力问题 以后不确定还是要写暴力啊QAQ不能太自信没对拍就交啊

    ——————————————————————————————————

    这道题很容易想到的一个暴力就是枚举每一个核弹和每一个点(这样的复杂度是o(nnm))

    很明显只能拿五十分

    那么我们可以想着降一维 考虑每一行和每一个核弹的关系 利用差分就很容易实现辣

    我的方法呢是 每读入一个核弹就枚举所有他能覆盖到的行数 枚举的方向大概是这样

    利用勾股定理可以算出他和直线的交点 可以发现两个交点构成的线段长度是递减的

    然后就很好实现辣

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int read(){
        int ans=0,f=1,c=getchar();
        while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();}
        return ans*f;
    }
    int n,m,ans;
    int sum[5007][5007];
    int main()
    {
        n=read(); m=read();
        for(int k=1;k<=m;k++){
            int x=read(),y=read(),r=read();
            for(int i=0,j=r;i<=r;i++){
                int mx=r*r-i*i;
                while(j*j>mx) j--;
                int L=y-j,R=y+j;
                if(L<1) L=1;
                if(R>n) R=n;
                if(x-i>=1) sum[x-i][L]++,sum[x-i][R+1]--;
                if(x+i<=n) sum[x+i][L]++,sum[x+i][R+1]--;
            }
        }
        for(int i=1;i<=n;i++)
         for(int j=1;j<=n;j++)
          ans+=bool(sum[i][j]+=sum[i][j-1]);
        printf("%d
    ",n*n-ans);
        return 0;
    }
    View Code
  • 相关阅读:
    深入浅出 Java Concurrency (7): 锁机制 part 2 AQS[转]
    深入浅出 Java Concurrency (6): 锁机制 part 1[转]
    深入浅出 Java Concurrency (5): 原子操作 part 4[转]
    深入浅出 Java Concurrency (4): 原子操作 part 3 指令重排序与happens-before法则[转]
    深入浅出 Java Concurrency (3): 原子操作 part 2[转]
    深入浅出 Java Concurrency (2): 原子操作 part 1[转]
    深入浅出 Java Concurrency (1) : J.U.C的整体认识[转]
    深入浅出 Java Concurrency
    读书笔记--模式与重构 目录
    SpringMVC,3种不同的URL路由配置方法 [转]
  • 原文地址:https://www.cnblogs.com/lyzuikeai/p/7275542.html
Copyright © 2011-2022 走看看