https://www.nowcoder.com/acm/contest/146#question
G Counting regions
有公式。。。。
#include<bits/stdc++.h>
using namespace std;
#define mod 1000000007
long long qpow(long long x,long long cs)
{
long long ans=1;
while(cs)
{
if(cs&1)
ans=ans*x%mod;
x=x*x%mod;
cs>>=1;
}
return ans;
}
int main(){
long long n;
long long i24=qpow(24,mod-2);
while(~scanf("%lld",&n))
{
long long ans=(n-1)*(n-2)%mod;
ans%=mod;
long long lss=n*n-3*n+12;
lss%=mod;
ans=ans*lss%mod;
ans=ans*i24%mod;
printf("%lld\n",ans%mod);
}
return 0;
}
B Filling pools
oeis了解一下。。。
#include<bits/stdc++.h>
using namespace std;
#define mod 998244353
long long C[270000];
long long qpow(long long x,long long cs)
{
long long ans=1;
while(cs)
{
if(cs&1)ans=ans*x%mod;
x=x*x%mod;
cs>>=1;
}
return ans;
}
int main(){
long long n;
while(~scanf("%lld",&n))
{
if(n==1)
{
cout<<"1"<<endl;
continue;
}
C[0]=1;
n--;
long long inv;
for(int i=1;i<=n;i++)
{
C[i]=C[i-1]*(n-i+1)%mod;
inv=qpow(i,mod-2);
C[i]=C[i]*inv%mod;
C[i]%=mod;
}
long long ans=0;
for(int i=1;i<=n;i++)
{
long long er=qpow(2,i);
er=er*C[i]%mod;
er=er*C[i-1]%mod;
ans=(ans+er)%mod;
}
inv=qpow(n,mod-2);
ans=ans*inv%mod;
cout<<ans%mod<<endl;
}
return 0;
}