zoukankan      html  css  js  c++  java
  • Codeforces Round #365 (Div. 2) C

    链接:http://codeforces.com/problemset/problem/703/C

    分析:  这题其实是个大水题,只要短短的几行就可以搞定的, 首先需要直觉判断一点,就是只要判断最左边的点和最下面的点 以及和他们相邻边的右边的点

    第二部我们就需要判断人与这两个边有没有交点,如果人与上面的有交点,那么人肯定就需要在下面的那条边等待  等待的时间是 max(x - y*1.0*v/u)

    那么我们所需要做的还有一步就是判断就是需不需要等待 ,当min(x - y*1.0*v/u) >= 0(都没过) 或者max(x - y*1.0*v/u) <=0(都过了) 这两个时候,人都是可以直接全速前进

    那么答案就是w*1.0/u  如果需要等待那么就要在不等待时间基础上加上等待的时间  那么要等待的时间是多少呢? max(x - y*1.0*v/u)/v

    还有一点需要注意的是 需要用long double   我之前用double 写的 wa掉了 然后索性全部开成了 long long 和 long double

    下面附上AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    
    int main(){
        ios::sync_with_stdio(false);
        double w, v, u;
        long long n;
        long double maxx = -1e9;
        long double minx = 1e9;
        cin >> n >> w >> v >> u;
        for(int i = 0; i < n; ++i){
            int x, y;
            cin >> x >> y;
            long double tmp = x - y*v*1.0/u;
            maxx = maxx > tmp ? maxx : tmp;
            minx = minx < tmp ? minx : tmp;
        }
        if(minx >= 0) cout << fixed << setprecision(10) << w*1.0/u << endl;
        else if(maxx > 0 && minx < 0) cout << fixed << setprecision(10) << (w*1.0/u + maxx/v) << endl;
        else if(maxx <= 0) cout << fixed << setprecision(10) << (w*1.0/u) << endl; 
        return 0;
    }
  • 相关阅读:
    报表设计器的使用之一:入门
    统计图开发之二:点图元
    统计图开发之一:画法定义
    集算器之五:序表
    集算器之四:程序流程
    忏悔录
    请不要离我而去
    所想和所做 所梦和所成
    做出改变,不断改变。
    Linux 操作命令
  • 原文地址:https://www.cnblogs.com/boson-is-god/p/5743637.html
Copyright © 2011-2022 走看看