Fwb Round 421 D 玄关求条
  • 板块学术版
  • 楼主anke2017
  • 当前回复3
  • 已保存回复3
  • 发布时间2025/8/31 09:28
  • 上次更新2025/8/31 18:56:46
查看原帖
Fwb Round 421 D 玄关求条
1076971
anke2017楼主2025/8/31 09:28

其实就是 abc421D 了。跟 Fwb 坐一桌。

:::info[My Submission] https://atcoder.jp/contests/abc421/submissions/68935714 ::: :::error[my code]{open}

#include <bits/stdc++.h>
using namespace std;
#define int long long
struct node
{
    char x;
    int t;
};
vector<node> a,b;
int side(char s)
{
    if(s=='U'||s=='D')
        return 1;
    return -1;
}
int w(char s)
{
    if(s=='D'||s=='R')return 1;
    return -1;
}
int sgn(int x)
{
    if(x>0)return 1;
    if(x<0)return -1;
    return 0;
}
signed main() 
{
    int nx,ny,mx,my;
    cin>>nx>>ny>>mx>>my;
    int n,m,l;cin>>n>>m>>l;
    for(int i=1;i<=m;i++)
    {
        char x;int t;cin>>x>>t;
        if(i-1)t+=a.back().t;
        a.push_back((node){x,t});
    }
    for(int i=1;i<=l;i++)
    {
        char x;int t;cin>>x>>t;
        if(i-1)t+=b.back().t;
        b.push_back((node){x,t});
    }
    int t1=0,t2=0;
    int now=0;//当前时间
    int ans=0;
    while(t1<m&&t2<l)
    {
        if(side(a[t1].x)!=side(b[t2].x))
        {
            if(nx==mx||ny==my);
            else{
            int ls=side(a[t1].x)==1?-w(a[t1].x):w(b[t2].x);
            int rs=side(a[t1].x)==-1?-w(a[t1].x):w(b[t2].x);
            if(abs(nx-mx)==abs(ny-my)&&abs(nx-mx)<=(min(a[t1].t,b[t2].t)-now)&&sgn(nx-mx)==ls&&sgn(ny-my)==rs)
                ans++;
            }
        }
        else
        {
            if(w(a[t1].x)==w(b[t2].x)&&nx==mx&&ny==my)
                ans+=min(a[t1].t,b[t2].t)-now;
            else if(side(a[t1].x)==1?ny==my:nx==mx)
            {
                if(nx==mx&&ny==my);
                else if((abs(nx-mx)+abs(ny-my))%2==0&&w(a[t1].x)!=w(b[t2].x)&&(min(a[t1].t,b[t2].t)-now)*2>=(abs(nx-mx)+abs(ny-my)))
                    ans++;
            }
        }
        if(side(a[t1].x)==1)nx+=(min(a[t1].t,b[t2].t)-now)*w(a[t1].x);
        else ny+=(min(a[t1].t,b[t2].t)-now)*w(a[t1].x);
        if(side(b[t2].x)==1)mx+=(min(a[t1].t,b[t2].t)-now)*w(b[t2].x);
        else my+=(min(a[t1].t,b[t2].t)-now)*w(b[t2].x);
        now=min(a[t1].t,b[t2].t);
        if(a[t1].t<b[t2].t)t1++;
        else if(a[t1].t>b[t2].t)t2++;
        else t1++,t2++;
    }
    cout<<ans<<'\n';
    return 0;
}

:::

2025/8/31 09:28
加载中...