https://codeforces.com/gym/253910/problem/Dios
The first algorithm for detecting a face on the image working in realtime was developed by Paul Viola and Michael Jones in 2001. A part of the algorithm is a procedure that computes Haar features. As part of this task, we consider a simplified model of this concept.ide
Let's consider a rectangular image that is represented with a table of size n × m. The table elements are integers that specify the brightness of each pixel in the image.ui
A feature also is a rectangular table of size n × m. Each cell of a feature is painted black or white.this
To calculate the value of the given feature at the given image, you must perform the following steps. First the table of the feature is put over the table of the image (without rotations or reflections), thus each pixel is entirely covered with either black or white cell. The value of a feature in the image is the value of W - B, where W is the total brightness of the pixels in the image, covered with white feature cells, and Bis the total brightness of the pixels covered with black feature cells.spa
Some examples of the most popular Haar features are given below.code
Your task is to determine the number of operations that are required to calculate the feature by using the so-called prefix rectangles.orm
A prefix rectangle is any rectangle on the image, the upper left corner of which coincides with the upper left corner of the image.blog
You have a variable value, whose value is initially zero. In one operation you can count the sum of pixel values at any prefix rectangle, multiply it by any integer and add to variable value.three
You are given a feature. It is necessary to calculate the minimum number of operations required to calculate the values of this attribute at an arbitrary image. For a better understanding of the statement, read the explanation of the first sample.ip
The first line contains two space-separated integers n and m (1 ≤ n, m ≤ 100) — the number of rows and columns in the feature.
Next n lines contain the description of the feature. Each line consists of m characters, the j-th character of the i-th line equals to "W", if this element of the feature is white and "B" if it is black.
Print a single number — the minimum number of operations that you need to make to calculate the value of the feature.
6 8
BBBBBBBB
BBBBBBBB
BBBBBBBB
WWWWWWWW
WWWWWWWW
WWWWWWWW
2
3 3
WBW
BWW
WWW
4
3 6
WWBBWW
WWBBWW
WWBBWW
3
4 4
BBBB
BBBB
BBBB
BBBW
4
The first sample corresponds to feature B, the one shown in the picture. The value of this feature in an image of size 6 × 8 equals to the difference of the total brightness of the pixels in the lower and upper half of the image. To calculate its value, perform the following two operations:
Thus, all the pixels in the lower three rows of the image will be included with factor 1, and all pixels in the upper three rows of the image will be included with factor 1 - 2 = - 1, as required.
題目大意:
給出一個n*m的棋盤,每一個小方格都是白色或者黑色,要計算白色格子的個數減去黑色格子個數的結果
給出一個操做:每次操做能夠選擇一個方格,而後計算它的前綴方格的個數乘以一個係數的結果。
問要獲得最終答案,至少進行幾回操做
題解:
從後往前枚舉,即n->1,m->1,每當發現一個白色的格子不是1,或者黑色的格子不是-1,就將它以及它的前綴矩陣加上相應的值,使當前格子的值變成相應的1或者-1
複雜度爲O(n^4)
#include<iostream> #include<cstdio> #include<cstring> #define maxn 110 using namespace std; int n,m,a[maxn][maxn],ans; char s[maxn][maxn]; int main(){ // freopen("Cola.txt","r",stdin); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%s",s[i]+1); for(int i=n;i>=1;i--){ for(int j=m;j>=1;j--){ if(s[i][j]=='W'&&a[i][j]!=1){ int add=1-a[i][j]; ans++; for(int x=i;x>=1;x--) for(int y=j;y>=1;y--) a[x][y]+=add; } else if(s[i][j]=='B'&&a[i][j]!=-1){ int add=-1-a[i][j]; ans++; for(int x=i;x>=1;x--) for(int y=j;y>=1;y--) a[x][y]+=add; } } } printf("%d\n",ans); return 0; }