题意:给你面积为l的草坪和m台除草机器,并且给你m台机器各自的除草速度,工作时间和充电时间,问你能在一周内(10080分钟)至少割完一次草坪的机器名字。如果有多台机器满足条件则输出排在最前面的,没有符合要求的则输出“no such mover”。
题解:这明明是字符串处理的问题,却被我们想错成数学题了。我们考虑的是工作时间和充电时间必须是完整的情况,然鹅事实是完全可以充一会儿用一会儿,这样考虑的就是平均值,直接除就好了。记得要用double。
代码:
#include<bits/stdc++.h>
using namespace std;
const long long p=1e9+7;
struct Node
{
int num;
char name[110];
int p;
int t1,t2;
int r;
} a[110];
bool cmp(Node a,Node b)
{
if(a.p==b.p)
return a.num<b.num;
else return a.p<b.p;
}
int main()
{
ios::sync_with_stdio(false);
int m,n;
scanf("%d%d",&m,&n);
char ch;
int temp=0;
for(int i=0; i<n; i++)
{
int cnt=0,p,r,t1,t2;
char tnam[110];
while(scanf("%c",&ch)!=EOF&&ch!=',')
tnam[cnt++]=ch;
scanf("%d,%d,%d,%d",&p,&r,&t1,&t2);
if((double)((double)10080/(double)(t1+t2)*(double)r*(double)t1)>=(double)m)
{
a[temp].num=temp;
a[temp].p=p;
a[temp].r=r;
a[temp].t1=t1;
a[temp].t2=t2;
// cout<<"tnam:"<<tnam[0]<<endl;
for(int j=1; j<cnt; j++)
a[temp].name[j-1]=tnam[j];
temp++;
}
}
if(temp==0)
printf("no such mower\n");
else
{
sort(a,a+temp,cmp);
for(int i=0; i<temp&&a[i].p==a[0].p; i++)
printf("%s\n",a[i].name);
}
return 0;
}