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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

UVa 1393 (容斥原理、GCD) Highways

發布時間:2025/5/22 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UVa 1393 (容斥原理、GCD) Highways 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:

給出一個n行m列的點陣,求共有多少條非水平非豎直線至少經過其中兩點。

分析:

首先說紫書上的思路,編程較簡單且容易理解。由于對稱性,所以只統計“\”這種線型的,最后乘2即是答案。

枚舉斜線包圍盒的大小,如果盒子的長寬ab互質,則是可以的。這種盒子共有(m-a)(n-b)個,但要減去其中重復的。如果有一個長寬為2a和2b的大盒子,則計數右下角的小盒子的同時,左上角的小盒子會重復,所以要減去重復的盒子的個數c = max(0, m-2a) * max(0, n-2b)

最后gcd(a, b)的值是要預處理的

1 #include <cstdio> 2 #include <algorithm> 3 4 const int maxn = 300; 5 int gcd[maxn+10][maxn+10]; 6 7 int GCD(int a, int b) 8 { 9 return b == 0 ? a : GCD(b, a%b); 10 } 11 12 int main() 13 { 14 for(int i = 1; i <= maxn; ++i) 15 for(int j = 1; j <= i; ++j) 16 gcd[i][j] = gcd[j][i] = GCD(i, j); 17 18 int n, m; 19 while(scanf("%d%d", &n, &m) == 2 && n) 20 { 21 int ans = 0; 22 for(int a = 1; a <= n; ++a) 23 for(int b = 1; b <= m; ++b) 24 if(gcd[a][b] == 1) 25 { 26 int c = std::max(0, n-a*2) * std::max(0, m-b*2); 27 ans += (n-a)*(m-b) - c; 28 } 29 30 printf("%d\n", ans * 2); 31 } 32 33 return 0; 34 } 代碼君

?

解法二:

解法轉自UVA 1393 - Highways (容斥原理計數)

dp(i, j)表示在長寬為ij的盒子中,從左上角最多能連多少條不重復的直線。

可以根據容斥原理遞推dp(i, j) = dp(i-1, j) + dp(i, j-1) - dp(i-1, j-1) + (gcd(i, j) = 1) (因為盒子兩邊長互質的時候,才能連出一條新邊出來)

最后答案ans遞推的形式也是一樣的,但重復的連線是那些縮小兩倍后仍存在的直線

ans(i, j) = ans(i-1, j) + ans(i, j-1) - ans(i-1, j-1) + dp(i, j) - dp(i/2, j/2)

最后代碼中,本想著只計算一半答案會快一點,結果排名21,登榜失敗。

1 #include <cstdio> 2 #include <algorithm> 3 4 const int maxn = 300; 5 int dp[maxn+1][maxn+1], ans[maxn+1][maxn+1]; 6 7 int gcd(int a, int b) 8 { 9 return b == 0 ? a : gcd(b, a%b); 10 } 11 12 void Init() 13 { 14 for(int i = 1; i <= maxn; ++i) 15 for(int j = 1; j <= i; ++j) 16 { 17 if(i == j) dp[i][j] = dp[i][j-1] * 2 - dp[i-1][j-1] + (gcd(i, j) == 1); 18 else dp[i][j] = dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1] + (gcd(i, j) == 1); 19 } 20 21 for(int i = 1; i <= maxn; ++i) 22 for(int j = 1; j <= i; ++j) 23 { 24 if(i == j) ans[i][j] = ans[i][j-1] * 2 - ans[i-1][j-1] + dp[i][j] - dp[i/2][j/2]; 25 else ans[i][j] = ans[i][j-1] + ans[i-1][j] - ans[i-1][j-1] + dp[i][j] - dp[i/2][j/2]; 26 } 27 } 28 29 int main() 30 { 31 Init(); 32 int n, m; 33 while(scanf("%d%d", &n, &m) == 2 && n) 34 { 35 if(n < m) std::swap(n, m); 36 printf("%d\n", ans[n-1][m-1]*2); 37 } 38 39 return 0; 40 } 代碼君

?

轉載于:https://www.cnblogs.com/AOQNRMGYXLMV/p/4199686.html

總結

以上是生活随笔為你收集整理的UVa 1393 (容斥原理、GCD) Highways的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲AV无码国产精品播放在线 | 久久久综合色 | 免费看污片的网站 | 69性视频 | 最近日韩中文字幕中文 | 国产精品白丝喷水在线观看 | 中国女人黄色大片 | 福利电影一区 | 熟女一区二区三区视频 | 日本午夜一区二区三区 | 国产久一 | wwwxxx日本 | 国产一区二区三区免费 | 成人自拍偷拍 | 午夜丁香婷婷 | 91在线超碰 | 亚洲精品 欧美 | 永久中文字幕 | 亚洲成人久久久久 | 波多野结衣在线免费观看视频 | 国产欧美久久久久久 | 日韩欧美精品一区二区三区 | 伊人久久成人网 | 中国一级特黄录像播放 | 欧美性视频一区二区 | 久久av导航 | 一本久道久久综合 | 欧美成人做爰猛烈床戏 | 日韩夫妻性生活 | 欧洲免费毛片 | 中文字幕免费在线 | 天堂欧美城网站 | 先锋影音一区二区 | 日本高清视频www夜色资源 | a猛片| 2020亚洲天堂 | 日本三级免费 | 亚洲视频网站在线观看 | 性xx紧缚网站 | 国产精品xxxxx | av一级| 中文高清av| 欧美日韩亚洲国产另类 | 日韩h在线 | 欧美做爰xxxⅹ性欧美大片 | 我不卡一区二区 | 国产激情一区二区三区视频免樱桃 | 亚洲第一视频网站 | 日韩电影中文字幕 | 美女扒开尿口给男人看 | 日韩精品国产一区 | 18在线观看视频 | 亚洲精品国产精品乱码桃花 | 97久久久久久久久久 | 嫩草视频91 | 中文字幕中文字幕 | 五月天综合婷婷 | 日韩av在线天堂 | 美女脱了内裤喂我喝尿视频 | 好看的黄色网址 | 极品少妇网站 | 欧美香蕉 | 超碰狠狠操 | 久久依人网 | 天天天色综合 | 熟女视频一区二区三区 | 成人av动漫在线观看 | 精品综合 | 天干夜天干天天天爽视频 | 老熟妇高潮一区二区三区 | 97国产高清 | 高清av网址 | 国产私人影院 | 91一区二区三区四区 | 李宗瑞91在线正在播放 | 秋霞av鲁丝片一区二区 | 亚洲福利社| 国产又黄又爽又色 | 欧美日韩资源 | 小说肉肉视频 | 久久综合精品国产二区无码不卡 | 天天综合天天 | 久久涩涩| 国产一区二区三区播放 | 亚洲精品一区三区三区在线观看 | 看av网| 一区二区三区在线视频观看 | 蜜桃精品视频在线 | 日韩精品――中文字幕 | 九九在线视频 | 国产福利专区 | 日韩 欧美 综合 | 俄罗斯厕所偷拍 | 国产精品久久久影院 | www.久久av.com | 国产福利一区二区三区在线观看 | 538国产精品一区二区免费视频 | 国产精品一区二区三区四区 | 91欧美亚洲 |