生活随笔
收集整理的這篇文章主要介紹了
开发区规划
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Description
小王是D市主管經濟的副市長,由于經濟發展的需要,要在D市組建一個高新技術開發區,經過研究,規劃局在D市的東部劃出了一塊土地作為開發區選址。這塊土地是一塊矩形平原,小王準備在上面修建一些建筑。為了規劃方便,他將矩形劃分成NM格。棘手的是,這塊土地有些歷史文化遺址散布在某些格子內,這些歷史文化遺址是萬萬不能拆除的,否則將激起民憤,小王深知這一點,因此,他的新建筑在選址時要避開這些格子。
假設新的建筑物有P種規格,每種建筑物都是正方形的,占地為TiTi格 (1<=i<=P)。小王想知道對于每種規格的建筑,有多少種不同的合適選址方案(一種合適的選址方案指的是在該建筑所占的正方形區域內不存在有歷史文化遺址的格子)。現在請你來當小王的秘書 幫他完成這個光榮而艱巨的任務。
Input
從文件d.in讀入數據,輸入文件第一行包含三個數,分別代表N,M,P (1<=N,M<=2000,1<=P<=1000)。隨后的n行,每行有m個0或1(1表示該格為空地,0表示該格有歷史文化遺址)。接下來的P行每行有一個整數Ti (1
Output
結果輸出到文件d.out中,共有P行,每行一個整數,第i行的數代表邊長為Ti的建筑物選址方案數。
Sample Input
4 4 2
1011
1111
1110
1110
2
3
Sample Output
5
1
.
.
.
.
.
分析
對于這樣一個城市
1011
1111
1110
1110
我們想辦法把它處理成
1011
1112
1220
1230
其中每個數字代表以該格為右下角,最多可以達成邊長為多少的正方形。然后統計,每種邊長都可以由比它大的邊長的格子達成。
.
.
.
.
.
程序:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;int n,m,p,f[2010][2010],b[2010][2010],c[2010][2010],tj[2010],maxx;int main()
{freopen("d.in","r",stdin);freopen("d.out","w",stdout);scanf("%d%d%d",&n,&m,&p);for (int i=1;i<=n;i++){char zf[m+3];scanf("%s",&zf);for (int j=1;j<=m;j++)f[i][j]=zf[j-1]-'0';for (int j=1;j<=m;j++)if (f[i][j]!=0) b[i][j]=b[i][j-1]+1;}for (int j=1;j<=m;j++)for (int i=1;i<=n;i++)if (f[i][j]!=0) c[i][j]=c[i-1][j]+1;for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)if (f[i][j]!=0){f[i][j]=min(min(f[i-1][j-1]+1,b[i][j]),c[i][j]);tj[f[i][j]]++;}int maxx=max(n,m);for (int i=maxx-1;i>=1;i--)tj[i]+=tj[i+1];for (int i=1;i<=p;i++){int t;scanf("%d",&t);printf("%d\n",tj[t]);}fclose(stdin);fclose(stdout);return 0;
}
轉載于:https://www.cnblogs.com/YYC-0304/p/11094913.html
總結
以上是生活随笔為你收集整理的开发区规划的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。