結果
問題 | No.1997 X Lighting |
ユーザー |
![]() |
提出日時 | 2022-07-03 11:43:03 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 54 ms / 2,000 ms |
コード長 | 1,925 bytes |
コンパイル時間 | 475 ms |
コンパイル使用メモリ | 46,792 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-29 02:01:03 |
合計ジャッジ時間 | 2,852 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 30 |
ソースコード
/* -*- coding: utf-8 -*-** 1997.cc: No.1997 X Lighting - yukicoder*/#include<cstdio>#include<algorithm>using namespace std;/* constant */const int MAX_M = 100000;/* typedef */typedef long long ll;/* global variables */int ks0[2], ks1[2];ll ds0[2][MAX_M], ds1[2][MAX_M];/* subroutines */inline ll xy2id0(ll n, ll x, ll y) { return x + y; }inline ll xy2id1(ll n, ll x, ll y) { return x + (n - 1 - y); }/* main */int main() {ll n;int m;scanf("%lld%d", &n, &m);for (int i = 0; i < m; i++) {ll xi, yi;scanf("%lld%lld", &xi, &yi);xi--, yi--;ll d0 = xy2id0(n, xi, yi);ll d1 = xy2id1(n, xi, yi);int p0 = d0 & 1, p1 = d1 & 1;ds0[p0][ks0[p0]++] = d0;ds1[p1][ks1[p1]++] = d1;}for (int i = 0; i < 2; i++) {sort(ds0[i], ds0[i] + ks0[i]);sort(ds1[i], ds1[i] + ks1[i]);ks0[i] = unique(ds0[i], ds0[i] + ks0[i]) - ds0[i];ks1[i] = unique(ds1[i], ds1[i] + ks1[i]) - ds1[i];}ll sum = 0;for (int i = 0; i < 2; i++) {for (int j = 0; j < ks0[i]; j++) {ll d0 = ds0[i][j];ll minx = max(0LL, d0 - (n - 1));ll maxx = min(n - 1, d0);sum += maxx + 1 - minx;//printf("%lld: %lld,%lld\n", d0, minx, maxx);}}for (int i = 0; i < 2; i++) {for (int j = 0; j < ks1[i]; j++) {ll d1 = ds1[i][j];ll minx = max(0LL, d1 - (n - 1));ll maxx = min(n - 1, d1);sum += maxx + 1 - minx;ll miny = n - 1 - (d1 - minx);ll maxy = n - 1 - (d1 - maxx);//printf("%lld: %lld,%lld %lld,%lld\n", d1, minx, miny, maxx, maxy);ll mind0 = xy2id0(n, minx, miny);ll maxd0 = xy2id0(n, maxx, maxy);int p0 = mind0 & 1;int j0 = lower_bound(ds0[p0], ds0[p0] + ks0[p0], mind0) - ds0[p0];int j1 = upper_bound(ds0[p0], ds0[p0] + ks0[p0], maxd0) - ds0[p0];sum -= j1 - j0;}}printf("%lld\n", sum);return 0;}