正题
我们把这个圆分成平均分成三份,以第一刀为第一块与最后一块的边界。
令它们的颜色为红蓝黄(左闭右开)。
然后割下的每一刀的颜色就是所在位置的颜色,然后将每一刀都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);
}