P9380 题解
I_will_AKIOI · · 题解
数据范围非常小。
枚举一下
考虑将枚举出的
所以我们换一种思路做。由于
读入比较麻烦,我们需要先读入字符串获取位数。一行的长度
#include<bits/stdc++.h>
using namespace std;
int n,l;
double inf,a[101],f[10]={1,0.1,0.01,0.001,0.0001,0.00001,0.000001};
bool check(int k)
{
int sum=0;
for(int i=1;i<=n;i++)
{
int w=a[i]*k+0.5;
if(a[i]-inf>(double)w/double(k)||(double)w/double(k)>=a[i]+inf) return 0;//不符合要求,退出
sum+=w;
}
return sum==k;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)//读入浮点数
{
string s;
cin>>s;
l=s.size()-2;
if(s[0]=='0') a[i]=0;
else a[i]=1;
for(int j=2;j<s.size();j++) a[i]+=f[j-1]*(s[j]-48);//枚举每一位的小数
}
inf=f[l]*0.5;
for(int i=1;i<=1000000;i++) if(check(i)) {cout<<i;break;}
return 0;
}