想要更好的體驗?來這裡:
洛谷部落格
嗯,講題之前,我先先普及一下字首和的知識:
前置知識
字首和是乙個陣列的某項下標之前(包括此項元素)的所有陣列元素的和。
設 b []
bb[
] 為字首和陣列, a[]
aa[
] 為原陣列,根據這句話可以得到字首和的定義式和遞推式:
一維字首和:
定義式:
b [i
]=∑j
=0ia
[j
]b[i]=\sum_^a[j]
b[i]=j
=0∑i
a[j
]遞推式:
b [i
]=b[
i−1]
+a[i
]b[i]=b[i-1]+a[i]
b[i]=b
[i−1
]+a[
i]二維字首和:
定義式:
b [x
][y]
=∑i=
0x∑j
=0ya
[i][
j]
b[x][y]=\sum_^\sum_^a[i][j]
b[x][y
]=i=
0∑x
j=0∑
ya[
i][j
]遞推式:
b [x
][y]
=b[x
−1][
y]+b
[x][
y−1]
−b[x
−1][
y−1]
+a[x
][y]
b[x][y]=b[x-1][y]+b[x][y-1]-b[x-1][y-1]+a[x][y]
b[x][y
]=b[
x−1]
[y]+
b[x]
[y−1
]−b[
x−1]
[y−1
]+a[
x][y
]通用公式:
s um
[i,j
]=b[
j]−b
[i−1
]sum[i,j]=b[j]-b[i-1]
sum[i,
j]=b
[j]−
b[i−
1]至於字尾嘛,看看字首,反過來應該就行了。
解析:我們先假定大家都看懂了上面的東西
我們可以對房子按照座標排序,對每乙個房子,記一下字首和字尾和(前面/後面房子中的人到當前房子的路程和),最後我們再掃一遍取字首和和字尾和的和的 min
\min
min 就可以了
**:
#include
using
namespace std;
#define ll long long
const
int maxn=
100010
;ll ansl[maxn]
,ansr[maxn]
,ans=
0x7fffffffffffffff
;//ans要開的大一點點
//long long是個好習慣
ll suml[maxn]
,sumr[maxn]
;ll l,n;
struct node
}ar[maxn]
;int
main()
sort
(ar+
1,ar+
1+n)
;for
(int i=
1;i<=n;i++
)for
(int i=n;i>=
1;i--
)for
(int i=
1;i<=n;i++
)printf
("%lld"
,ans)
;return0;
}
把ans開的大一點點,到 2
612^
261 就可以了,太小wa,太大wa
不開long long見祖宗
題解 P1843 奶牛曬衣服
先奉上 本人的手打大根堆。標頭檔案需要 也可以不要,把建構函式刪了就是 struct heap 建構函式 inline void insert const int key inline void maintain const int increment inline int get return h...
題解 P1556 幸福的路
傳送門 題的本質不難,大概也就黃題的水平,dfs即可。我是不會告訴你我提交了3次才ac 1 與當前的牛的x軸或y軸座標相等。2 需要轉彎才能到達。3 此前未經過。第乙個重點在於第二個條件,如何判斷是否存在轉彎?這裡使用乙個函式,通過對起始點和目標點的判斷,返回線路的方向 inline int dir...
洛谷P1265 公路修建題解
某國有n個城市,它們互相之間沒有公路相通,因此交通十分不便。為解決這一 行路難 的問題,決定修建公路。修建公路的任務由各城市共同完成。修建工程分若干輪完成。在每一輪中,每個城市選擇乙個與它最近的城市,申請修建通往該城市的公路。負責審批這些申請以決定是否同意修建。審批的規則如下 1 如果兩個或以上城市...