本地程序跑崩(目前无法处理)
  • 板块灌水区
  • 楼主idgg007
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/8/16 20:01
  • 上次更新2023/10/27 15:05:40
查看原帖
本地程序跑崩(目前无法处理)
297831
idgg007楼主2022/8/16 20:01

在洛谷IDE上可以正常运行,但是在本地运行后几秒内(未输入任何数据)崩溃,已尝试:1更换GCC的不同版本,2更换为clang编译器,3修改代码

#include<iostream>
#include<vector>
using namespace std;
struct Fraction{
	int numerator;		//分子
	int denominator;	//分母
	int gcd(const int a,const int b){
		if(b==0)
			return a;
		else
			return gcd(b,a%b);
	}
	Fraction multiplication(const Fraction &rhs){
		Fraction result;
		result.numerator=rhs.numerator*this->numerator;
		result.denominator=rhs.denominator*this->denominator;
		return result;
	}
	Fraction addition(const Fraction &rhs){
		int d=rhs.denominator*this->denominator;
		int n=rhs.numerator*this->denominator+this->numerator*rhs.denominator;
		Fraction result;
		result.denominator=d;
		result.numerator=n;
		return result;
	}
	void Common(){		//通分
		int divisor=gcd(numerator,denominator);
		numerator/=divisor;
		denominator/=divisor;
	}
};
int main(){
	int T;
	ios::sync_with_stdio(0),cin.tie(0);
	cin>>T;
	Fraction DP[1001][1001];				//DP[i][j]为选到第i组,选了j个男生的概率
	vector<int>girlPopulation;
	vector<int>boyPopulation;
	while(T){
		int N;
		cin>>N;
		girlPopulation.assign(N+1,0);
		boyPopulation.assign(N+1,0);
		for(int i=1;i<=N;i++)
			cin>>boyPopulation[i]>>girlPopulation[i];
		DP[0][0].numerator=1;
		DP[0][0].denominator=1;
		for(int i=1;i<=N;i++){		//开始DP
			for(int j=0;j<=i;j++){
				DP[i][j].numerator=0;
				DP[i][j].denominator=1;
			}
			Fraction boyProbability;
			boyProbability.numerator=boyPopulation[i];
			boyProbability.denominator=boyPopulation[i]+girlPopulation[i];
			boyProbability.Common();
			Fraction girlProbability;
			girlProbability.numerator=girlPopulation[i];
			girlProbability.denominator=boyPopulation[i]+girlPopulation[i];
			for(int j=0;j<i;j++){
				DP[i][j]=DP[i][j].addition(DP[i-1][j].multiplication(girlProbability));
				DP[i][j+1]=DP[i][j+1].addition(DP[i-1][j].multiplication(boyProbability));
			}
			for(int j=0;j<=i;j++)
				DP[i][j].Common();
		}
		cout<<DP[N][N/2].numerator<<"\n"<<DP[N][N/2].denominator<<"\n";
		T--;
	}
	return 0;
}
2022/8/16 20:01
加载中...