Codeforces 832C - Strange Radiation

832C - Strange Radiation

思路:二分最短时间。

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mp make_pair
#define pi acos(-1.0)
#define pii pair<int,int>
#define pil pair<int,long>
#define mem(a,b) mamset(a,b,sizeof(a))

const int MOD=1e9+7;
const int INF=0x3f3f3f3f;
const int N=1e5+5;
const double eps=1e-9;

int n;
double s;

struct people
{
    double x,v,t;
}a[N];

bool check(double t)
{
    bool flag1=false,flag2=false;
    double l_l=1e6,l_r=0,r_l=1e6,r_r=0;
    for(int i=0;i<n;i++)
    {
        if(a[i].t==1)
        {
            if(a[i].x-(a[i].v+s)*t>0)continue;//如果炸弹放在这个点上都到不了,说明这个人肯定到不了。
            flag1=true;
            if(a[i].x-a[i].v*t<=0)//如果不加速也能到,那说明炸弹放在哪里都可以。
            {
                l_l=0;
                l_r=1e6;
                continue;
            }
            double X=floor((t*(s*s-a[i].v*a[i].v)+a[i].x*a[i].v)/s);
            l_r=max(l_r,X);//取并集
            l_l=min(l_l,(double)a[i].x);
        }
        else if(a[i].t==2)
        {
            if(a[i].x+(a[i].v+s)*t<1e6)continue;
            flag2=true;
            if(a[i].x+a[i].v*t>=1e6)
            {
                r_l=0;
                r_r=1e6;
                continue;
            }
            double X=ceil((1e6*(s-a[i].v)-t*(s*s-a[i].v*a[i].v)+a[i].x*a[i].v)/s);
            r_l=min(r_l,X);
            r_r=max(r_r,(double)a[i].x);
        }
    }
    if(!flag1||!flag2)return false;
    if(l_l>l_r||r_l>r_r)return false;
    if(l_r<r_l||r_r<l_l)return false;//取交集
    return true;
}

int main()
{
    scanf("%d%lf",&n,&s);
    for(int i=0;i<n;i++)
    scanf("%lf%lf%lf",&a[i].x,&a[i].v,&a[i].t);

    double l=0,r=1e6+5;
    double mid=(l+r)/2;
    while(r-l>=eps)
    {
        if(check(mid))r=mid;
        else l=mid;
        mid=(l+r)/2;
    }
    printf("%.12lf\n",mid);
    return 0;
} 
时间: 2024-08-30 00:11:36

Codeforces 832C - Strange Radiation的相关文章

Codeforces Round #425 (Div. 2) Problem C (Codeforces 832C) Strange Radiation - 二分答案 - 数论

n people are standing on a coordinate axis in points with positive integer coordinates strictly less than 106. For each person we know in which direction (left or right) he is facing, and his maximum speed. You can put a bomb in some point with non-n

Codeforces 484C Strange Sorting(置换)

题目链接:Codeforces 484C Strange Sorting 题目大意:给定一个长度为N的字符串,现在有M次询问,每次要从左向右逐个对长度为K的子串进行D-sorting,最后 输出生成的串. 解题思路:问题即为一个置换的思想,L对应的左移一位的置换,C对应的是D-sorting前K为的置换,每次执行完一次C 肯定执行一下L,保证D-sorting的为不同的K长度子串.用类似矩阵快速幂的思想对字符串进行求解,最后在有循环移 动对应的N-K位. #include <cstdio> #

codeforces 484C Strange Sorting Codeforces Round #276 (Div. 1) C

思路:首先 他是对1到k 元素做一次变换,然后对2到k+1个元素做一次变化....依次做完. 如果我们对1到k个元素做完一次变换后,把整个数组循环左移一个.那么第二次还是对1 到 k个元素做和第一次一样的变换,再左移,再对1 到 k个元素做和第一次一样的变换,依次做完n-k+1即可. 假设题目要求的变换为C    循环左移变换为P.那么对于每次查询 相当于做  n-k+1  (CP) 变换.最后把答案再向右移动n-k+1  回到原来位置即可. 那么问题就解决了   效率    每次查询n log

CodeForces 842D Vitya and Strange Lesson

题目:http://codeforces.com/problemset/problem/842/D 题意:给你n个数,m次查询,每次将数组全部异或一个数后,求没出现过的最小自然数 要求异或后的最小值我们可以用字典树来解决 而每次对数组异或可以替换每次对异或值异或 之后贪心的选取 每次都走左子树,如果左子树满了,才走右子树,这样就能保证是最小 #include<iostream> #include<cstdio> #include<cstring> #include<

【Codeforces 718 A】Efim and Strange Grade

Codeforces 718 A 题意:给一个小数,问最多取\(t\)次四舍五入到某一个小数点后的位后这个数最大能到多少. 思路:首先肯定贪心.(但不知道为什么tag上是\(dp\) 首先我们找到最靠左的一个大于等于5的数,把它四舍五入到上一位, 然后再不断地往前找到下一个大于等于5的数,再四舍五入到上一位... 然后就好了. 原文地址:https://www.cnblogs.com/denverjin/p/10810469.html

Codeforces Gym 101138 D. Strange Queries

Description 给你一下长度为 \(n\) 的序列. \(a_i=a_j\) \(l_1 \leqslant i \leqslant r_1\) \(l_2 \leqslant i \leqslant r_2\) 询问满足条件的 \((i,j)\) 对数. Sol 分块+前缀和. 非常乱搞啊... 首先分块 \(O(\sqrt{n})\) 一块. 然后在每块里统计块中元素出现次数. 先预处理块与块之间的贡献,然后处理不足一块的. 处理块与块之间的时候,需要前缀和优化一下就可以了,枚举当前

CodeForces 718A Efim and Strange Grade (贪心)

题意:给定一个浮点数,让你在时间 t 内,变成一个最大的数,操作只有把某个小数位进行四舍五入,每秒可进行一次. 析:贪心策略就是从小数点开始找第一个大于等于5的,然后进行四舍五入,完成后再看看是不是还可以,一循环下去,直到整数位,或者没时间了. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #include <

Codeforces 1190D. Tokitsukaze and Strange Rectangle

传送门 注意到矩形往上是无限的,考虑把点按 $y$ 从大到小考虑 对于枚举到高度为 $h$ 的点,设当前高度大于等于 $h$ 的点的所有点的不同的 $x$ 坐标数量为 $cnt$ 那么对于这一层高度 $h$ 我们就有 $cnt(cnt+1)/2$ 种不同的 $l$,$r$ ,使得矩形内点集不同 发现对于某些 $x$ 在这一层相邻两点之间,高度大于 $h$ 的点,这样又重复算了它们的贡献,所有要再扣掉 直接用树状数组维护一下当前区间内不同的 $x$ 的数量即可 因为离散化了判断 $x$ 是否出现过

Codeforces Round #261 (Div. 2) 459B. Pashmak and Flowers(数学题,组合)

题目链接:http://codeforces.com/problemset/problem/459/B B. Pashmak and Flowers time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Pashmak decided to give Parmida a pair of flowers from the garden.