problem 2225 小茗的魔法陣
在打敗了易基•普羅布朗、諾姆•普羅布朗之後,小茗同學開始挑戰哈德•普羅布朗。
一番交戰之後,哈德展開了一大波攻擊。小茗同學為了抵禦攻擊,一邊放魔法陣一邊放魔法陣,然後他也不知道自己一共放了幾個魔法陣。**魔法陣是需要花費時間的,為了抵禦下一波攻擊,小茗同學需要知道自己共放了幾個魔法陣,由於情況緊急,這個任務需要由你來完成。
魔法陣是三角形△的,比如
.............
.x..x....x...
...***..x.x..
.......***xx.
.............
以上都認為是魔法陣。
(即:三角形三個頂點為(i,j),(i+k,j-k),(i+k,j+k),邊上均為』x』。三角形中間的元素沒有要求。乙個』x』可以同時屬於多個魔法陣。單個』x』也算乙個魔法陣。)
場地可以認為是乙個n×m的矩形,每個位置上為』.』表示沒有東西,或』x』表示有魔法陣。
第一行是乙個整數t(t<=10),表示共有t組測試資料。
每組資料的第一行包含兩個整數n m(n,m≤1000),表示矩陣大小。
接下來n行 ,每行m個字母為『.』或者『x』。
每組資料輸出獨佔一行,輸出格式為」case #x: y」,x從1開始,表示資料組號,y表示相應的魔法陣的數量。
13 3
.x.***
...case #1: 5
題目分析:看到資料範圍,一直在yy o(mn)姿勢,沒想到這樣也能過,無力吐槽,這個不叫dp吧?也就是個小模擬。。。三個陣列記錄往右,左下,右下能延伸的最遠距離
#include #include #include using namespace std;
int const max = 1005;
char s[max][max];
int dp1[max][max], dp2[max][max], dp3[max][max];
int main()}}
for(int i = n; i >= 1; i--)
}for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
if(dp2[i][j] && dp3[i][j])
for(int k = 1; k < min(dp2[i][j], dp3[i][j]); k++)
if(dp1[i + k][j - k] >= 2 * k + 1)
ans ++;
printf("case #%d: %d\n", ca ++, ans);
}}
Hrbust 2225 粉刷柵欄 分治
粉刷柵欄 time limit 500 ms memory limit 32768 k total submit 111 35 users total accepted 34 24 users rating special judge no description 給定一組長度為 n 的柵欄,從左到...
HRBUST 2225 粉刷柵欄(分治)
給定一組長度為 n 的柵欄,從左到右高度依次是 h i 你需要對這個柵欄粉刷油漆,每次你可以粉刷一行或者一列。問最少粉刷幾次,可以給所有柵欄上漆。不能多刷 input 第一行包含乙個整數,表示柵欄的長度。接下來的一行,包含 n 個數 n 5000 依次表示 h i 0 h i 10 output 輸...
劍指offer 22 25記錄
輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個節點是值為4的節點。示例 給定乙個鍊錶 1 2 3 4 5,和 k 2.返回鍊錶 4 ...