您的位置:首页 > 其它

hdoj 5100 Chessboard (思维规律)

2016-08-22 14:08 267 查看

Chessboard

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

Total Submission(s): 1086    Accepted Submission(s): 463


[align=left]Problem Description[/align]
Consider the problem of tiling an n×n chessboard by polyomino pieces that are k×1 in size; Every one of the k pieces of each polyomino tile must align exactly with one of the chessboard squares. Your task is to figure out the maximum
number of chessboard squares tiled.
 

[align=left]Input[/align]
There are multiple test cases in the input file.

First line contain the number of cases T (T≤10000).

In the next T lines contain T cases , Each case has two integers n and k. (1≤n,k≤100)
 

[align=left]Output[/align]
Print the maximum number of chessboard squares tiled.
 

[align=left]Sample Input[/align]

2
6 3
5 3

 

[align=left]Sample Output[/align]

36
24

 

[align=left]Source[/align]
BestCoder Round #17

 
题意:在一个n*n的网格中放1*k大小的瓷片,问可以放置的最大小网格数是多少 
思维探索
1)n<k一定不能放
2)r=n%k:
r<=k/2时,现横着放,最后r列竖着放,最后只剩r*r的小方格不能放
r>k/2时,现横着放,最后r+k的方格中按风车形状放,最后只剩(k-r)*(k-r)的方格不能放
#include<cstdio>
int main()
{
int t,n,k;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
int ans;
if(n<k)
ans=0;
else
{
int r=n%k;
if(r<=k/2)
ans=n*n-r*r;
else
ans=n*n-(k-r)*(k-r);
}
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: