http://codeforces.com/gym/101669/attachments
蒟蒻只讨论四个题。(蒟蒻也觉得这样不好,但是现在蒟蒻实力有限并且暂时没有经历更加深入的研究这种东西,等蒟蒻有时间了一定把博客好好整整,)
G:给定一个质点,和各个不同运动阶段的 加速度和加速度运行时间,问你如何设置各个时间段的前后顺序,能够使他走过的路程比初始时间段顺序最多?
贪心,每次把加速度大的时间段放在前面(不考虑时间)
开始考虑使 a*t 贪心,但是考虑一个a特别小,但是t特别大的,对后面速度的影响,肯定使很小的(这个注意看V-T图像qwq)
假说:走过路程和初始最接近的,那就是a递减呗。
这道题还有一个考点,那就是default, 作名词动词有 未履行的意思,在计算机科学中,有默认的意思(我能说我没猜出来么)
#include <bits/stdc++.h>
using namespace std;
vector<pair<double,double> >q;
bool cmp2(pair<double,double>a,pair<double,double>b){
return a.first>b.first;
}
int main()
{ int m;
double a,b;
cin>>m;
for(int i=0;i<m;i++){
cin>>a>>b;
q.push_back(make_pair(a,b));
}
// sort(q.begin(),q.end(),cmp2);
double v=0;
double s=0;
for(int i=0;i<q.size();i++){
s+=v*q[i].second+0.5*q[i].first*q[i].second*q[i].second;
v=v+q[i].first*q[i].second;
}
v=0;
double ss=0;
v=0;
sort(q.begin(),q.end(),cmp2);
for(int i=0;i<q.size();i++){
ss+=v*q[i].second+0.5*q[i].first*q[i].second*q[i].second;
v=v+q[i].first*q[i].second;
}
printf("%.1lf\n",abs(ss-s));
return 0;
}
其他三道题都口头ac好几天了。马上更。