日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu 5100 n*n棋盘放k*1长方条最多覆盖面积

發布時間:2025/7/25 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 5100 n*n棋盘放k*1长方条最多覆盖面积 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

給一個n*n的棋盤,問用k*1的長方條最多能覆蓋多大的面積(k個單位都必須完全覆蓋上去)


首先,若n<k,則棋盤連一個1×k的矩形都放不下,輸出0。

我們只需要考慮n≥k的情況。將棋盤類似于黑白染色,按(i+j)模k劃分等價類,給每個格子標一個號。
標號之后,會注意到每條從左下到右上的斜線數字都是相同的,那么對于s×s的格子,其內部數字有且恰好有2s?1種,所以當s<=k2的時候,內部數字有floor(k2)?2?1<k種,所以不能有更佳的方案。
從而證明最優的方案一定是僅剩下一個s×s的正方形區域沒有被覆蓋到,其中s≤k/2。
而令l=n % k之后,根據l大小的不同,可以構造出中心為l×l或(k?l)×(k?l)的風車形圖案,又通過上面證明這個l(或k?l)就是之前的s,所以是最優的。
所以令l=n % k,如果l≤k2,最多可覆蓋的格子數即為n^2?l^2,否則為n^2?(k?l)^2,顯然這樣的方案是可以構造出來的(風車形)。

#include <cstdio> #include <cstdlib> #include <cmath> #include <cstring> #include <string> #include <queue> #include <map> #include <iostream> #include <algorithm> using namespace std; #define RD(x) scanf("%d",&x) #define RD2(x,y) scanf("%d%d",&x,&y) #define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z) #define clr0(x) memset(x,0,sizeof(x)) #define clr1(x) memset(x,-1,sizeof(x)) #define eps 1e-9 const double pi = acos(-1.0); typedef long long LL; typedef unsigned long long ULL; const int modo = 1e9 + 7; const int INF = 0x3f3f3f3f; const int inf = 0x3fffffff; const LL _inf = 1e18; const int maxn = 55,maxm = 1<<12; int n,k; int main() {int _;RD(_);while(_--){RD2(n,k);int ans,r = n%k;if(n < k)ans = 0;else if(r <= k/2)ans = n*n - r*r;elseans = n*n - (k-r)*(k-r);//ans = n*n - (n - 2*(n%k))*(n - 2*(n%k));printf("%d\n",ans);}return 0; }

轉載于:https://www.cnblogs.com/zibaohun/p/4106650.html

總結

以上是生活随笔為你收集整理的hdu 5100 n*n棋盘放k*1长方条最多覆盖面积的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。