关于 define
  • 板块AT_dp_y Grid 2
  • 楼主whoamIxxx
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/10/23 20:38
  • 上次更新2024/10/23 21:41:52
查看原帖
关于 define
508312
whoamIxxx楼主2024/10/23 20:38
#pragma GCC optimize 2
#pragma GCC optimize 3
#include<bits/stdc++.h>
#define int long long
#define fi first
#define se second
using namespace std;
const int N=3e5+5,P=1e9+7;
int n,m,p,fac[N],inv[N],f[N];
//#define C(x,y) (fac[x]*inv[x-y]%P*inv[y]%P)
pair<int,int>a[N];
inline int qpow(int x,int y){
	int res=1;
	while(y){if(y&1)(res*=x)%=P;(x*=x)%=P;y>>=1;}
	return res;
}
inline int C(int a,int b){
	return fac[a]*inv[b]%P*inv[a-b]%P;
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>m>>p;fac[0]=inv[0]=f[0]=1;
	for(int i=1;i<N;i++)fac[i]=(fac[i-1]*i)%P,inv[i]=qpow(fac[i],P-2);
	for(int i=1;i<=p;i++)cin>>a[i].fi>>a[i].se;
	sort(a+1,a+1+p);a[p+1]={n,m};
	for(int i=1;i<=p+1;i++){
		f[i]=C(a[i].fi+a[i].se-2,a[i].fi-1);
		for(int j=1,disx,disy;j<i;j++){
			disx=a[i].fi-a[j].fi,disy=a[i].se-a[j].se;
			if(disx>=0&&disy>=0)((f[i]-=f[j]*C(disx+disy,disx)%P)+=P)%=P;
		}
	}return cout<<f[p+1],0;
}

上为 AC 代码,若注释掉 CC 并去掉 define 的注释,则过不了样例,求解析(以前写 define 都没出锅,今天被硬控了好久)

2024/10/23 20:38
加载中...