欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

class05 zhc

时间:2024-05-05 08:01 作者:admin 点击:
1242 网线主管 最短:0.01,最长:输入的max 判定条件:按照mid截取网线总数量=k #include bits/stdc++.h using namespace std; int n,k; int a[10050]; double b; bool f(int mid){ long long cnt=0; for(int i=1;i=n;i++){ cnt

1242 网线主管

最短:0.01,最长:输入的max

判定条件:按照mid截取网线总数量>=k

#include <bits/stdc++.h>

using namespace std;

int n,k;

int a[10050];

double b;

bool f(int mid){

   long long cnt=0;

   for(int i=1;i<=n;i++){

       cnt+=a[i]/mid;

       if(cnt>=k) return true;

   }

   return cnt>=k;

}

int main(){

   cin>>n>>k;

   for(int i=1;i<=n;i++){

       cin>>b;

       a[i]=round(b*100);

   }

   if(!f(1)) { cout<<"0.00";return 0; }

   int l=1,r=10000000;

   while(l<r){

       int mid=(l+r+1)/2;

       if(f(mid)) l=mid;

       else r=mid-1;

   }

   cout<<fixed<<setprecision(2)<<1.0*l/100;

   return 0;

}


1240 查找最接近的数

#include <bits/stdc++.h>

using namespace std;

int n,m,k,a[100050];

bool f(int mid){

   return a[mid]<=k;

}

int main(){

   cin>>n;

   for(int i=1;i<=n;i++){

       cin>>a[i];

       if(a[i]==a[i-1]&&i!=1){

           i--;n--;

       }

   }

   cin>>m;

   while(m--){

       cin>>k;

       if(k<=a[1]) cout<<a[1]<<endl;

       else if(k>=a[n]) cout<<a[n]<<endl;

       else

       {

           int l=1,r=n;

           while(l<r){

               int mid=(l+r+1)/2;

               if(f(mid)) l=mid;

               else r=mid-1;

           }

           if(k-a[l]<=a[l+1]-k) cout<<a[l]<<endl;

           else cout<<a[l+1]<<endl;

       }

   }

   return 0;

}



时空复杂度


(责任编辑:admin)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%