7 solutions
-
3
#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
`
#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; } //希望我能帮到各位。。 //希望大慈大悲的管理员给过。。
-
1
没啥好讲的就是垃圾暴力呆码
#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
题目解析
有一个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
#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
#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
- 1
Information
- ID
- 899
- Time
- 1000ms
- Memory
- 125MiB
- Difficulty
- 7
- Tags
- # Submissions
- 176
- Accepted
- 46
- Uploaded By