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 |
|
|
|
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 |