T332558 「SIOI-2」C老师的转盘题解
题目背景
『C』老师,一个可恶的数学老师(?
//这把我坑的不轻。
笑死我,『mmh』被『C』老师的转盘给制裁了,明明是最好的却败给了“概率”。
爷的思路(?
首先,我们知道这题要输出这 \(4\) 个数的比值和这 \(4\) 个数大概占的百分比。
对于比值,我们找到这 \(4\) 个数的最大公约数,用 \(原值\div最大公约数\) 就可以算出。
而对于百分比,我们可以用 \(刚刚求出的比值\div4个比值之和\) 来算出。
AC Code
#include <bits/stdc++.h>
using namespace std;
int n,cnt[4];
int main(){
scanf("%d",&n);//简单地输入aaa
for(int i=1;i<=n;i++){
int a;
scanf("%d",&a);
cnt[a-1]++;
}
int gcd=__gcd(cnt[0],__gcd(cnt[1],__gcd(cnt[2],cnt[3]))),total_area=0;//求出四个数的最大公约数
for(int i=0;i<4;i++){
cnt[i]=cnt[i]/gcd;//算出比值
total_area+=cnt[i];//算出比值之和
printf("%d",cnt[i]);//简单输出aaa
if(i!=3) printf(":");
else printf("\n");
}
for(int i=0;i<4;i++){
if(i!=3) printf("%0.1lf%% ",100.0*cnt[i]/total_area);//算出百分比并输出aaa
else printf("%0.1lf%%",100.0*cnt[i]/total_area);
}
return 0;
}

浙公网安备 33010602011771号