NOIP2012模擬10 25 單元格

2022-08-18 05:21:08 字數 1579 閱讀 9256

在乙個r行c列的**裡,我們要選出3個不同的單元格。但要滿足如下的兩個條件:

(1)選中的任意兩個單元格都不在同一行。

(2)選中的任意兩個單元格都不在同一列。

假設我們選中的單元格分別是:a,b,c,那麼我們定義這種選擇的「費用」= f[a][b] + f[b][c] + f[c][a]。 其中f[a][b]是指單元格a到單元格b的距離,即兩個單元格所在行編號的差的絕對值 + 兩個單元格所在列編號的差的絕對值。例如:單元格a在第3行第2列,單元格b在第5行第1列,那麼f[a][b] = |3-5| + |2-1| = 2 + 1 = 3。至於f[b][c], f[c][a]的意義也是同樣的道理。現在你的任務是:有多少種不同的選擇方案,使得「費用」不小於給定的數mint,而且不大於給定的數maxt,即「費用」在【mint, maxt】範圍內有多少種不同的選擇方案。答案模1000000007。所謂的兩種不同方案是指:只要它們選中的單元格有乙個不同,就認為是不同的方案。

我們列舉乙個矩陣的長和寬,分別是i個點和j個點。

那麼對於這個矩陣,我們求出三個單元格在矩陣中的位置的方案數,矩陣要包含這三個單元格,並且是包含這三個單元格的矩陣中最小的乙個,單元格的位置主要分2種情況:

經過平移等操作,費用就是這個矩陣的周長\(2(i+j-2)\)(為什麼減2自己理解,本人語文不好,不知道如何解釋)

對角的單元格有2種位置(看圖),不在邊上單元格的位置有\((i-2)(j-2)\)種位置,

那麼這個矩陣的答案就是\(2(i-2)(j-2)\)

(經過平移等操作,費用就是這個矩陣的周長\(2(i+j-2)\)(為什麼減2自己理解,本人語文不好,不知道如何解釋))

這種情況又有4種情況(看圖),

在長上的單元格有\((i-2)\)種位置,

在寬上的單元格有\((j-2)\)種位置。

那麼這個矩陣的答案就是\(4(i-2)(j-2)\)

接著,我們列舉的矩陣在原**中又有\((r-i+1)(c-j+1)\)個,所以乘上\((r-i+1)(c-j+1)\)。

答案就是\(\sum_^\sum_^6(i-2)(j-2)(r-i+1)(c-j+1)\)

#include #include #include #include #include #include #include const long long maxlongint=2147483647;

const long long mo=1000000007;

const long long n=50005;

using namespace std;

long long mxt,mnt,n,m,ans;

int main()

printf("%lld",ans*6%mo);

}

NOIP2012模擬10 25 旅行

給定乙個n行m列的字元矩陣,代表空地,x 代表障礙。移動的規則是 每秒鐘以上下左右四個方向之一移動一格,不能進入障礙。計算 在空地中隨機選擇起點和終點 可以重合,此時最短耗時為0 從起點移動到終點最短耗時的平均值。每一行每一列至多有1個障礙,並且障礙不在對角線方向相鄰。以下矩陣是不合法的 x x.第...

NOIP2012模擬10 25 剪草

首先分析的出兩個結論,1 每棵草最多隻剪一次 2 按照生長速度,先剪小的,再剪大的。不難證明,略。那麼把小草按生長速度從大到小排個序後,設f i,j 表示,在倒數第i個時刻,已經處理了j棵草時的最小高度和。轉移為f i j min f i j 1 f i 1 j 1 a j g a ns i 1 a...

NOIP2012模擬10 25 旅行

給定乙個n行m列的字元矩陣,代表空地,x 代表障礙。移動的規則是 每秒鐘以上下左右四個方向之一移動一格,不能進入障礙。計算 在空地中隨機選擇起點和終點 可以重合,此時最短耗時為0 從起點移動到終點最短耗時的平均值。每一行每一列至多有1個障礙,並且障礙不在對角線方向相鄰。以下矩陣是不合法的 xx.50...