H y p e r l i n k Hyperlink Hyperlink
https://ac.nowcoder.com/acm/contest/2927/C
D e s c r i p t i o n Description Description
有一张大小为 n n n的完全图, d i s t ( i , j ) = ∣ i − j ∣ dist(i,j)=|i-j| dist(i,j)=∣i−j∣,求该图最大生成树的边权和,答案对998244353取模
数据范围: n ≤ 1 0 18 , n n\leq 10^{18},n n≤1018,n是偶数
S o l u t i o n Solution Solution
结论题继续
首先前面一半的点连
n
n
n
后面一半的点连1
考虑计算答案
前半段:
n
−
m
i
d
+
(
n
−
m
i
d
+
1
)
+
(
n
−
m
i
d
+
2
)
+
(
n
−
m
i
d
+
3
)
…
+
(
n
−
2
)
+
(
n
−
1
)
n-mid+(n-mid+1)+(n-mid+2)+(n-mid+3)…+(n-2)+(n-1)
n−mid+(n−mid+1)+(n−mid+2)+(n−mid+3)…+(n−2)+(n−1)
后半段答案与上面相同(
n
n
n为偶数,性质显然)
发现这就是一个等差数列,直接首末和与项数积的一半,然后因为前半段等于后半段抵掉一半
加之 ( 1 , n ) , ( n , 1 ) (1,n),(n,1) (1,n),(n,1)多连了一条,减去它的权值 n − 1 n-1 n−1即可
于是
A n s = ( m i d + n − 1 ) m i d − n − 1 Ans=(mid+n-1)mid-n-1 Ans=(mid+n−1)mid−n−1
恶心点在于卡 l o n g l o n g long\ long long long,你可以用 i n t _ _ 128 int\_\_128 int__128或者快速幂求逆元解决
但是 p y t h o n python python显然更好
时间复杂度: O ( ? ) O(?) O(?)
C o d e Code Code
n=input()
mid=n/2
a=(mid+n-1)*mid
print((a-(n-1))%998244353)