題目背景:
14 已經想不出新穎的題目背景了,所以他準備用序列來構造矩陣。
題目描述:
wy (機房巨佬) 給了 14 乙個長度為 n
nn 的序列 a
aa 和乙個長度為 m
mm 的序列 bbb。
14 玩序列玩膩了,準備用這兩個序列構造出乙個 n×m
n\times m
n×m 的矩陣 c。
14 規定 ci,
j=ai
×b
ic_=a_i \times b_i
ci,j=
ai×
bi,14 是乙個好奇的小朋友,
他想知道在這個矩陣中有多少個子矩陣的元素之和為 kkk。
其中 k
kk 為 14 給定的乙個常數。
輸入格式:
輸入第一行包含三個整數 n,m
,k
n,m,k
n,m,
k,表示序列 a
aa 的長度,序列 b
bb 的長度以及 14 給出的常數。
輸入第二行包含 n
nn 個整數,表示序列 a
aa 。
輸入第三行包含 m
mm 個整數,表示序列 b
bb 。
輸出格式:
輸出只有一行,表示符合條件的子矩陣個數。
樣例輸入:
3420
2354
632
樣例輸出:4
題解:
對於乙個左上角為 ai,
bi
a_i,b_i
ai,bi
,右下角為 aj,
bj
a_j,b_j
aj,bj
,的矩形裡面的元素和
是等於 (∑k
=ija
k)×(
∑t=i
jbt)
(\sum\limits_^a_k) \times (\sum\limits_^b_t)
(k=i∑j
ak
)×(t
=i∑j
bt
) 因為是 i
ii 至 j
jj 範圍中間所有的 a
aa 陣列裡值的和
就可以先求乙個字首和
b
bb 陣列同理
保證可以二分的條件:
因為所有的 ai,
bi
a_i,b_i
ai,bi
值都是 1e9
≥ai,
bi≥0
1e9\ge a_i,b_i \ge0
1e9≥ai
,bi
≥0
所以在確定左端點的情況下它是單調遞增的。
把 k
kk 的所有因數求出來(不會太多,據 ljs
ljslj
s 所言最多240個左右)
預處理幹完了開始主要部分:
先對 a
aa 陣列列舉左端點在列舉 k
kk 的所有因數
然後對 i
ii 到 n
nn 進行二分
用之前求好的字首和把 a
ia_i
ai 到 a[a[
a[二分的值 ]
]]的和調出來看是否等於列舉的 k
kk 的因數
b
bb 陣列同理
然後就完了^_^
上**:
#include
using
namespace std;
#define ll long long
ll x[
1000005];
ll y[
1000005];
ll vis[
1000005];
ll sum[
10005];
ll cnt;
ll a[
50005];
ll b[
50005];
void
read
(ll& x)
while
(c >=
'0'&& c <=
'9')
x *= f;
}int
main()
}for
(int i =
1; i <= n; i++
)for
(int i =
1; i <= m; i++
)for
(int i =
1; i <= n; i++
)else
if(a[mid]
- a[i -1]
> sum[j]
)else}if
(t ==0)
}}for(
int i =
1; i <= m; i++
)else
if(b[mid]
- b[i -1]
> sum[j]
)else}if
(t ==0)
}}ll ans =0;
for(
int i =
1; i <= cnt; i++
)printf
("%lld"
, ans)
;return0;
}
ac**
只有 50
5050
分不知道**錯了
校賽方陣8
描述 給定乙個方形數陣,將方陣內的數轉為八進位制並輸出轉換後的方陣 要求一行內每個數字用乙個空格隔開,行末不允許出現空格 輸入 多組資料 每組資料輸入乙個方陣m,由若干行若干列整數組成,範圍在int內 輸出 每組資料輸出乙個八進位制方陣n,要求見題目描述 每組輸出資料之間無空行 樣例輸入11 8 1...
牛客 多校賽一
a lgv演算法 抄一波 牛客的解釋 wiki 沒耐心看了 lgv 演算法 lindstr m gessel viennot lemma 求以上矩陣的行列式,其中 e a,b 是從a到b的方法數,帶入求行列式即可得到 a1,a2,an 到 b1,b2,bn 的所有不相交路徑的種數 再看這道題,其實就...
2019 3 10湖南多校賽心得
首先本次比賽我們隊是第二十三名,對於還是小菜雞的我們也還算可以,做的好的點是罰時少,做得不好的地方做得慢並且難的題根本沒辦法下手,帶了板子也沒有用到。所以對於此次比賽我覺得有待改進的點有 1.隊伍合作度不高,對彼此的 不熟悉,故而以後每次比賽後各自分享自己的 然後熟悉隊友 特點,並且對隊友有些寫得冗...