第一题
- 小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;
}