求卡精度
查看原帖
求卡精度
515129
TLEWA楼主2024/10/16 14:31

算法正确性应当无问题,求卡精度。

#include<bits/stdc++.h>
#define double long double

using namespace std;

const int N=45;

int n,m,k;
double p[N],b[N][N],dp[N];
bool vis[N];

pair<double,int> ans[N];

int main() {
	cin >> n >> m;
	for(int i=1;i<=n;++i) {cin >> p[i];p[i]/=100.0;}
	for(int i=1;i<=n;++i) {
		for(int j=1;j<=m;++j) {
			cin >> b[i][j];
			b[i][j]/=100.0;
		}
	}
	
	cin >> k;
	int id;
	for(int i=1;i<=k;++i) {
		cin >> id;
		vis[id]=1;
	}
	
	for(int i=1;i<=n;++i) {
		dp[i]=p[i];
		for(int j=1;j<=m;++j) {
			if(vis[j]) dp[i]=dp[i]*b[i][j];
			else dp[i]=dp[i]*(1-b[i][j]);
		}
	}
	
	double cnt=0;
	for(int i=1;i<=n;++i) cnt+=dp[i];
	for(int i=1;i<=n;++i) {
		ans[i].second=i;
		ans[i].first=dp[i]*100.0/cnt;
	}
	sort(ans+1,ans+1+n);
	for(int i=n;i>=1;--i) {
		cout << ans[i].second << ' ';
		cout << fixed << setprecision(2) << ans[i].first << endl;
	}
	
	return 0;
}

2024/10/16 14:31
加载中...