題目大意:
在乙個r行c列的**要選出3個不同的單元格a,b,c。定義這種選擇的「費用」= f[a][b] + f[b][c] + f[c][a],f[x][y]是指x到y的距離,即x,y所在行編號的差的絕對值 + x,y所在列編號的差的絕對值。求出在min~max費用範圍內有多少個這種選擇。
題解:
ans:=6* (r-2) * (c-2) * (r-i+1) * (c-j+1);
1.因為其實單元格可以看做乙個個點,而單元格a,b,c三個點可以構成乙個三角形,這個三角形所處位置是乙個矩形,而推理可知矩形的周長就是它的費用,如果他的費用在min~max之間就進行下一步。
2.對於乙個矩形,題目要求都不在點同一行同一列所以矩形的構成這時有2種情況:
(1)乙個點在端點上,2個點分別在這個點在矩形中所不相鄰的2條邊上,這時候有1 * (r-2)* (c-2)中情況。
以上因為矩形端點有4個,所以情況要* 4,為4 * (r-2) * (c-2)。
(2)2個點在端點上,這時候因為題意不能有2點在同一列或同一行,所這2個點矩形的對角線,而這個時候矩形的4條邊都不能出現第3個點,這時候點在這條對角線構成的矩形中,有(r-2) * (c-2)的情況。
以上因為矩形有2條對角線,所以情況要 * 2,為2 * (r-2) * (c-2)
2種情況相加得來構成這種矩形的3個點方案情況有6*(r-2) * (c-2)種,然後求出在**中這種矩形的數量(r-i+1) * (c-j+1)相乘,累加,取模就是答案。
時間複雜度:o(n^2)
var
x,y,i,j:longint;
r,c,ans:int64;
begin
assign(input,'table.in');reset(input);
assign(output,'table.out'); rewrite(output);
readln(r,c,x,y);
fori:=3 to r do
begin
forj:=3 to c do
if (i+j-2)*2>=x then
if (i+j-2)*2
<=y
then ans:=ans+6*(i-2)*(j-2)*(r-i+1)*(c-j+1);
ans:=ans
mod1000000007;
end;
writeln(ans);
close(input); close(output);
end.
1509 普及模擬 單元格
在乙個r行c列的 裡,我們要選出3個不同的單元格。但要滿足如下的兩個條件 1 選中的任意兩個單元格都不在同一行。2 選中的任意兩個單元格都不在同一列。假設我們選中的單元格分別是 a,b,c,那麼我們定義這種選擇的 費用 f a b f b c f c a 其中f a b 是指單元格a到單元格b的距離...
jzoj P1507 普及模擬 數列
題目描述 給定乙個等差數列,第一項是a,從第二項開始,每項與前一項的差都是乙個定值b。如果用數學形式來表示,那麼可以表示成 a b x 其中 x 0,且是整數。例如 a 1,b 2,那麼這個等差數列就是 1,3,5,7,9 再給定乙個等比數列,第一項是c,從第二項開始,每項是前一項的d倍。如果用數學...
數學 (JZOJ) 普及模擬 單元格
題目描述 在乙個r行c列的 裡,我們要選出3個不同的單元格。但要滿足如下的兩個條件 1 選中的任意兩個單元格都不在同一行。2 選中的任意兩個單元格都不在同一列。假設我們選中的單元格分別是 a,b,c,那麼我們定義這種選擇的 費用 f a b f b c f c a 其中f a b 是指單元格a到單元...