# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1170849 | KasymK | 무지개나라 (APIO17_rainbow) | C++20 | 0 ms | 0 KiB |
#include "bits/stdc++.h"
using namespace std;
#define ff first
#define ss second
#define all(v) v.begin(), v.end()
#define ll long long
#define pb push_back
#define pii pair<int, int>
#define pli pair<ll, int>
#define pll pair<ll, ll>
#define tr(i, c) for(auto i = c.begin(); i != c.end(); ++i)
#define wr puts("----------------")
template<class T>bool umin(T& a,T b){if(a>b){a=b;return 1;}return 0;}
template<class T>bool umax(T& a,T b){if(a<b){a=b;return 1;}return 0;}
const int N = 2e5+5;
int v[3][N], n, m, par[3][N];
void init(int r, int c, int sr, int sc, int M, string s){
v[sr][sc]=1;
n=r, m=c;
for(int i = 0; i < M; ++i){
if(s[i] == 'N')
sr--;
if(s[i] == 'E')
sc++;
if(s[i] == 'W')
sc--;
if(s[i] == 'S')
sr++;
v[sr][sc]=1;
}
v[1][0]=v[2][0]=1;
for(int i = 1; i <= m; ++i)
par[1][i]=par[1][i-1]+(v[1][i-1] and !v[1][i]), par[2][i]=par[2][i-1]+(v[2][i-1] and !v[2][i]), par[3][i] = par[3][i-1] + (v[1][i-1] and v[2][i-1] and (!v[1][i] or !v[2][i]));
}
int colour(int ar, int ac, int br, int bc){
if(ar!=br)
return (par[3][bc]-par[3][ac-1]+(v[2][ac-1]+v[1][ac-1]!=2 and v[2][ac]+v[1][ac]!=2));
return (par[ar][bc]-par[ar][ac-1]+(!v[ar][ac] and !v[ar][ac-1]));
}