求条ABC D
  • 板块学术版
  • 楼主Night_sea_64
  • 当前回复2
  • 已保存回复2
  • 发布时间2025/8/30 21:43
  • 上次更新2025/8/31 13:57:56
查看原帖
求条ABC D
554145
Night_sea_64楼主2025/8/30 21:43

卡了一整场没调对

#include<iostream>
#include<algorithm>
#include<cmath>
#define int long long
using namespace std;
int xa,ya,xb,yb;
int n,m,l;
const int mr=1e5+10;
struct node{char c;int cnt;}a[mr],b[mr];
int cura,curb;
int ab(int x)
{
    return (x>0?x:-x);
}
signed main()
{
    cin>>xa>>ya>>xb>>yb>>n>>m>>l;
    if((xa+ya)%2!=(xb+yb)%2)
    {
        cout<<0<<endl;
        return 0;
    }
    for(int i=1;i<=m;i++)cin>>a[i].c>>a[i].cnt;
    for(int i=1;i<=l;i++)cin>>b[i].c>>b[i].cnt;
    cura=curb=1;
    int ans=0;
    while(cura<=m&&curb<=l)
    {
        int ncnt=min(a[cura].cnt,b[curb].cnt);
        int nxa=xa,nya=ya,nxb=xb,nyb=yb;
        if(a[cura].c=='U')nxa-=ncnt,xa--;
        if(a[cura].c=='D')nxa+=ncnt,xa++;
        if(a[cura].c=='L')nya-=ncnt,ya--;
        if(a[cura].c=='R')nya+=ncnt,ya++;
        if(b[curb].c=='U')nxb-=ncnt,xb--;
        if(b[curb].c=='D')nxb+=ncnt,xb++;
        if(b[curb].c=='L')nyb-=ncnt,yb--;
        if(b[curb].c=='R')nyb+=ncnt,yb++;
        bool flag=1;
        if(xa==xb&&ya==yb&&nxa==nxb&&nya==nyb)ans+=ncnt;
        else
        {
            if(a[cura].c!=b[curb].c)
            {
                if(a[cura].c=='U'&&b[curb].c=='D'||a[cura].c=='D'&&b[curb].c=='U')
                {
                    if(min(nxa,xa)<=max(nxb,xb)&&min(nxb,xb)<=max(nxa,xa)&&min(nya,ya)<=max(nyb,yb)&&min(nyb,yb)<=max(nya,ya)&&xa%2==xb%2)ans++;
                }
                else if(a[cura].c=='L'&&b[curb].c=='R'||a[cura].c=='R'&&b[curb].c=='L')
                {
                    if(min(nxa,xa)<=max(nxb,xb)&&min(nxb,xb)<=max(nxa,xa)&&min(nya,ya)<=max(nyb,yb)&&min(nyb,yb)<=max(nya,ya)&&ya%2==yb%2)ans++;
                }
                else
                {
                    if(min(nxa,xa)<=max(nxb,xb)&&min(nxb,xb)<=max(nxa,xa)&&min(nya,ya)<=max(nyb,yb)&&min(nyb,yb)<=max(nya,ya)&&ab(ya-yb)==ab(xa-xb))ans++;
                }
            }
        }
        xa=nxa,ya=nya,xb=nxb,yb=nyb;
        a[cura].cnt-=ncnt,b[curb].cnt-=ncnt;
        if(a[cura].cnt==0)cura++;
        if(b[curb].cnt==0)curb++;
    }
    cout<<ans<<endl;
    return 0;
}
2025/8/30 21:43
加载中...