LuoguP7080 [NWRRC2013]Ballot Analyzing Device 题解
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;
}
LuoguP7080 [NWRRC2013]Ballot Analyzing Device 题解的更多相关文章
- Codeforces Gym 100269B Ballot Analyzing Device 模拟题
Ballot Analyzing Device 题目连接: http://codeforces.com/gym/100269/attachments Description Election comm ...
- HNU 12845 Ballot Analyzing Device
题目链接:http://acm.hnu.cn/online/?action=problem&type=show&id=12845&courseid=270 解题报告:有m个认给 ...
- Codeforces Gym 100269A Arrangement of Contest 水题
Problem A. Arrangement of Contest 题目连接: http://codeforces.com/gym/100269/attachments Description Lit ...
- 2015 Multi-University Training Contest 1 题解&&总结
---------- HDU 5288 OO’s Sequence 题意 给定一个数列(长度<$10^5$),求有多少区间[l,r],且区间内有多少数,满足区间内其它数不是他的约数. 数的范围$ ...
- Analyzing UI Performance with Systrace 使用systrace工具分析ui性能
While developing your application, you should check that user interactions are buttery smooth, runni ...
- Xcode 9 Analyzing Crash Reports
Analyzing Crash Reports After you distribute your app for testing by using TestFlight or after you m ...
- HDU 5294 Tricks Device 网络流 最短路
Tricks Device 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5294 Description Innocent Wu follows D ...
- Kuangbin 带你飞专题十一 网络流题解 及模版 及上下界网络流等问题
首先是几份模版 最大流:虽然EK很慢但是优势就是短.求最小割的时候可以根据增广时的a数组来判断哪些边是割边.然而SAP的最大流版我只会套版,并不知道该如何找到这个割边.在尝试的时候发现了一些问题.所以 ...
- Android 性能优化(25)*性能工具之「Systrace」Analyzing UI Performance with Systrace:用Systrace得到ui性能报告
Analyzing UI Performance with Systrace In this document Overview 简介 Generating a Trace 生成Systrace文件 ...
随机推荐
- appScan安全软件的使用
1.点击文件,新建 2.常规扫描 3.点击下一步 4.输入需要扫描的网站 5.下一步,如果有账号 密码可以使用记录. 6.选择缺省值,下一步 7.启动全面扫描.
- 【状压dp】Hamiton路径
描述 给定一张 n(n≤20) 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径. Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点 ...
- 快速沃尔什变换&快速莫比乌斯变换小记
u1s1 距离省选只剩 5 days 了,现在学新算法真的合适吗(( 位运算卷积 众所周知,对于最普通的卷积 \(c_i=\sum\limits_{j+k=i}a_jb_k\),\(a_jb_k\) ...
- NOI 2008 志愿者招募
NOI 2008 志愿者招募 考虑用 $ p_i $ 表示第 $ i $ 天实际招收的人数,我们假设我们有三种志愿者,分别是 $ 1\to 2,1 \to 3 , 2\to 3 $ ,我们招手的人数分 ...
- DirectX12 3D 游戏开发与实战第八章内容(上)
8.光照 学习目标 对光照和材质的交互有基本的了解 了解局部光照和全局光照的区别 探究如何用数学来描述位于物体表面上某一点的"朝向",以此来确定入射光照射到表面的角度 学习如何正确 ...
- MYSQL5.8-----4
cc
- fatal error: runtime: out of memory
[root@VM_0_10_centos frp_0.27.0_linux_amd64]# top top - 21:09:19 up 2 days, 4 min, 2 users, load ave ...
- perl练习——FASTA格式文件中序列GC含量计算&perl数组排序如何获得下标或者键
一.关于程序: FUN:计算FASTA文件中每条序列中G和C的含量百分比,输出最大值及其id INPUT:FASTA格式文件 >seq1 CGCCGAGCGCTTGACCTCCAGCAAGACG ...
- addict, address, adequate.四级
addict addiction – a biopsychosocial [生物社会心理学的 bio-psycho-social] disorder characterized by persiste ...
- C++一元多项式求导
这个题难度不大但是坑有点多,要考虑的点有几个: 1.测试用例为x 0 这个直接输出 0 0即可. 2.注意空格的输出 3.测试点3我好几次都没过,最后参考了别的答案加以修改才通过. 测试点3没过的代码 ...