考慮計算每個畫素的貢獻,如果對影象每個可能位置進行列舉,則時間複雜度為o(n
mab)
o(nmab)
o(nmab
),因此需要考慮字首和。
對於某一行,前b−m
+1
b-m+1
b−m+
1列的貢獻可直接由字首和求出,因為對於第j
jj列,其等概率可能地被影象第1
11到j
jj列覆蓋,而對於後m−1
m-1m−
1列,它不可能被影象的第1
11到j−(
b−m+
1)
j-(b-m+1)
j−(b−m
+1)列覆蓋,因此需要減去相應的貢獻。
同理,對於某一列,前a−n
+1
a-n+1
a−n+
1行的貢獻可直接由字首和求出;而後面的n−1
n-1n−
1列也需要減去相應的貢獻。
那麼我們可以定義乙個初始陣列表示影象未考慮減去貢獻前的字首和,然後用另一陣列進行相應的計算即可,最後將最大值作為基準轉換為百分數。時間複雜度o(a
b)
o(ab)
o(ab).
**:
#include
#include
using
namespace std;
int n,m,a,b;
int maximum;
int t[
3841][
2161];
int map[
3841][
2161];
intmain()
for(
int j = b - m +
2;j <= b;j ++
) t[i]
[j]-
= map[i]
[j -
(b - m +1)
];for(
int j =
1;j <= b;j ++)}
for(
int i = a - n +
2;i <= a;i ++
)for
(int j =
1;j <= b;j ++
) t[i]
[j]-
= map[i -
(a - n +1)
][j]
;for
(int i =
1;i <= a;i ++
)for
(int j =
1;j <= b;j ++
) maximum =
max(maximum,t[i]
[j])
;for
(int i =
1;i <= a;i ++
)return0;
}
Block Voting 解題報告
這道題做的有點狼狽,效率不高,差一點就tle的ac了。看status裡的,ac的時間大多數都是0ms的。肯定有乙個更有效率的演算法的。下面說下我的狼狽演算法。出處 http acm.jlu.edu.cn joj showproblem.php?pid 1223 問題描述 求每個party的權值。第i...
Safebreaker 解題報告
又是吉林大學一道acm題目,題目很簡單,直接暴力解決。出處 http acm.jlu.edu.cn joj showproblem.php?pid 1718 問題描述 對乙個給定數0000 9999 根據一系列猜測,判斷這個數是否存在,存在的話,是否唯一 例如 3321,給定數 作出猜測,1223 ...
路由 解題報告
路由 問題描述 有乙個tcp ip網路 每台計算機都有乙個或多個網路介面。每個介面根據它的ip位址和子網掩碼來識別 即兩個4位元組的數,兩個字 節之間有乙個 號.子網掩碼有乙個二進位制表示法 有k個 1 然 後是 m 個 0 k m 8 4 32 如 212.220.35.77 是乙個 ip 地 址...