Educational Codeforces Round 100 (Rated for Div. 2) C. Busy Robot

文章描述了一个编程问题,涉及在给定时间和空间限制下判断指令的有效性,通过遍历并计算当前位置和后续指令的可能覆盖范围来确定答案。代码展示了如何使用C++实现这一逻辑。
摘要由CSDN通过智能技术生成

链接:Problem - C - Codeforces

思路:遍历 先判断当前操作执不执行 若执行 则更新走之前的时间和地点 和 走之后的时间和地点 若我走到头都下一个指令都不到 即当前指令有效 当前指令若不执行 则判断上次有效指令走之前的时间当前时间能走到什么位置 和下一次指令的开始时间能走到哪 若当前的目标位置为这个范围之内 则当前指令有效

#include<bits/stdc++.h>
#define ios ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
using namespace std;using ll = long long;using PLL = pair<ll,ll>;
const ll MAX = 1e18;const ll MIN = -1e18;const ll INF=0x3f3f3f3f;
const ll Q = 2e5+9;const ll MOD = 1e9 + 7;
ll ti[Q],pos[Q];
void solve(){
    ll n;cin>>n;
    for (ll i = 1; i <= n; i++)
    {
        cin>>ti[i]>>pos[i];
    }
    ti[n+1]=MAX;
    ll ans=0;
    ll prepos=0,nowpos=0;
    ll pretime=0,nowtime=0;
    for (ll i = 1; i <= n; i++)
    {
        if(ti[i]>=nowtime){
            pretime=ti[i];
            prepos=nowpos;
            nowtime=ti[i]+abs(prepos-pos[i]);
            nowpos=pos[i];
            if(ti[i+1]>=nowtime) ans++;
        }else{
            ll l,r;
            if(nowpos>prepos)
            {
                l=prepos+(ti[i]-pretime);
                r=min(prepos+(ti[i+1]-pretime),nowpos);
                if((pos[i]>=l and pos[i]<=r)){
                    ans++;
                }
            }else{
                l=prepos-(ti[i]-pretime);
                r=max(prepos-(ti[i+1]-pretime),nowpos);
                if((pos[i]<=l and pos[i]>=r)){
                    ans++;
                }
            }

        }

    }
    cout<<ans<<"\n";

}
int main(){
    ios;ll _=1;cin>>_;
    while (_--)solve();
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值