點此看題
0x01 50分暴力
先考慮得到乙個序列計算它的期望,如果這個序列兩兩不同,假設長度為n
nn,那麼期望就是n!n!
n!,考慮序列有重複的情況,發現相同的數的順序不用考慮,設每個數的出現次數為t
it_i
ti,那麼期望就是n!/
ti
!n!/t_i!
n!/ti
!。在考慮如果加入數字,觀察上面期望的式子,發現在[l,
r]
[l,r]
[l,r
]出現數的總和一定的情況下分布越平均越好,這樣就得到了乙個暴力的寫法,向[l,
r]
[l,r]
[l,r
]中暴力填數,保證盡量出現的數平均,然後按照上式計算答案。
0x02 二分
因為盡量平均,有乙個單調性,可以考慮二分,二分平均出現的次數,然後計算達到這個次數的情況下填數的次數,把這個找到不大於m
mm的最大的平均出現次數,具體操作是找到a
aa陣列中的[l,
r]
[l,r]
[l,r
]的數生成b
bb陣列,二分之後分成三部分計算,設二分的答案是p
pp,第一部分就是還剩下的次數用上去,就是fac
[p+1
]fac[p+1]
fac[p+
1],第二部分就是平均的出現次數,就是fac
[p
]fac[p]
fac[p]
,第三部分是a
aa陣列**現次數大於p
pp的,單獨考慮。
第一次在考試中切掉紫題qwq,太激動了,不知所言。
#include
#include
using
namespace std;
#define int long long
const
int maxn =
200005
;const
int maxm =
11000005
;const
int mod =
998244353
;int
read()
int t,n,m,k,l,r,cnt,ans,p,a[maxn]
,b[maxn]
;int fac[maxm]
;void
init()
intqkpow
(int a,
int b)
return res;
}int
check
(int x)
void
solve
(int l,
int r)
else
solve
(l,mid-1)
;}intinv
(int x)
signed
main()
}solve(0
,1e8);
m-=check
(p);
for(
int i=
1;i<=k;i++)if
(b[i]
>p)
ans=ans*
qkpow
(inv
(p+1
),m)
%mod*
qkpow
(inv
(p),r-l+
1-m-cnt)
%mod;
printf
("%lld\n"
,ans);}
}
BZOJ5322 JXOI2018 排序問題
傳送門 不難看出期望就是 n m v 1m ax c ntv frac cnt v v 1ma x c ntv n m cntv cnt v cntv 表示 v vv 這個數出現的次數。貪心就是直接把 m mm 個數字每次選擇乙個 cnt cntcn t 最小的加入,使得最後 l,r l,r l,r...
JXOI2018簡要題解
考慮如果所有數都不同,那麼一定只有一種方案可行,需要 n 次 如果有數相同,考慮強制大小關係,最後除上每個相同數之內的排列個數 考慮如何加入新的數,明顯是越平均越好,模擬一下即可 複雜度為 o tn log n include define n 200005 define m 10000005 de...
洛谷 JXOI2018 遊戲
初見安 這裡是傳送門 洛谷p4562 遊戲 九條可憐是乙個富有的女孩子。她長大以後創業了,開了乙個公司。但是管理公司是乙個很累人的活,員工們經常揹著可憐偷懶,可憐需要時不時對辦公室進行檢查。可憐公司有 nn 個辦公室,辦公室編號是 l到 l n 1,可憐會事先制定乙個順序,按照這個順序依次檢查辦公室...