幽默,我的程序没有调用rand()函数,但是会随机输出答案
  • 板块灌水区
  • 楼主LJXlalala
  • 当前回复12
  • 已保存回复12
  • 发布时间2024/8/17 16:15
  • 上次更新2024/8/17 19:13:15
查看原帖
幽默,我的程序没有调用rand()函数,但是会随机输出答案
723056
LJXlalala楼主2024/8/17 16:15
#include<bits/stdc++.h>
#define sc scanf 
#define pr printf
using namespace std;
typedef long long ll;
const ll N=2e5+10,mod=998244353; 
ll n,m,k,j,o,jc[N],deg[N],ans=0;
ll ksm(ll x,ll y){
	ll z=1;
	while(y){
		if(y&1) z=z*x%mod;
		x=x*x%mod;
		y>>=1;
	}
	return z;
}
ll C(ll x,ll y){
	if(x<y) return 0; 
	if(y==0||x==y) return 1;//删除此行随机数为正,否则保持为负。
	return jc[x]*ksm(jc[y]*jc[x-y]%mod,mod-2)%mod;
}
void init(){
	ll i;
	jc[0]=1;
	for(i=1;i<=n;i++){
		jc[i]=jc[i-1]*i%mod;
	}
}
int main(){
	ll i=0,x=0,y=0;
	sc("%lld%lld%lld%lld%lld",&n,&m,&k,&j,&o);
	init();
//	请进行以下输入:(必须要进行手动输入,我也不知道为什么) (文件读写也可以)
//	n=138330,m=43197,k=869,j=47202,o=91128;
//  138330 43197 869 47202 91128;//提供用以复制
	for(i=0;i<=j;i+=2){
		ll sum=(C(j,i)*C(o,k-i))%mod;//在i=882,i=17266时,sum会为一个随机数
//		cout<<i<<" "<<sum<<endl;
		ans+=sum;
		ans%=mod;
	}
	pr("%lld",ans);
	return 0;
} 

我已经查明程序错误所在:k-i会小于 0 ,导致访问越界。

但是有几个很神奇的特性:

  1. 直接赋值会输出 0 ,而非随机数,必须手动输入;
  2. 只有在i=882,i=17266时,sum会为一个随机数,我是利用自己和自己对拍得到的
  3. 删除C函数第二行,甚至可以控制随机数的正负。

求大佬解答原因

2024/8/17 16:15
加载中...