CE 求条
查看原帖
CE 求条
1065022
Wilting楼主2024/10/11 14:57

RT,老师的Windows机子AC,洛谷CE

const bool Debug = false;
const bool Luogu = true;
const bool Online = false;
const bool Lemon = false;

//#define Debug true
//#define Luogu flase
//#define Online true
//#define Lemon true

#include <set>
#include <map>
#include <list>
#include <queue>
#include <cmath>
#include <ctime>
#include <random>
#include <bitset>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>

#define endl '\n'
#define int long long
#define mod 998244353
#define inf 0x3f3f3f3f
#define lnf 0x3f3f3f3f3f3f3f3f

#ifdef Online
    #define getchar() (_1==_2&&(_2=(_1=buf)+fread(buf,1,1<<20,stdin),_1==_2)?EOF:*_1++)
    char *_1, *_2, buf[(1 << 20) + 5];
#endif

#define min(a,b) (a<b?a:b)
#define max(a,b) (a<b?b:a)
#define abs(a) (max(a,-a))
#define Deout(x) cout<<#x<<"\t=:="<<x<<endl
#define Deline() cout<<"\n-=--=--=--=--=--=--=--=-\n\n"

#ifdef Luogu
    #pragma GCC optimize (1)
    #pragma GCC optimize (2)
    #pragma GCC optimize (3)
    #pragma GCC optimize (4)
    #pragma GCC optimize (5)
    #pragma GCC optimize ("Os")
    #pragma GCC optimize ("Ofast")
#endif

using namespace std;

namespace WTH {
    inline bool input (int& x) {
        x = 0;
        int f = 1;
        bool flag = 0;
        char c = getchar ();

        while (!isdigit(c)) {
            if (c == '-') {
                c = getchar ();

                if (isdigit (c)) {
                    f = -1;
                    break;
                }
            } else {
                c = getchar ();
            }
        }

        while (isdigit (c)) {
            flag = 1;
            x = (x << 3) + (x << 1) + (c ^ 48);
            c = getchar ();
        }

        x *= f;
        return flag;
    }

    inline bool output (int x) {
        if (x < 0) {
            putchar ('-');
            x = -x;
        }

        char write[25], cnt = 0;

        do {
            write[++ cnt] = x % 10;
            x /= 10;
        } while (x);

        do {
            putchar (write[cnt --] | 48);
        } while (cnt);

        return x;
    }
    
    const int N = 2e3 + 5, T = 1e5 + 5;
    
    int s, t, m, n;
    pair <int, int> _Td[T];
    #define Begin first
    #define End second
    int c[N], d[N];
    
    bool _Chck (int i, int j) {
    	int _;
    	bool ji;
    	
    	if (c[i] < d[j]) {
    		_ = d[j] - c[i];
    		
    		if (_ >= s) {
    			return 1;
    		}
    		
    		ji = (s - _) & 1;
    		_ += ((s - _) >> 1);
    		
    		auto it = upper_bound (_Td + 1, _Td + t + 1, {_, lnf});
    		-- it;
    		
    		if (Debug) {
    			Deout (i);
    			Deout (j);
    			Deout (_);
    			Deout (c[i]);
    			Deout (d[j]);
    			Deout (ji);
    			Deout ((* it).Begin);
    			Deout ((* it).End);
    			Deline ();
    		}
    		
    		if (((* it).Begin > _) || ((* it).End <= _)){
    			return 1;
    		}
    		
    		if ((* it).Begin == _) {
    			if (ji) {
    				return 0;
    			}
    			
    			return 1;
    		}
    		
    		return 0;
    	} else {
    		_ = c[i] - d[j];
    		
    		if (_ >= s) {
    			return 1;
    		}
    		
    		ji = (s - _) & 1;
    		_ = ((s - _) >> 1);
    		
    		auto it = upper_bound (_Td + 1, _Td + t + 1, {_, lnf});
    		-- it;
    		
    		if (Debug) {
    			Deout (i);
    			Deout (j);
    			Deout (_);
    			Deout (c[i]);
    			Deout (d[j]);
    			Deout (ji);
    			Deout ((* it).Begin);
    			Deout ((* it).End);
    			Deline ();
    		}
    		
    		if (((* it).Begin > _) || ((* it).End <= _)){
    			return 1;
    		}
    		
//    		if (Debug) {
//    			Deout ("SBSBSB");
//    		}
//    		
    		if ((* it).Begin == _) {
    			if (ji) {
    				return 0;
    			}
    			
    			return 1;
    		}
    		
    		return 0;
    	}
    }

    void Init () {
    }

    void Input () {
    	input (s);
    	input (t);
    	input (m);
    	input (n);
    	
    	for (register int i = 1; i <= t; ++ i) {
    		input (_Td[i].Begin);
    	}
    	
    	for (register int i = 1; i <= t; ++ i) {
    		input (_Td[i].End);
    	}
    	
    	for (register int i = 1; i <= m; ++ i) {
    		input (c[i]);
    	}
    	
    	for (register int i = 1; i <= n; ++ i) {
    		input (d[i]);
    	}
    }

    bool Main () {
    	sort (_Td + 1, _Td + t + 1);
    	
    	for (register int i = 1; i <= m; ++ i) {
    		for (register int j = 1; j <= n; ++ j) {
    			if (_Chck (i, j)) {
    				continue ;
    			}
    			
//    			if (Debug) {
//    				Deout ("HHH");
//    			}
//    			
    			return 1;
    		}
    	}
    	
    	return 0;
    }

    void Output (bool Main_Return) {
    	if (Main_Return) {
    		putchar ('Y');
    		putchar ('E');
    		putchar ('S');
    		putchar ('\n');
    	} else {
    		putchar ('N');
    		putchar ('O');
    		putchar ('\n');
    	}
    }
}

signed main () {
#ifdef Lemon
    freopen ("railway.in", "r", stdin);
    freopen ("railway.out", "w", stdout);
#endif

    int T = 1;
    //cin >> T;

    while (T --) {
    	WTH :: Init ();
    	WTH :: Input ();
    	WTH :: Output (WTH :: Main ());
    }

    return 0;
}

2024/10/11 14:57
加载中...