链接:https://ac.nowcoder.com/acm/problem/14731
来源:牛客网
题面
求所有长度为的串中满足如下条件的二元组个数:
设第i位和第j位分别位和(),则。 答案对取模。
考虑一对和在多少情况下可以出现,即是这对和的贡献 钦定两个位置,剩下随便选,再考虑钦定哪两个位置, 相乘即得
#include <bits/stdc++.h> #define ri int #define ll long long using namespace std; const ll Mod=1e9+7; inline ll ksm(ll a,ll b) { ll ans=1; while(b) { if(b&1)ans=ans*a%Mod; a=a*a%Mod; b>>=1; } return ans; } ll n; int main() { scanf("%lld",&n); if(n==1)return !printf("0\n"); if(n==2)return !printf("1\n"); printf("%lld\n",ksm(2,n-3)*(n%Mod)%Mod*((n-1)%Mod)%Mod); return 0; }