在洛谷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;
}