您的位置:首页 > 大数据 > 人工智能

杂码系列之 Black and white painting hdoj 1802

2014-08-14 17:06 441 查看
 /*

Black and white painting

http://acm.hdu.edu.cn/showproblem.php?pid=1802

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 308    Accepted Submission(s): 218

Problem Description

You are visiting the Centre Pompidou which contains a lot of modern paintings. In particular you notice one painting which consists solely of black and white squares, arranged in rows and columns like in a chess board (no two adjacent squares have the same
colour). By the way, the artist did not use the tool of problem A to create the painting.

Since you are bored, you wonder how many 8 × 8 chess boards are embedded within this painting. The bottom right corner of a chess board must always be white.

 

Input

The input contains several test cases. Each test case consists of one line with three integers n, m and c. (8 ≤ n, m ≤ 40000), where n is the number of rows of the painting, and m is the number of columns of the painting. c is always 0 or 1, where 0 indicates
that the bottom right corner of the painting is black, and 1 indicates that this corner is white.

The last test case is followed by a line containing three zeros.

 

Output

For each test case, print the number of chess boards embedded within the given painting.

 

Sample Input

8 8 0

8 8 1

9 9 1

40000 39999 0

0 0 0

 

Sample Output

0

1

2

799700028

 

Source

HDOJ 2007 Summer Exercise(1)

*/

/*

题意:

将8*8的棋盘嵌入一个长为n,宽为m的方块中,棋盘右下角必须是白色的;

c为0或1。0代表右下角是黑色,1代表右下角是白色;

输入 以n,m,c,均为0结束;

输出  每种情况能嵌入棋盘的个数;

 */

/*
思路 1:

把8*8格子缩为1*1格子,该格子白色就符合,黑色就不符合。

9*9变成 2*2....

类推得.....

n*m即为(n-8+1)*(m-8+1)的格子,然后找格子有多少白色的,就有多少棋盘了。

*/

/*
思路 2:
    由于棋盘的右下角的棋子颜色必须是已定下来的,白色的。而且长宽均为8,

所以右下角的棋子位置的区域是可以定下来的,

    即 (m-7)*(n-7),

   又因为棋盘颜色只有黑白两种,

所以棋子的位区域应该除以二,

   如果是以上的乘积得到偶数的话,

无论右下角是什么颜色都是除以二,但是如果是单数的话,

*/
/*AC1*/
/*

#include<cstdio>

#include<stdlib.h>

int main()

{

 int n,m,c;

 while(scanf("%d%d%d",&n,&m,&c),(m+n+c))

 {

  int p,q;

  p=n-7;

  q=m-7;

  if(!((p*q)&1))

    printf("%d\n",(p*q)/2);

  else

  {

   if(c)

     printf("%d\n",(p*q)/2+1);

       else

      printf("%d\n",(p*q)/2);

  }

 }

 return 0;

}

*/

#include<cstdio>

#include<stdlib.h>

int main()

{

 int n,m,c;

 while(scanf("%d%d%d",&n,&m,&c),(m+n+c))

 {

  int p,q;

  p=n-7;

  q=m-7;

    if((p*q)&1)

      printf("%d\n",(p*q)/2+c);

   else

    printf("%d\n",(p*q)/2);

 }

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm c 数学