Submission #1231212


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

#define REP(i,n) for(int i=0,_n=(int)(n); i < _n; i++)
template<class T> bool chmax(T &a, T b) { return a < b ? (a = b, true) : false; }
template<class T> bool chmin(T &a, T b) { return a > b ? (a = b, true) : false; }

typedef long long ll;

const int MAX_N = 100000 + 10;
int R, C, K, N;
pair<int,int> rc[MAX_N];
int col[100000 + 10];
int rcol[100000 + 10];

int main2() {
  memset(col, 0, sizeof(col));
  memset(rcol, 0, sizeof(rcol));

  scanf("%d%d%d", &R, &C, &K);
  scanf("%d", &N);
  REP(i, N) {
    int r, c;
    scanf("%d%d", &r, &c);
    rc[i] = {r, c};
  }
  sort(rc, rc + N);

  // 以下のようにして、各行に対して O(1) 程度で数える。
  // col[c] により列 c にいくつの点があるかを保持する。
  // rcol[t] により 点をt個持つ列の個数を保持する。
  // 今見ている行にある点を除く( col[c], rcol[t] を操作する )
  // t = K - [今見ている行にある点の個数] として rcol[t] を答えに足す
  // 今見ていた行にある点を戻す ( col[c], rcol[t] を操作する )

  rcol[0] = C;
  REP(i, N) {
    int c = rc[i].second;
    --rcol[ col[c] ];
    ++col[c];
    ++rcol[ col[c] ];
  }

  ll ans = 0;

  int sp = 0;
  for (int r = 1; r <= R; r++) {
    int len = 0;
    while (sp + len < N && rc[sp + len].first == r) len++;
    
    for (int i = sp; i < sp + len; i++) {
      int c = rc[i].second;
      --rcol[ col[c] ];
      --col[c];
      ++rcol[ col[c] ];
    }

    int t = K - len; 
    if (t >= 0)
      ans += rcol[t];

    for (int i = sp; i < sp + len; i++) {
      int c = rc[i].second;
      --rcol[ col[c] ];
      ++col[c];
      ++rcol[ col[c] ];
    }

    sp = sp + len;
  }

  cout << ans << endl;

  return 0;
}

int main() {
  for (;!cin.eof();cin>>ws) main2();
  return 0;
}

Submission Info

Submission Time
Task C - 収集王
User hs484
Language C++14 (GCC 5.4.1)
Score 100
Code Size 1930 Byte
Status AC
Exec Time 27 ms
Memory 1792 KB

Compile Error

./Main.cpp: In function ‘int main2()’:
./Main.cpp:20:30: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d%d", &R, &C, &K);
                              ^
./Main.cpp:21:18: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &N);
                  ^
./Main.cpp:24:26: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d", &r, &c);
                          ^

Judge Result

Set Name Sample Subtask1 Subtask2
Score / Max Score 0 / 0 30 / 30 70 / 70
Status
AC × 3
AC × 18
AC × 33
Set Name Test Cases
Sample subtask0-sample01.txt, subtask0-sample02.txt, subtask0-sample03.txt
Subtask1 subtask0-sample01.txt, subtask0-sample02.txt, subtask0-sample03.txt, subtask1-01.txt, subtask1-02.txt, subtask1-03.txt, subtask1-04.txt, subtask1-05.txt, subtask1-06.txt, subtask1-07.txt, subtask1-08.txt, subtask1-09.txt, subtask1-10.txt, subtask1-11.txt, subtask1-12.txt, subtask1-13.txt, subtask1-14.txt, subtask1-15.txt
Subtask2 subtask0-sample01.txt, subtask0-sample02.txt, subtask0-sample03.txt, subtask1-01.txt, subtask1-02.txt, subtask1-03.txt, subtask1-04.txt, subtask1-05.txt, subtask1-06.txt, subtask1-07.txt, subtask1-08.txt, subtask1-09.txt, subtask1-10.txt, subtask1-11.txt, subtask1-12.txt, subtask1-13.txt, subtask1-14.txt, subtask1-15.txt, subtask2-01.txt, subtask2-02.txt, subtask2-03.txt, subtask2-04.txt, subtask2-05.txt, subtask2-06.txt, subtask2-07.txt, subtask2-08.txt, subtask2-09.txt, subtask2-10.txt, subtask2-11.txt, subtask2-12.txt, subtask2-13.txt, subtask2-14.txt, subtask2-15.txt
Case Name Status Exec Time Memory
subtask0-sample01.txt AC 1 ms 1024 KB
subtask0-sample02.txt AC 2 ms 1024 KB
subtask0-sample03.txt AC 1 ms 1024 KB
subtask1-01.txt AC 1 ms 1024 KB
subtask1-02.txt AC 1 ms 1024 KB
subtask1-03.txt AC 1 ms 1024 KB
subtask1-04.txt AC 1 ms 1024 KB
subtask1-05.txt AC 1 ms 1024 KB
subtask1-06.txt AC 1 ms 1024 KB
subtask1-07.txt AC 1 ms 1024 KB
subtask1-08.txt AC 2 ms 1024 KB
subtask1-09.txt AC 1 ms 1024 KB
subtask1-10.txt AC 2 ms 1024 KB
subtask1-11.txt AC 2 ms 1024 KB
subtask1-12.txt AC 1 ms 1024 KB
subtask1-13.txt AC 1 ms 1024 KB
subtask1-14.txt AC 2 ms 1024 KB
subtask1-15.txt AC 2 ms 1024 KB
subtask2-01.txt AC 2 ms 1024 KB
subtask2-02.txt AC 2 ms 1024 KB
subtask2-03.txt AC 9 ms 1280 KB
subtask2-04.txt AC 19 ms 1792 KB
subtask2-05.txt AC 26 ms 1792 KB
subtask2-06.txt AC 27 ms 1792 KB
subtask2-07.txt AC 25 ms 1792 KB
subtask2-08.txt AC 27 ms 1792 KB
subtask2-09.txt AC 27 ms 1792 KB
subtask2-10.txt AC 27 ms 1792 KB
subtask2-11.txt AC 27 ms 1792 KB
subtask2-12.txt AC 27 ms 1792 KB
subtask2-13.txt AC 27 ms 1792 KB
subtask2-14.txt AC 27 ms 1792 KB
subtask2-15.txt AC 27 ms 1792 KB