題目描述
在乙個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。所謂的兩種不同方案是指:只要它們選中的單元格有乙個不同,就認為是不同的方案。
輸入
一行,4個整數,r、c、mint、maxt。3≤r,c≤4000, 1≤mint≤maxt≤20000。
對於30%的資料, 3 ≤ r ,c ≤ 70。
輸出
乙個整數,表示不同的選擇方案數量模1000000007後的結果。
樣例輸入
【樣例1】
3 3 1 20000
【樣例2】
3 3 4 7
【樣例3】
4 6 9 12
【樣例4】
7 5 13 18
【樣例5】
4000 4000 4000 14000
樣例輸出
【樣例1】
6【樣例2】
0【樣例3】
264【樣例4】
1212
【樣例5】
859690013
思路
對於一種選擇,其實際答案為2*(maxx-minx+maxy-miny),即a,b,c三點組成的矩形的周長,a,b,c三點一共有六種方式組成乙個相同的矩形,因此列舉每種矩形組成方式求解即可
**實現
#pragma gcc optimize(3,"ofast","inline")
#include
using
namespace std;
typedef
long
long ll;
typedef
unsigned
long
long ull;
const
int n=
1e5+5;
const
int m=
10005
;const
int inf=
0x3f3f3f
;const ull sed=31;
const ll mod=
1e9+7;
const
double eps=
1e-8
;const
double pi=
acos(-
1.0)
;typedef pair<
int,
int>p;
int r,c,mint,maxt;
intmain()
}printf
("%lld\n"
,ans)
;return0;
}
1509 普及模擬 單元格
在乙個r行c列的 裡,我們要選出3個不同的單元格。但要滿足如下的兩個條件 1 選中的任意兩個單元格都不在同一行。2 選中的任意兩個單元格都不在同一列。假設我們選中的單元格分別是 a,b,c,那麼我們定義這種選擇的 費用 f a b f b c f c a 其中f a b 是指單元格a到單元格b的距離...
數學 (JZOJ) 普及模擬 單元格
題目描述 在乙個r行c列的 裡,我們要選出3個不同的單元格。但要滿足如下的兩個條件 1 選中的任意兩個單元格都不在同一行。2 選中的任意兩個單元格都不在同一列。假設我們選中的單元格分別是 a,b,c,那麼我們定義這種選擇的 費用 f a b f b c f c a 其中f a b 是指單元格a到單元...
labview 活動單元格 活動單元格屬性
短名稱 activecell 必需 基礎軟體包 類 多列列表框類的屬性 用途 建立屬性。設定活動單元格的行和列。名稱說明 行設定活動單元格的行。取值範圍為0至n,n為行數 1。輸入 2可選擇所有行。列設定活動單元格的列。取值範圍為0至m,m為列數 1。輸入 2可選擇所有列。輸入 1可選擇列首。下表為...