UVa 696 - How Many Knights

来源:互联网 发布:蚁群算法改进 编辑:程序博客网 时间:2024/05/01 06:01

题目:求棋盘上最多能放几个马。

分析:简单题、构造。分三类情况讨论:1.min(n,m) = 1,则摆放max(n,m);2.min(n,m) = 2,则每2*2个为一组,奇数组填满偶数组放空;3.其他,按照行列加和的奇偶性放入相同奇偶性的格子必不冲突,即(m*n+1)/2。

注意:当答案 <= 1 时 也要用复数 。

#include <stdio.h>#include <stdlib.h>#include <string.h>int f( int n, int m ){if ( n < m ) return f( m, n );if ( m == 1 ) return n;if ( m == 2 ) return n/4*4+(n%4<3?n%4:2)*2;return (n*m+1)/2;}int main(){int n,m;while ( scanf("%d%d",&n,&m) && n+m ) {int ans = f(n,m);printf("%d ",ans);if ( ans > 1 ) printf("knights"); else printf("knights"); printf(" may be placed on a %d row %d column board.\n",n,m);}return 0;}


原创粉丝点击