蒟蒻求助
  • 板块学术版
  • 楼主lukoh_sen
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/12/25 14:15
  • 上次更新2023/10/24 06:40:30
查看原帖
蒟蒻求助
752790
lukoh_sen楼主2022/12/25 14:15

/* 农场主约翰喜爱对称的事物,眼下他准备把他牧场里的牛放置到NM(1 <= N <= 1,000,000,000; 1 <= M <= 1,000,000,000)的格子里。为了保持对称性,他用下面的方法放置牛。先放一只牛到牧场的中心格子,如果没有这样的中心格子,他就停止他放置的工作。然后他将牧场分割成四个相同大小的区域(这四个区域被正中心的那只牛所在的行和列所分隔),并将牛用上面的方法安排到四个区域中。他不断地重复着他的分割直到没有中心方格存在或者牧场不能再被细分为止。看下面的例子,如果N=7,M=15,那么约翰将在第4行,第8列放置一头牛并且将牧场分割成四个37的区域。在每一个37的区域的第2行,第4列放置一头牛,并且再将每个区域分割成四个13的区域。放置的过程如下所示(C代表一只牛):

............... ............... .......|....... .C.|.C.|.C.|.C. ............... ............... ...C...|...C... ---C---|---C--- ............... ............... .......|....... .C.|.C.|.C.|.C. ............... -> .......C....... -> -------C------- -> -------C------- ............... ............... .......|....... .C.|.C.|.C.|.C. ............... ............... ...C...|...C... ---C---|---C--- ............... ............... .......|....... .C.|.C.|.C.|.C. 这个牧场必须放置21头牛。另一个例子,如果N=M=5,约翰只需要放置一头牛,因为分割后的四个2*2的区域没有中心格子了。帮助约翰确定他需要在他的牧场里放置多少头牛。 */

using namespace std;
int n,m;
int Farm(int a,int b){
	if(a%2==0||b%2==0){
		return 0;
	}
	else{
		return 1+4*Farm(a/2,b/2);
	}
}
int main(){
	cin>>n>>m;
	cout<<Farm(n,m)<<endl;
	return 0;
} ```




//这是正确代码,但是没理解return 1+4*Farm(a/2,b/2);的意思
2022/12/25 14:15
加载中...