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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[暴力]餐桌

發布時間:2024/3/13 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [暴力]餐桌 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

你家剛買了一套新房,想邀請朋友回來慶祝,所以需要一個很大的舉行餐桌,餐桌能容納的人數等于餐桌的周長,你想買一個能容納最多人的餐桌,餐桌的邊必須跟房間的邊平行。
給你的房間的設計,計算最多能邀請的客人數。

Input

第一行包含兩個整數R和C(1<=R,C<=2000),表示房子的長和寬。
接下來R行每行S個字符(中間沒有空格),“.”表示空白區域,“X”表示有障礙物,餐桌所占區域必須是空白的。

Output

輸出最多能要求的客人數量。

Sample Input

輸入1:
2 2
..
..

輸入2:
4 4
X.XX
X..X
..X.
..XX

輸入3:
3 3
X.X
.X.
X.X

Sample Output

輸出1:
7

輸出2:
9

輸出3:
3

Data Constraint

Hint

【數據規模】
50%的數據R,C<=400
70%的數據R,C<=1000
100%的數據,R,C<=2000

分析

這題相當奇妙,其實只用搞一個前綴和然后暴力枚舉開始點,然后取最大值(具體為什么不超時我也不知道,我也很難講清,看程序吧)
時間復雜度分攤:O(kn^2)(k是數據中橫向間隔的最大數)

#include <iostream> #include <cstdio> #define rep(i,a,b) for (i=a;i<=b;i++) using namespace std; int r,c; int f[2001][2001]; void init() {int i,j;char q;scanf("%d%d",&r,&c);rep(i,1,r)rep(j,1,c){do{scanf("%c",&q);}while (q!='.'&&q!='X');if (q!='X') f[i][j]=f[i-1][j]+1;} } void doit() {int i,j,k,s,ans=0;rep(i,1,r)rep(j,1,c){s=f[i][j];k=j+1;while (f[i][k]!=0&&k<=c){ans=max(ans,(s+k-j)*2-1);s=min(s,f[i][k]);k++;}ans=max(ans,(s+k-j)*2-1);}printf("%d",ans); } int main() {init();doit(); }

總結

以上是生活随笔為你收集整理的[暴力]餐桌的全部內容,希望文章能夠幫你解決所遇到的問題。

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