One Third,AGC032F,巧妙的构造

mac2024-11-06  8

正题

      我们把这个圆分成平均分成三份,以第一刀为第一块与最后一块的边界。

      令它们的颜色为红蓝黄(左闭右开)。

      然后割下的每一刀的颜色就是所在位置的颜色,然后将每一刀都mod。

      现在就是找两个最近异色点对。

      可以自己讨论一下,发现很巧妙!

      通过简单积分可以得到:将一条长度为1的线段随机取n-1个点,分成n条线段,第k短线段的长度期望为

      一切都看起来很随机,所以我们可以认为子线段两端的颜色也是随机的,最短的两端同色概率为,然后累加起来就好了。

     

#include<bits/stdc++.h> using namespace std; int n; const long long mod=1e9+7; long long inv[1000010]; int main(){ scanf("%d",&n); inv[1]=1;for(int i=2;i<=n;i++) inv[i]=inv[mod%i]*(mod-mod/i)%mod; long long ans=0,data=1,x=333333336; for(int i=1;i<=n;i++) (data*=x)%=mod,ans+=data*inv[n]%mod*inv[n-i+1]%mod; printf("%lld\n",ans%mod); }

     

最新回复(0)