#include<iostream>
#include<cstdio>
using namespace std;
#define ll long long
#define ull unsigned long long
inline ll re(){
ll re=0;
char ch=getchar();
while(ch<'0'||ch>'9'){
ch=getchar();}
while(ch>='0'&&ch<='9'){
re=(re<<3)+(re<<1)+(ch^48);
ch=getchar();
}
return re;
}
const ull O=10086001,N=1e6+3;
inline ull _mod(ull x){ return x<O ? x:x-O; }
ull ans[N],mul[N];
int main(){
mul[0]=1;
for(int i=1;i<=N;i++){
mul[i]=_mod(mul[i-1]*i);
ans[i]=mul[(i-1)>>1];
}
for(int i=1;i<=N;i++) ans[i]=_mod(ans[i]+ans[i-1]);
for(int i=1;i<=N;i++) ans[i]=_mod(ans[i]+ans[i-1]);
for(int i=1;i<=N;i++) ans[i]=_mod(ans[i]+ans[i-1]);
ll T=re();
while(T--){
printf("%llu\n",ans[re()]);
}
return 0;
}
上方是0分程序
下方是AC程序
#include<iostream>
#include<cstdio>
using namespace std;
#define ll long long
#define ull unsigned long long
inline ll re(){
ll re=0;
char ch=getchar();
while(ch<'0'||ch>'9'){
ch=getchar();}
while(ch>='0'&&ch<='9'){
re=(re<<3)+(re<<1)+(ch^48);
ch=getchar();
}
return re;
}
const ull O=10086001,N=1e6+3;
inline ull _mod(ull x){ return x<O ? x:x-O; }
ull ans[N],mul[N];
int main(){
mul[0]=1;
for(int i=1;i<=N;i++){
mul[i]=(mul[i-1]*i)%O;
ans[i]=mul[(i-1)>>1];
}
for(int i=1;i<=N;i++) ans[i]=(ans[i]+ans[i-1])%O;
for(int i=1;i<=N;i++) ans[i]=(ans[i]+ans[i-1])%O;
for(int i=1;i<=N;i++) ans[i]=(ans[i]+ans[i-1])%O;
ll T=re();
while(T--){
printf("%llu\n",ans[re()]);
}
return 0;
}
可见主要区别在前者与后者的取模方式
但是原因是什么却没看出来
请路过大犇指点
谢谢