YJZ场,持续自闭。
B
oeis
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=998244353;
ll power(ll n,ll p){
ll ans=1;
ll base=n;
while(p){
if(p&1)ans=ans*base%mod;
p>>=1;
base=base*base%mod;
}
return ans;
}
ll getinv(ll n){
return power(n,mod-2);
}
ll inv[1000003];
ll fac[1000003];
ll C(ll n,ll m){
ll ret=fac[n];
ret=ret*inv[n-m]%mod;
ret=ret*inv[m]%mod;
return ret;
}
int main(){
inv[0]=fac[0]=1;
for(int i=1;i<=1000000;i++){
fac[i]=fac[i-1]*i%mod;
inv[i]=getinv(fac[i]);
}
ll n;
cin>>n;
if(n==1)cout<<1<<endl;
else {
n--;
ll ans=0;
ll pw2=1;
for(ll k=1;k<=n;k++){
pw2=pw2*2%mod;
ll tmp=pw2;
tmp=tmp*C(n,k)%mod;
tmp=tmp*C(n,k-1)%mod;
ans=(ans+tmp)%mod;
}
//cout<<ans<<endl;
cout<<ans*getinv(n)%mod<<endl;
}
}
E
猜结论
#include <bits/stdc++.h>
using namespace std;
int main(){
int T;
cin>>T;
while(T--){
int n,m,k;
cin>>n>>m>>k;
bool ok=false;
if(n%2==0||m%2==0)ok=true;
for(int i=1;i<=k;i++){
int xl,yl,xr,yr;
cin>>xl>>yl>>xr>>yr;
if(xl==xr&&yl==yr)continue;
if((xl+yl)%2==0&&(xr+yr)%2==0)ok=true;
}
if(ok)cout<<n*m<<endl;
else cout<<n*m+1<<endl;
}
}
G
oeis
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
ll power(ll n,ll p){
ll ans=1;
ll base=n;
while(p){
if(p&1)ans=ans*base%mod;
p>>=1;
base=base*base%mod;
}
return ans;
}
ll inv(ll n){
return power(n,mod-2);
}
int main(){
ll n;
cin>>n;
if(n<=3)cout<<1<<endl;
else {
ll a=n;
a=a*(n-1)%mod;
a=a*(n-2)%mod;
a=a*(n-3)%mod;
a=a*inv(24)%mod;
ll b=n-2;
b=b*(n-1)%mod;
b=b*inv(2)%mod;
cout<<(a+b)%mod<<endl;
}
}
H
FWT
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+9;
const ll inv2=(mod+1)/2;
void fwt(ll a[],int len){
while(len!=(len&(-len)))len+=len&(-len);
for(int i=0;1<<i<len;i++){
for(int j=0;j<len;j+=(2<<i)){
for(int k=0;k<1<<i;k++){
ll l=a[j+k],r=a[j+(1<<i)+k];
a[j+k]=(l+r)%mod;
a[j+(1<<i)+k]=(l-r+mod)%mod;
}
}
}
}
void rfwt(ll a[],int len){
while(len!=(len&(-len)))len+=len&(-len);
int i=31-__builtin_clz(len)-1;
for(i;i>=0;i--){
for(int j=0;j<len;j+=(2<<i)){
for(int k=0;k<1<<i;k++){
ll l=a[j+k],r=a[j+(1<<i)+k];
a[j+k]=(l+r)*inv2%mod;
a[j+(1<<i)+k]=(l-r+mod)*inv2%mod;
}
}
}
}
ll a[1<<19];
ll b[1<<19];
int main(){
int n;
scanf("%d",&n);
int sum=0;
for(int i=0;i<n;i++){
int x;
scanf("%d",&x);
b[x]=a[x]=1;
sum^=x;
}
if(sum==0)printf("%d\n",n);
else if(a[sum])printf("%d\n",n-1);
else {
fwt(a,1<<19);
fwt(b,1<<19);
for(int i=2;;i++){
for(int j=0;j<1<<19;j++){
b[j]=b[j]*a[j]%mod;
}
rfwt(b,1<<19);
if(b[sum])return 0*printf("%d\n",n-i);
fwt(b,1<<19);
}
}
}