问题标题: 酷町堂:2276 cover

0
1
已解决
董宇昊
董宇昊
初级启示者
初级启示者

2276   cover经验值:0

题目描述 Description

一个n * n的网格图上有m个探测器,每个探测器有个探测半径 r,问这n * n个点中有多少个点能被探测到。

输入描述 Input Description

第一行3个整数n,m,r

接下来m行,每行两个整数x,y表示第i个探测器的坐标

输出描述 Output Description

能被探测到的点的个数

样例输入 Sample Input

5 2 1 3 3 4 2

样例输出 Sample Output

8

数据范围及提示 Data Size & Hint

1<=n,m<=100


0
已采纳
被禁言 李秉轩
李秉轩
修练者
修练者
  •  
  • int x[105],y[105];
  • bool num[105][105];
  • int main(){
  • //freopen(".in","r",stdin);
  • //freopen(".out","w",stdout);
  • int n,m,r,cnt=0;
  • cin>>n>>m>>r;
  • for(int i=1;i<=m;i++){
  • cin>>x[i]>>y[i];
  • }
  • for(int i=1;i<=n;i++){
  • for(int j=1;j<=n;j++){
  • for(int k=1;k<=m;k++){
  • double dis=sqrt((i-x[k])*(i-x[k])+(j-y[k])*(j-y[k]));
  • if(dis<=r){
  • num[i][j]=true;
  • }
  • }
  • }
  • }
  • for(int i=1;i<=n;i++){
  • for(int j=1;j<=n;j++){
  • if(num[i][j]){
  • cnt++;
  • }
  • }
  • }
  • cout<<cnt;
  • //fclose(stdin);
  • //fcolse(stdout);
  •  
0
董宇昊
董宇昊
初级启示者
初级启示者

思路+核心代码

谢谢老铁

0
陈振轩
陈振轩
高级光能
高级光能
    for(int i=1; i<=n; i++){
        for(int j=1; j<=n; j++){
            for(int k=1; k<=m; k++){
                if(sqrt((i-x[k])*(i-x[k])+(j-y[k])*(j-y[k]))<=r){
                    a[i][j]=1;
                }
            }
        }
    }

核心

定义一个二维数组a[105][105],用于标记能被探测到的点
输入n,m,r
输入m行
每行输入探测器坐标x,y
枚举横坐标x-r~X+r,纵坐标y-r~y+r范围内的点
if ( (i,j)与(×,y)之间的距离不超过r)
标记a[i][j]
遍历二维数组,计数a[i][j]!=0的点个数

前置知识:平面上两点之间的距离公式:
点(x1,y1)与点(x2,y2)之间的距离:sqrt( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) )

思路

0
0
李鑫羽
李鑫羽
初级光能
初级光能

for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            for(int k=0;k<m;k++){
                double s=sqrt((i-a[k])*(i-a[k])+(j-b[k])*(j-b[k]));
                if(s<=r&&c[i][j]==0){
                    cnt++;
                    c[i][j]=1;
                }
            }
        }
    }
    cout<<cnt;

0
胡焕宇
胡焕宇
初级守护
初级守护

纠正一下李鑫羽 同学的代码

for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            for(int k=1;k<=m;k++){
                double s=sqrt((i-a[k])*(i-a[k])+(j-b[k])*(j-b[k]));
                if(s<=r&&c[i][j]==0){
                    cnt++;
                    c[i][j]=1;
                }
            }
        }
    } 

 

胡焕宇在2020-08-25 10:18:22追加了内容

不算完整代码吧

0
吴庞茂旭
吴庞茂旭
资深光能
资深光能

哇!有人发完整代码!我都举报不过来了!

0
0
我要回答