您的位置:首页 > 其它

HZAU 1018 Catching Dogs

2016-05-16 19:47 309 查看
题目连接

模拟

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn = 10 + 10;
int n, v0;
int v[maxn];
double p[maxn];
void solve()
{
double p0 = 0;
double ans = 0;
for(int i = 0; i < n; i++)
scanf("%lf%d", &p[i], &v[i]);
bool flag = true;
for(int i = 0; i < n; i++){
if (v[i] == 0)
{
double t = abs(p0 - p[i])/v0;
ans += t;
p0 = p[i];
for(int j = i + 1; j < n; j++)
p[j] += (v[j] * t);
continue;
}
int s;
if(p[i] == p0) s = 0;
else if((p[i] - p0) * v[i] > 0) s = 1; // zhuiji
else s = 2; //xiangyu
if(s == 1 && abs(v[i]) >= v0) {flag = false; break;}
double t;
if(s == 1)
{
t = abs(p0 - p[i]) / (v0 - abs(v[i]));
p0 += (v[i]/abs(v[i]) * t * v0);
}
else if(s == 2)
{
t = abs(p0 - p[i]) / (v0 + abs(v[i]));
p0 -= (v[i]/abs(v[i]) * t * v0);
}
else t = 0;
ans += t;
for(int j = i + 1; j < n; j++)
p[j] += (v[j] * t);
}
if(flag) printf("%.2lf\n", ans);
else printf("Bad Dog\n");
}
int main(){
//freopen("input.txt", "r", stdin);
while(scanf("%d%d", &n, &v0) != EOF)
solve();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: