POJ 3001 暴力
来源:互联网 发布:萧山网络问政进化镇 编辑:程序博客网 时间:2024/06/07 14:26
题意
某次调查有N个调查选项,已知每个调查选项的得票率(经过了四舍五入),问最少多少人参与了调查。
题解
这大概是这道题第一篇中文题解吧。。
暴力出奇迹,因为最多只有10000人参与投票,因此暴力尝试1至10000人即可。由于概率经过了四舍五入,因此还原的时候只能还原成一个区间,这个区间就是x-0.499到x+0.500(一定要注意精度问题,-0.49的精度不足以AC)。这样就可以计算出来是否可能有i个人参与了投票。如果尝试到10000人都是不可能参与投票,则输出-1。
注意事项
再次强调精度问题。。。
代码
#include <iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<string>#include<set>#include<map>#define UP(i,l,h) for(int i=l;i<h;i++)#define DOWN(i,h,l) for(int i=h-1;i>=l;i--)#define W(a) while(a)#define INF 0x3f3f3f3f#define LL long long#define MAXN 1010#define EPS 1e-10using namespace std;double percent[25];char ch[100];int bignum(int decimal){ int sum=1; UP(i,0,decimal){ sum*=10; } return sum;}int main(){ int n; int ks=1; W(~scanf("%d",&n)){ if(n==0) break; UP(i,0,n){ scanf("%s",ch); percent[i]=atof(ch); } int len=strlen(ch); int decimal=0; UP(i,0,len){ if(ch[i]=='.'){ decimal=len-i-1; break; } } int multinum=bignum(decimal); int ans=INF; UP(i,1,10000){ int mx=0,mi=0; UP(j,0,n){ mi+=ceil(i*(percent[j]*multinum-0.500)/multinum/100); mx+=floor(i*(percent[j]*multinum+0.499)/multinum/100); } if(i>=mi&&i<=mx){ ans=i; break; } } if(ans==INF) printf("Case %d: error\n",ks++); else printf("Case %d: %d\n",ks++,ans); } return 0;}
阅读全文
0 0
- POJ 3001 暴力
- POJ 3522 暴力+图论
- POJ 1142 暴力!
- POJ 3697 BFS暴力
- poj 3102(暴力枚举)
- poj 3080 KMP+暴力
- poj 1247 暴力
- POJ 1380 暴力搜索
- POJ 1050 暴力
- POJ 1125 暴力+Dijkstra
- poj-1691-暴力DFS
- poj 2918Tudoku(暴力。。)
- poj 1690 暴力
- POJ 1054 暴力搜索
- poj 1840 Eqs 暴力
- POJ 2029 DP || 暴力
- POJ 2718 暴力枚举
- Fishnet(暴力POJ 1408)
- 某BCD工艺剖析
- Linux发行版Ubuntu安装Wine
- opencv 绘制目标矩形
- CodeForces
- bitcoin的技术原理
- POJ 3001 暴力
- Android网络请求利用第三方框架okHttp的工具类
- 实现一颗二叉树的层序遍历
- android 简单的欢迎页面
- Matlab三维绘图
- k_means 聚类算法
- 关于Qt bindValue函数出错问题
- app推广:渠道统计分析,个性化安装,选择openinstall的理由
- hp平台时区对oracle rac可能出现的影响