题解 P4905 【报纸】
这道题其实顶天黄题真没蓝题内味
也许是我太菜只会暴力吧。
先说说我的做法其实跟楼上的做法大差不差
First:建议一个f二维数组,一个ans=0,一个n;
Second:暴力循环开找,记录GCD!=1的位置,用到了一个函数GCD,用法如下
GCD:头文件algorithm(其实背不到就把所有的都写出来就行了)
格式:__gcd(i,j) 下划线不能少 返回的值即i与j的最大公因数。好了,科普完了。
Third:再次暴力开找把记录了的位置改为找过,然后找它的四方有就变找过不加一,第一次加一。
其实我觉得这道题是题目描述的问题,我也认为要加。
Fourth 提交AC
上代码了
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
bool f[1000][1000];
int ans=0;
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(__gcd(i,j)!=1)f[i][j]=1;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(f[i][j]==1)
{
f[i][j]=0;
ans++;
if(f[i+1][j]==1)f[i+1][j]=0;
if(f[i][j+1])f[i][j+1]=0;
if(f[i-1][j])f[i][j-1]=0;
if(f[i][j-1])f[i][j-1]=0;
}
}
}
cout<<ans;
}