欢迎光临
我们一直在努力

洛谷P1789插火把题解

题目简介

给定n*n的方格,插入火把与萤石,火把能照亮自身+上下左右2格;萤石照亮周围一圈八格。求最后没有被照亮的格子数

完整代码

#include <stdio.h>
#include <string.h>
int main()
{
int n,m,k;
int grid[105][105];
int i,j,x,y;
int dx,dy;
scanf("%d %d %d",&n,&m,&k);
memset(grid,0,sizeof(grid));
for(i=0;i<m;i++){
scanf("%d %d",&x,&y);
for(dx=–2;dx<=2;dx++){
for(dy=–2;dy<=2;dy++){
if(dx*dx+dy*dy)<=4{
int nx=x+dx;
int ny=y+ny;
if(nx>=1&&nx<=n&&ny>=1&&ny<=n){
grid[nx][ny]=1;
}
}
}
}
}
for(i=0;i<k;i++){
scanf("%d %d",&x,&y);
for(dx=–2;dx<=2;dx++){
for(dy=–2;dy<=2;dy++){
int nx=x+dx;
int ny=y+dy;
if(nx>=1&&nx<=n&&ny>=1&&ny<=n){
grid[nx][ny]=1;
}
}
}
}
int cnt=0;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
if(grid[i][j]==0){
cnt++;
}
}
}
printf("%d\\n",cnt);
return 0;
}

知识点总结

1.memset数组清零

memset(grid,0,sizeof(grid));

头文件:#include <string.h>
函数参数顺序固定:memset(数组名,填充字节,总字节数)
作用:快速把数组全部置零,相当于全部格子初始状态:未照亮

替代写法:

for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
grid[i][j]=0;
}
}

2.标记思想
grid[i][j]=1已经照亮
最后只统计为0的数量

赞(0)
未经允许不得转载:171主机测评 » 洛谷P1789插火把题解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址