【09年特长生第四题】开发区规划
開發區規劃開發區規劃開發區規劃
題目
小王是D市主管經濟的副市長,由于經濟發展的需要,要在D市組建一個高新技術開發區,經過研究,規劃局在D市的東部劃出了一塊土地作為開發區選址。這塊土地是一塊矩形平原,小王準備在上面修建一些建筑。為了規劃方便,他將矩形劃分成NM格。棘手的是,這塊土地有些歷史文化遺址散布在某些格子內,這些歷史文化遺址是萬萬不能拆除的,否則將激起民憤,小王深知這一點,因此,他的新建筑在選址時要避開這些格子。
假設新的建筑物有P種規格,每種建筑物都是正方形的,占地為TiTi格 (1<=i<=P)。小王想知道對于每種規格的建筑,有多少種不同的合適選址方案(一種合適的選址方案指的是在該建筑所占的正方形區域內不存在有歷史文化遺址的格子)。現在請你來當小王的秘書 幫他完成這個光榮而艱巨的任務。
輸入
從文件d.ind.ind.in讀入數據,輸入文件第一行包含三個數,分別代表N,M,PN,M,PN,M,P (1<=N,M<=2000,1<=P<=1000)(1<=N,M<=2000,1<=P<=1000)(1<=N,M<=2000,1<=P<=1000) 隨后的nnn行,每行有mmm個000或111(111表示該格為空地,000表示該格有歷史文化遺址)。接下來的PPP行每行有一個整數TiTiTi
輸出
結果輸出到文件d.outd.outd.out中,共有PPP行,每行一個整數,第iii行的數代表邊長為TiTiTi的建筑物選址方案數。
輸入樣例
4 4 2 1011 1111 1110 1110 2 3輸出樣例
5 1解題思路
這題我們可以根據樣例來處理
例如:
可以根據其中每個數字代表以該格為右下角,最多可以達成邊長為多少的正方形
然后統計,每種邊長都可以由比它大的邊長的格子達成
程序如下
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm>using namespace std;int n, m, p, k, Max;int a[10001][1001], f[10001][1001], t[10001], b[10001][1001];char x[10001];int main() {scanf("%d%d%d", &n, &m, &p);for(int i = 1; i <= n; ++i){scanf("%s",&x);for(int j = 1; j <= m; ++j)a[i][j] = x[j - 1] - '0';for(int j = 1; j <= m; ++j)if(a[i][j] != 0) f[i][j] = f[i][j - 1] + 1;//統計正方形數量}for(int j = 1; j <= m; ++j)for(int i = 1; i <= n; ++i)if(a[i][j] != 0) b[i][j] = b[i - 1][j] + 1;-for(int i = 1; i <= n; ++i)for(int j = 1; j <= m; ++j)if(a[i][j] != 0){a[i][j] = min(min(a[i - 1][j - 1] + 1, f[i][j]), b[i][j]);//求最優解t[a[i][j]]++;}Max = max(n , m);for(int i = Max - 1; i >= 1; --i)t[i] += t[i + 1];for(int i = 1; i <= p; ++i){scanf("%d", &k);printf("%d\n",t[k]);}return 0; }總結
以上是生活随笔為你收集整理的【09年特长生第四题】开发区规划的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hac 估计 matlab程序,CV算法
- 下一篇: 免费端口映射工具