网易2016研发工程师编程题②

来源:互联网 发布:古生物学就业 知乎 编辑:程序博客网 时间:2024/06/11 01:56

第一题


  • 小v今年有n门课,每门都有考试,为了拿到奖学金,小v必须让自己的平均成绩至少为avg。每门课由平时成绩和考试成绩组成,满分为r。现在他知道每门课的平时成绩为ai ,若想让这门课的考试成绩多拿一分的话,小v要花bi 的时间复习,不复习的话当然就是0分。同时我们显然可以发现复习得再多也不会拿到超过满分的分数。为了拿到奖学金,小v至少要花多少时间复习。

#include<iostream>using namespace std;long Goal(long avg,long Score[],long i,long n,long r){     long finals = 0;long Finish = n*avg;long j = n;long Finals = 0;     Score[i]=r;       while(j--)      {      finals+=Score[j];      }       if(Finish <= finals)     {  return 0;     }     else     return 1;}void Mlongime(long b[],long result[],long n){           for(long i = 0;i < n; i++)         {         if(b[i] <= result[1])            {              result[1] = b[i];              result[0] = i;            }         }}int main (){   long n,avg,r;   long * a;   long * b;   long result[2]={0,100000000};   long * Score;   while(cin >> n >> r >> avg)   {         long finals = 0;        long lasttime = 0;        long last = 0;        long j = n;        long time = 0;        long left = 0;        a= new long [n];      b= new long [n];      Score= new long [n];      while(j--)      {      cin >> a[j] >> b[j];Score[j] = a[j];finals += Score[j];       }         if(finals >=n*avg)    {         time = 0;       cout <<time<<endl;       return 0;       }         Mlongime(b,result,n);         left = r -a[result[0]];         time = left*result[1];         b[result[0]] = 10000000;         result[1]=10000000;      while(Goal(avg,Score,result[0],n,r))      {           Mlongime(b,result,n);           left = r -a[result[0]];           time+= left*result[1];           last = b[result[0]];           b[result[0]] = 10000000;           result[1]=10000000;      }           j = n;        while(j--)      {      finals+=Score[j];      }         lasttime = (finals-n*avg)*last;       time = time - lasttime;  cout <<time<<endl;   }   return 0;   }

这道题也没有AC,有一组600多组的测试用例一直无法通过,欢迎大家来讨论


第二题


  • 一条长l的笔直的街道上有n个路灯,若这条街的起点为0,终点为l,第i个路灯坐标为ai,每盏灯可以覆盖到的最远距离为d,为了照明需求,所有灯的灯光必须覆盖整条街,但是为了省电,要是这个d最小,请找到这个最小的d。

#include<iostream>#include<iomanip>using namespace std;/*快速排序*/void Qsort(long a[], long low, long high){    if(low >= high)    {        return;    }    long first = low;    long last = high;    long key = a[first];/*用字表的第一个记录作为枢轴*/    while(first < last)    {        while(first < last && a[last] >= key)        {            --last;        }        a[first] = a[last];/*将比第一个小的移到低端*/        while(first < last && a[first] <= key)        {            ++first;        }        a[last] = a[first];         /*将比第一个大的移到高端*/    }    a[first] = key;/*枢轴记录到位*/    Qsort(a, low, first-1);    Qsort(a, first+1, high);}int main(){long n,l;while(cin>>n>>l){        double final = 0;long length = 0;long * light;light = new long [n];for(long i = 0;i < n;i++){     cin>>light[i];}Qsort(light,0,n-1);length = light[0] - 0;length = length * 2;   for(long s = 0;s < n-1;s++)   {           long j = light[s+1]-light[s];           if(j > length)           length = j;    }    long high = l - light[n-1];    high = high*2;    if(high > length)    length = high;    final = length /2.0;    printf("%.2lf\n",final);    //cout<<setprecision(3)<<final<<endl;}return 0;}
0 0
原创粉丝点击