加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
模拟.cpp 1.39 KB
一键复制 编辑 原始数据 按行查看 历史
#include<bits/stdc++.h>
using namespace std;
int a[10010], b[10010], ap, bp;
int main()
{
int n; cin >> n;
for(int i = 0; i < n; i++)
{
char c; int x;
cin >> c >> x;
if(c == 'T') a[ap++] = x;//a 存减速时间
else b[bp++] = x;//b 存减速位置
}
sort(a, a + ap);
sort(b, b + bp);
int ai = 0, bi = 0, v = 1;//因为分母是整数,分子一直是1,所以这里的v速度代表分母
double len = 0, t = 0;
while(ai < ap && bi < bp)
{
double t1 = a[ai] - t; //到达下一个减速时间 所需的时间
double t2 = (b[bi] - len) * v; //到达下一个减速位置 所需的时间
if(t1 == t2)
{//如果时间一样,一起减速
t = a[ai];
len = b[bi];
v += 2, ai++, bi++;
}
else if(t1 < t2)
{//先到达减速时间
len += (a[ai] - t) / v;
t = a[ai];
v++, ai++;
}
else
{//先到达减速位置
t += (b[bi] - len) * v;
len = b[bi];
v++, bi++;
}
}
while(ai < ap)
{
len += (a[ai] - t) / v;
t = a[ai];
v++, ai++;
}
while(bi < bp)
{
t += (b[bi] - len) * v;
len = b[bi];
v++, bi++;
}
cout << (int)(t + (1000 - len) * v + 0.500001);//加上最后一段
return 0;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化