2020-01-24 11:34:00 C++

C++

Copy Copied! Full
#include <bits/stdc++.h> #define ALL(A) (A).begin(),(A).end() #define ll long long #define rep(i,n) for(int i=0;i<(n);i++) const ll mod = 1e9+7; const ll INF = -1*((1LL<<63)+1); const int inf = -1*((1<<31)+1); using namespace std; int N,K,ans = 0; int b[2005][2005]; int s[2005][2005]; int main(void){ cin.tie(0); ios::sync_with_stdio(false); cout<<fixed<<setprecision(20); cin >> N >> K; vector<int> x(N),y(N); vector<char> c(N); // (0,0) と (2*K,0) は同じ // (0,0) と (0,2*K) は同じ rep(i,N){ cin >> x[i] >> y[i] >> c[i]; if(c[i]=='W')x[i]+=K; // (x,y,W) = (x+K,y,B); 市松模様なので x[i]%= 2*K; y[i]%= 2*K; if(y[i]>=K){ y[i] -= K; x[i] += K; x[i] %= 2*K; } } // 各マスについて、黒いマスを塗る rep(i,N)b[x[i]][y[i]]++; // ここでbを二次元累積和に変換する for (int i = 0; i < 2*K; ++i) for (int j = 0; j < 2*K; ++j) s[i+1][j+1] = s[i][j+1] + s[i+1][j] - s[i][j] + b[i][j]; }
RECOMMEND