Submission

Status:
PPPPPPPPPP

Score: 100

User: njoop

Problemset: ลำแสงเลเซอร์สะท้อน

Language: cpp

Time: 0.003 second

Submitted On: 2024-11-26 20:31:53

#include <bits/stdc++.h>

using namespace std;

int fi[510], si[510], n, m, ans;
map<int, int> mp;

struct ray {
    int start;
    int end;
    int state;
};

int check(ray first, ray second) {
    bool mark = 0;
    if(first.start == second.start && first.state == second.state) {
        int in = first.start;
        if(mp[in] == 0) {
            mp[in]++;
            return 1;
        }
        mark = 1;
    }
    if(first.end == second.end && first.state == second.state) {
        int in = first.end;
        if(mp[in] == 0) {
            mp[in]++;
            return 1;
        }
        mark = 1;
    }
    if(first.start == second.end && first.state != second.state) {
        int in = first.start;
        if(mp[in] == 0) {
            mp[in]++;
            return 1;
        }
        mark = 1;
    }
    if(first.end == second.start && first.state != second.state) {
        int in = first.end;
        if(mp[in] == 0) {
            mp[in]++;
            return 1;
        }
        mark = 1;
    }
    if(mark) {
        return 0;
    }
    if(first.start > second.start) swap(first, second);
    if(first.state == second.state) {
        if(first.end > second.end) {
            return 1;
        }
    } else {
        if(second.start < first.end) {
            return 1;
        }
    }
    return 0;
}

int main() {
    cin >> n >> m;
    for(int i=1; i<=n; i++) {
        cin >> fi[i];
    }    
    for(int i=1; i<=m; i++) {
        cin >> si[i];
    }
    for(int i=0; i<m; i++) {
        for(int j=0; j<n; j++) {
            ans += check({fi[j], fi[j+1], j%2},  {si[i], si[i+1], i%2});
        }
    }
    cout << ans;
    return 0;
}