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

第一题


  • 小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;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值