常州大学新生寒假训练会试 B-对称
链接:https://www.nowcoder.net/acm/contest/78/B
来源:牛客网
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
萌新AA喜欢对称,最近她喜欢把棋子放进她的棋盘中,这个棋盘是由 N×M 个格 子构成的(1 <= N <= 1,000,000,000;1<=M<=1,000,000,000) 为了保证对称,AA 会以这样的方式摆放她的棋子。她把棋子放在棋盘正*的方格内, 如果不存在这样的方格,她就会停止。然后她以这个方格为中心把棋盘分成四部分,然后对于每 个小棋盘进行上述的操作。 下面是一个 N=7,M=15 的例子,其中'C'表示棋子
这样子,需要 21个棋子。如果 N=M=5 的话,AA只需要摆放一个棋子,因为分成的四 个小棋盘分别是 2×2 的大小,无法在放进去新的棋子。现在,请你帮助 AA来计算,需要 多少个棋子。
输入描述:
一行两个整数 N,M
输出描述:
一行一个整数,即需要的棋子数
#include<stdio.h>
long fun(long n,long m){
if(n%2==0||m%2==0)
return 0;
return fun(n/2,m/2)*4+1;
}
int main(){
long n,m;
scanf("%ld %ld",&n,&m);
printf("%ld\n",fun(n,m));
return 0;
}