没写完

 

蓝桥杯-区间移位   有空继续写

#include <iostream>
using namespace std;
const int N = 1e4 + 10;

int n;
struct dic
{
  int u;
  int v;
}
vector <dic> q;

bool check(double x)  // 相当于给多一个位移最大为x的条件
{
    double stand = 0; //现在的位置(当前最远能够站到的位置)
    for (int i = 0; i < n; i++)
    {
        if (q[i][0] > stand)  //需要左移
        {
            double max1 = q[i][0] - stand;   //需移多少
            if (max1 > x)  return 0;  //越界了
            else    //左移没有越界
            {
                stand += q[i][1] - q[i][0];
            }
        }
        else  //不需要左移  但是可以右移
        {
            stand = q[i][1] + x;
        }
    }
    if (stand >= 1e4)return 1;
    else return 0;
}
int main()
{
    cin >> n;
    int a,b;
    for (int i = 0; i < n; i++) cin >> a >> b;
    q.push_back({a,b});

    
    sort()                      //把二维数组排序--需要vector
    double l = 0, r = 1e4;

    while ((r - l) > 1e-11)
    {
        double mid = ( l + r )/2;
        if (check(mid)) r = mid;
        else l = mid;
    }
    if (l-(int)l >0.9 ) //19.9999
    {
        printf("%d", (int)l+1);
    }
    else if (l - (int)l < 0.001)printf("%d", (int)l);  //20.001
     else printf("%.1lf", l);  //小数
    return 0;
}

 

上一篇:1.11编程基础之二分查找


下一篇:什么是DCL(Double Check Lock)单例?