在模意义下枚举m进行验证,多设置几个模数,而且小一些,利用f(x+p)%p=f(x)%p降低计算次数。UOJ AC,bzoj OLE。
#include#include #include #include using namespace std;#define MAXV 4951vector v;typedef unsigned int ull;const ull prime[]={4931,4933,4937,4943,4951};int n;ull m,a[101][5],F[MAXV+1][5];char s[10002];ull f(const ull &x,const int &wh){ if(x>=prime[wh]) return f(x%prime[wh],wh); if(F[x][wh] =0;--i) res=(res*x%prime[wh]+a[i][wh])%prime[wh]; return F[x][wh]=res;}int main(){ scanf("%d",&n); cin>>m; memset(F,0x7f,sizeof(F)); for(int i=0;i<=n;++i) { scanf("%s",s); int len=strlen(s); for(int k=(s[0]=='-'?1:0);k