7 solutions

  • 3
    @ 2023-12-23 12:35:57
    #include<bits/stdc++.h>
    using namespace std;
    int n,m,k,x,y,o,p,ans=0;
    int dx1[13]={2,0,-2,0,1,1,1,0,0,0,-1,-1,-1},dy1[13]={0,2,0,-2,0,1,-1,1,0,-1,0,1,-1};
    int dx2[25]={-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,0,0,0,0,0,1,1,1,1,1,2,2,2,2,2};
    int dy2[25]={-2,-1,0,1,2,-2,-1,0,1,2,-2,-1,0,1,2,-2,-1,0,1,2,-2,-1,0,1,2};
    int main(){
    cin>>n>>m>>k;
    int a[n+5][n+5];
    memset(a,0,sizeof(a));
    for(int i=1;i<=m;i++){
    cin>>x>>y;
    for(int j=0;j<13;j++)
    a[x+dx1[j]][y+dy1[j]]=1;
    }
    for(int i=1;i<=k;i++){
    cin>>o>>p;
    for(int j=0;j<25;j++)
    a[o+dx2[j]][p+dy2[j]]=1;
    }
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++) if(a[i][j]==0) ans++;
    cout<<ans<<endl;
    return 0;
    }
    
    • 3
      @ 2023-10-2 10:02:02

      `

      #include <bits/stdc++.h> 
      using namespace std;
      int n, m, k, a, b, ans;
      int s[5005][5005];
      bool pd(int x, int y) { //判断是否越界 
          if(x < 1 || y < 1 || x > n || y > n) return 0;
          return 1;
      }
      int main() {
          scanf("%d%d%d", &n, &m, &k); //读入 
          for(int i = 1; i <= m + k; i++) { //由于计算火把和萤石的步骤很像,所以合并了 
              scanf("%d%d", &a, &b); //读入坐标 
              for(int x = -2; x <= 2; x++)
                  for(int y = -2; y <= 2; y++) //枚举5*5的方阵(通过计算距离) 
                      if((i > m || abs(x) + abs(y) <= 2) && pd(x + a, b + y))
                      //如果是萤石(i > m)或者x与y的坐标差的和不超过2(想一想为什么)并且
                      //没有越界就标记 
                          s[x + a][b + y]++;
          }
          for(int i = 1; i <= n; i++)
              for(int j = 1; j <= n; j++)
                  ans += s[i][j] == 0; //枚举每一个方格,看看是不是==0(即没有亮光) 
          printf("%d\n", ans); //输出结果 
          return 0;
      }
      //希望我能帮到各位。。 
      //希望大慈大悲的管理员给过。。
      
      • @ 2023-10-5 11:00:43

        x与y的坐标差的和(火把):

        4 3 2 3 4

        3 2 1 2 3

        2 1 0 1 2

        3 2 1 2 3

        4 3 2 3 4

      • @ 2023-12-23 12:36:23

        你这是洛谷上抄的吧

    • 1
      @ 2025-2-2 21:13:55

      没啥好讲的就是垃圾暴力呆码

      #include<bits/stdc++.h>
      using namespace std;
      unsigned short n,touch,glowstone,x,y;
      int main(){
         cin>>n>>touch>>glowstone;
         unsigned short sum=n*n;
         unsigned short space[n+3][n+3]={0};
         for(unsigned short i=1;i<=touch;i++){
            cin>>x>>y;
            space[x-2][y]=1;
      
            space[x-1][y-1]=1;
            space[x-1][y]=1;
            space[x-1][y+1]=1;
      
            space[x][y-2]=1;
            space[x][y-1]=1;
            space[x][y]=1;
            space[x][y+1]=1;
            space[x][y+2]=1;
      
            space[x+1][y-1]=1;
            space[x+1][y]=1;
            space[x+1][y+1]=1;
      
            space[x+2][y]=1;}
         for(unsigned short i=1;i<=glowstone;i++){
            cin>>x>>y;
            space[x-2][y-2]=1;
            space[x-2][y-1]=1;
            space[x-2][y]=1;
            space[x-2][y+1]=1;
            space[x-2][y+2]=1;
      
            space[x-1][y-2]=1;
            space[x-1][y-1]=1;
            space[x-1][y]=1;
            space[x-1][y+1]=1;
            space[x-1][y+2]=1;
      
            space[x][y-1]=1;
            space[x][y-2]=1;
            space[x][y]=1;
            space[x][y+1]=1;     
            space[x][y+2]=1;
      
            space[x+1][y-1]=1;
            space[x+1][y-2]=1;     
            space[x+1][y]=1;
            space[x+1][y+1]=1;
            space[x+1][y+2]=1;
      
            space[x+2][y-1]=1;
            space[x+2][y-2]=1;
            space[x+2][y]=1;     
            space[x+2][y+1]=1;
            space[x+2][y+2]=1;}
            for(unsigned short i=1;i<=n;i++){
               for(unsigned short j=1;j<=n;j++){
                  if(space[i][j]==1) sum--;}
            }
            cout<<sum;
         return 0;
      }
      
      • 0
        @ 2024-10-16 16:59:44

        题目解析

        有一个n*n的地图 有m个火把,k个萤石。 萤石照亮周围5*5的大小,火把照亮竖列5个,横列5个,再照亮周围3*3的空间。 只需要创建一个二维数组,把每个火把和萤石照亮的地方标记,最后算没有被标记的地方数量即可。

        for(int i=0;i<m;i++){//输入火把
            cin>>x>>y;//火把的坐标
            x--;
            y--;
            for(int j=x-2;j<=x+2;j++){//遍历列
                for(int k=y-2;k<=y+2;k++){//遍历行
                    if(j==x||k==y)arr[j][k]=1;//十字形
                }
            }//没被照亮却需要照亮的地方
            arr[x-1][y-1]=1;
            arr[x+1][y-1]=1;
            arr[x-1][y+1]=1;
            arr[x+1][y+1]=1;
        }
        for(int i=0;i<k;i++){//输入萤石
            cin>>x>>y;
              x--;
              y--;
              for(int j=x-2;j<=x+2;j++){//5*5区域点亮
                  for(int k=y-2;k<=y+2;k++){
                      arr[j][k]=1;
                  }
              }
          }
          int e=0;
          for(int i=0;i<n;i++){
              for(int j=0;j<n;j++){
                  if(arr[i][j]==0){
                      e++;//计算没被点亮的部分
                  }
              }
          }
        }
        
        • 0
          @ 2023-10-5 14:10:15
          #include<bits/stdc++.h>
          using namespace std;
          int huobax[18]={1,2,-1,-2,0,1,1,-1,-1,0,0,0,0};
          int huobay[18]={0,0,0,0,0,1,-1,1,-1,1,2,-1,-2};
          int yingshiy[35]={2,2,2,2,2,1,1,1,1,1,0,0,0,0,0,-1,-1,-1,-1,-1,-2,-2,-2,-2,-2};
          int yingshix[35]={1,2,0,-1,-2,1,2,0,-1,-2,1,2,0,-1,-2,1,2,0,-1,-2,1,2,0,-1,-2};
          int arr[110][110];
          int main(){
          	int n,m,k,ans=0;
          	cin>>n>>m>>k;
          	for(int i=5;i<m+5;i++){
          		int x,y;
          		cin>>x>>y;
          		for(int i=0;i<13;i++) arr[x+huobax[i]+4][y+huobay[i]+4]=1;
          	}
          	for(int i=5;i<k+5;i++){
          		int x,y;
          		cin>>x>>y;
          		for(int i=0;i<25;i++) arr[x+yingshix[i]+4][y+yingshiy[i]+4]=1;
          	}
          	for(int i=5;i<n+5;i++)
          		for(int j=5;j<n+5;j++) if(arr[i][j]==0) ans++;
          	cout<<ans;
          	return 0;
          }
          
          • 0
            @ 2023-10-5 10:05:07

            #include<bits/stdc++.h> using namespace std; int huobax[18]={1,2,-1,-2,0,1,1,-1,-1,0,0,0,0}; int huobay[18]={0,0,0,0,0,1,-1,1,-1,1,2,-1,-2}; int yingshiy[35]={2,2,2,2,2,1,1,1,1,1,0,0,0,0,0,-1,-1,-1,-1,-1,-2,-2,-2,-2,-2}; int yingshix[35]={1,2,0,-1,-2,1,2,0,-1,-2,1,2,0,-1,-2,1,2,0,-1,-2,1,2,0,-1,-2}; int arr[110][110]; int main(){ int n,m,k,ans=0; cin>>n>>m>>k; for(int i=5;i<m+5;i++){ int x,y; cin>>x>>y; for(int i=0;i<13;i++) arr[x+huobax[i]+4][y+huobay[i]+4]=1; } for(int i=5;i<k+5;i++){ int x,y; cin>>x>>y; for(int i=0;i<25;i++) arr[x+yingshix[i]+4][y+yingshiy[i]+4]=1; } for(int i=5;i<n+5;i++) for(int j=5;j<n+5;j++) if(arr[i][j]==0) ans++; cout<<ans; return 0; }

            • -3
              @ 2024-10-15 20:03:47
            • 1

            Information

            ID
            899
            Time
            1000ms
            Memory
            125MiB
            Difficulty
            7
            Tags
            # Submissions
            176
            Accepted
            46
            Uploaded By