Problem:Cow Art
Description
一个有关奶牛的鲜为人知的事实是她们都是红绿色盲,也就是说,在她们看来,红色和绿色是一样的(译者注:奶牛把这种颜色称作“红绿色”)。这使得我们设计的艺术作品难以同时符合人类和奶牛的审美口味。考虑一个由N x N格字符表示的方形绘画作品,其中每个字符为R(红),G(绿)或者B(蓝)。一幅绘画如果有许多互不相同的着色“区域”,则我们认为它是有趣的。如果两个字符是直接相邻的(一个在另一个的东、南、西、北方向)且其表示的颜色相同,则这两个字符属于同一个区域。例如,下面这幅绘画作品:
RRRBB
GGBBB
BBBRR
BBRRR
RRRRR
如果由人类来看有4个区域(2个红色,1个蓝色和1个绿色区域),而如果由奶牛来看则只有3个区域(2个红绿色,1个蓝色区域)。现给你一副绘画作为输入,请计算该作品由人类和奶牛来看分别有多少个区域。
Input
第1行:整数N。
第2,1+N行:每行包含一个长度为N的字符串,表示绘画作品的一行。
Output
第1行:两个空格隔开的整数,分别给出由人类和奶牛欣赏绘画作品时会看见多少个区域。
Sample Input
5
RRRBB
GGBBB
BBBRR
BBRRR
RRRRR
Sample Output
4 3
重点的内容我给大家加黑了,它就是一道简单的搜索,分两次,人和奶牛(好无聊的题啊),所以应该这样搜索,代码理解:
#include<bits/stdc++.h>//可爱的万能头
using namespace std;
const int maxdep=10;
const int INF=0x7fffffff;//这个是无限大(备注一下)
int dep,found,fm[10],ans[10];
int g(int a,int b)
{
return b?g(b,a%b):a;//好像是绝对值(我记得应该是)
}
void dfs(int a,int b,int k)
{
if(k==dep+1) return;//如果超了返回
if(b%a==0&&b/a>fm[k-1])
{
fm[k]=b/a;//存储
if(!found||ans[k]>fm[k])
memcpy(ans,fm,sizeof(fm));//复制一个给另外的看
found=1;
return;
}
int s=b/a;
if(s<=fm[k-1])
s=fm[k-1]+1;
int t=(dep-k+1)*b/a;
if(t>INF/b)
t=INF/b;
for(int i=s;i<=t;i++)
{
fm[k]=i;
int d=g(a*i-b,b*i);
dfs((a*i-b)/d,(b*i)/d,k+1);//继续搜索
}
}
int main()
{
fm[0]=1;
found=0;
int a,b;
cin>>a>>b;
for(dep=1;dep<=maxdep;dep++)
{
dfs(a,b,1);
if(found)//判断
{
for(int j=1;j<=dep;j++)
{
cout<<ans[j];
if(j!=dep) cout<<" ";//输出
}
break;
}
}//好像又忘了打return 0;
}
今天不想讲大道理了,大家都懂:
#include<bits/stdc++.h>
using namespace std;
const int maxdep=10;
const int INF=0x7fffffff;
int dep,found,fm[10],ans[10];
int g(int a,int b)
{
return b?g(b,a%b):a;
}
void dfs(int a,int b,int k)
{
if(k==dep+1) return;
if(b%a==0&&b/a>fm[k-1])
{
fm[k]=b/a;
if(!found||ans[k]>fm[k])
memcpy(ans,fm,sizeof(fm));
found=1;
return;
}
int s=b/a;
if(s<=fm[k-1])
s=fm[k-1]+1;
int t=(dep-k+1)*b/a;
if(t>INF/b)
t=INF/b;
for(int i=s;i<=t;i++)
{
fm[k]=i;
int d=g(a*i-b,b*i);
dfs((a*i-b)/d,(b*i)/d,k+1);
}
}
int main()
{
fm[0]=1;
found=0;
int a,b;
cin>>a>>b;
for(dep=1;dep<=maxdep;dep++)
{
dfs(a,b,1);
if(found)
{
for(int j=1;j<=dep;j++)
{
cout<<ans[j];
if(j!=dep) cout<<" ";
}
break;
}
}
}
爱你们哦!!!