原文链接https://www.cnblogs.com/zhouzhendong/p/SRM500-250.html

SRM500 Div1 250

题意

(看题用了半个小时……)

有 n 个人(编号从 0 到 n-1)玩游戏,要通过投票的方式确定谁输。现在已知有一些人有明确的意见,认为谁输。具体地用一个 vector decision 来描述,vector decision 的大小可能不足 n 。

定义一个集合 S 包含一些人,初始的时候集合 S 包含所有人。他们会进行若干轮投票,每一轮中,一次进行下列三个过程:

  1. 对于所有 **意见明确 且 认为该输的人在 S 中 ** 的意见,进行投票。
  2. 对于剩下的所有的投票机会,每次随机选择一个在 S 中且当前票数最少的人进行投票。
  3. 将 S 更新为 S 中票数最多的人构成的集合。如果 |S| = 1 ,那么结束游戏,这个属于 S 的人输了。

给定 n, decision ,返回所有人输的概率 的最大值。

\(2\leq n\leq 500, 1\leq decision.size()\leq \min(n,50)\)

一直在想如何求解残局。

事实上,在第一轮中,就可以得到一些重要性质:

  1. 第一轮所有人都有且仅有一票。
  2. 否则,必然存在一些人的票数大于 1,那么下一轮剩下的人一定是票数最多的所有人的。于是,我们只需要判定是否有解,如果有,那么答案就是 \(\frac 1 {人数}\) ,否则答案就是 0 。
static const int N=505;
int n,t[N];
double probabilityToLose(int N, vector <int> d){
n=N;
memset(t,0,sizeof t);
for (auto v : d)
t[v]++;
int Max=0;
for (int i=0;i<n;i++)
Max=max(t[i],Max);
if (Max<=1)
return 0;
int tot=0;
for (int i=0;i<n;i++)
if (t[i]==Max)
tot++;
double res=1.0/tot;
while (1){
if (!tot)
return 0;
if (tot==1)
return res;
tot=n%tot;
}
}

最新文章

  1. 使用可视化工具redisclient连接redis
  2. Configure Amazon RDS mysql to store Chinese Characters
  3. iOS中的存储方式
  4. MySQL高可用之MHA的搭建 转
  5. cygwin的163镜像(转)
  6. 微信小程序文档解读(一)--api提供支持有哪些
  7. C# 获取并判断操作系统版本,解决Win10、 Windows Server 2012 R2 读取失败的方案
  8. RVDS4.0 + JLINK 调试 cortex-A9
  9. 利用JAVA多线程来提高数据处理效率
  10. token.go
  11. 自学Python,新手上路,好资源免费分享
  12. MyEclipse2014破解版安装教程
  13. spring boot 1.x配置,不断完善中
  14. Entity Framework Core系列之什么是Entity Framework Core
  15. jquery 事件的绑定,触发和解绑
  16. python3笔记&lt;二&gt; List
  17. 算法面经之讯飞+CVTE
  18. [转载] Web Service工作原理及实例
  19. maven项目更新之后,JDK版本成为1.5
  20. 树莓派ssh服务

热门文章

  1. Django_RBAC_demo2 升级版权限控制组件
  2. 【BZOJ5502】[GXOI/GZOI2019]与或和(单调栈)
  3. Linux-服务器创建swap交换分区
  4. 一张图认识Python(附基本语法总结)
  5. 导出python的环境
  6. python httpserver
  7. Kubenetes 资源清单定义入门
  8. mysql My SQL获取某个表的列名
  9. 09--STL关联容器(map/multimap)
  10. SNMP源码分析之(一)配置文件部分