題目:網線管理
這是一個九分的代碼(其中ri就是right,l是left)
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define fast ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define sc(a) scanf("%d",&a)
#define pf(a) printf("%d",a)
int r[10010];
int n, k;
int l, ri, mid;
int main()
{
sc(n);sc(k);
for(int i=1;i<=n;i++)
{
double m;
cin>>m;
r[i]=(int)(m*100+0.5);
}
sort(r+1,r+1+n);
ri=r[n];
while(l+1<ri)
{
mid=(l+ri)/2;
int res=0;
for(int i=1;i<=n;i++) res+=r[i]/mid;
if(res>=k) l=mid;
else ri=mid;
}
if(l-1>=0) printf("%.2lf",l/100.00);
else cout<<"0.00"<<endl;
return 0;
}
這是一個十分的代碼(區別只有ri=r[n]+1)
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define fast ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define sc(a) scanf("%d",&a)
#define pf(a) printf("%d",a)
int r[10010];
int n, k;
int l, ri, mid;
int main()
{
sc(n);sc(k);
for(int i=1;i<=n;i++)
{
double m;
cin>>m;
r[i]=(int)(m*100+0.5);
}
sort(r+1,r+1+n);
ri=r[n]+1;
while(l+1<ri)
{
mid=(l+ri)/2;
int res=0;
for(int i=1;i<=n;i++) res+=r[i]/mid;
if(res>=k) l=mid;
else ri=mid;
}
if(l-1>=0) printf("%.2lf",l/100.00);
else cout<<"0.00"<<endl;
return 0;
}
特別一提,我在將ri=r[n]改為ri=1e9之后得到了九分,有沒有大佬能講解一下?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/276343.html
標籤:C++ 語言
上一篇:vs, std::vector, 插入其它位置與插入end,擴展空間的方法不一樣, 你們其它開發工具是一樣的嗎?
下一篇:【順序表】基本操作-靜態分配
