ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LuoguP7080 [NWRRC2013]Ballot Analyzing Device 题解

2021-12-16 15:05:00  阅读:126  来源: 互联网

标签:四舍五入 val NWRRC2013 int 题解 cz Analyzing id leqslant


Content

有 \(n\) 名选手参加一个比赛,有 \(m\) 个人为他们投票。第 \(i\) 个人的投票情况用一个长度为 \(n\),并且仅包含 .X 两个字符的字符串,其中,如果第 \(j\) 位是 X,则第 \(i\) 个人将票投给了第 \(j\) 名选手,否则没有。规定每个投票者能且仅能将票投给一个人,否则都算无效票(即投的票数 \(\geqslant 2\) 或者 \(=0\))。请将每名选手按照他们所得到的票的比例排序(如果有两名选手得到的票的比例相同,在投票次序中先出现的那名选手排在前面),并输出他们的名字和得票比例,最后还要输出无效票所占的比例。

比例输出为百分数,\(\%\) 前面的部分四舍五入到 \(2\) 位小数。

数据范围:\(2\leqslant n\leqslant 10,1\leqslant m\leqslant 1000\)。

Solution

直接按照题意模拟就好,不过要注意四舍五入的问题。printf 的自动四舍五入有时候会出现 bug 导致 WA on test 19,所以需要自己手写一个函数来处理四舍五入。具体实现可以参考这里的代码。

Code

int n, m, in;
string tp;
struct user {
	string name;
	int val, id;
	bool operator < (const user& cz) const {return val > cz.val || (val == cz.val && id < cz.id);}
}a[17];

inline void judge(string s) {
	int len = s.size(), xnum = 0, xpl;
	F(i, 0, len - 1) if(s[i] == 'X') xnum++, xpl = i + 1;
	if(xnum != 1) {in++; return;}
	a[xpl].val++;
}
inline double getans(int x) {
	double ans = x * 1.0 / m, aa = ans * 10000;
	return floor(aa + 0.5) / 100.0;
}

int main() {
	n = Rint, m = Rint;
	F(i, 1, n) {
		cin >> a[i].name;
		a[i].id = i;
	}
	F(i, 1, m) {
		cin >> tp;
		judge(tp);
	}
	sort(a + 1, a + n + 1);
	F(i, 1, n) {
		cout << a[i].name << ' ';
		double ans = getans(a[i].val);
		printf("%.2lf%%\n", ans);
	} 
	printf("Invalid %.2lf%%\n", getans(in));
	return 0;
}

标签:四舍五入,val,NWRRC2013,int,题解,cz,Analyzing,id,leqslant
来源: https://www.cnblogs.com/Eason-AC/p/15698079.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有