# |
제출 시각 |
아이디 |
문제 |
언어 |
결과 |
실행 시간 |
메모리 |
54607 |
2018-07-04T07:57:00 Z |
나는김현수(#2054) |
Pairs (IOI07_pairs) |
C++11 |
|
179 ms |
24136 KB |
#include<bits/stdc++.h>
using namespace std;
const int L = 262144;
int n, d, m, x[100005], y[100005], z[100005];
long long ans;
vector<int> a;
void solve1 () {
for(int i=1;i<=n;i++) {
scanf("%d",&x[i]);
a.push_back(x[i]);
}
sort(a.begin(), a.end());
for(int i=0;i<n;i++) {
int I = lower_bound(a.begin(), a.end(), a[i]-d) - a.begin();
ans += i - I;
}
}
struct segtree {
int v[2*L];
void upd (int P, int V) {
P += L;
while(P) {
v[P] += V;
P /= 2;
}
}
int get (int S, int E) {
S += L;
E += L;
int R = 0;
while(S <= E) {
if(S % 2 == 1) R += v[S++];
if(E % 2 == 0) R += v[E--];
S /= 2;
E /= 2;
}
return R;
}
} seg;
vector<int> b[150005];
void solve2 () {
for(int i=1;i<=n;i++) {
scanf("%d%d",&x[i],&y[i]);
b[x[i]+y[i]-1].push_back(x[i]-y[i]+m);
}
for(int i=1;i<=2*m;i++) {
for(auto &T : b[i]) {
ans += seg.get(max(0,T-d), min(2*m,T+d));
seg.upd(T, 1);
}
if(i - d <= 0) continue;
for(auto &T : b[i-d]) {
seg.upd(T, -1);
}
}
}
int sum[75][155][155];
int f (int Z, int XS, int XE, int YS, int YE) {
XS = max(XS, 1);
YS = max(YS, 1);
XE = min(XE, 2*m);
YE = min(YE, 2*m);
return sum[Z][XE][YE] - sum[Z][XS-1][YE] - sum[Z][XE][YS-1] + sum[Z][XS-1][YS-1];
}
void solve3 () {
for(int i=1;i<=n;i++) {
scanf("%d%d%d",&x[i],&y[i],&z[i]);
sum[z[i]][x[i]+y[i]-1][x[i]-y[i]+m]++;
}
for(int i=1;i<=m;i++) {
for(int j=1;j<=2*m;j++) {
for(int k=1;k<=2*m;k++) {
sum[i][j][k] += sum[i][j-1][k] + sum[i][j][k-1] - sum[i][j-1][k-1];
}
}
}
for(int i=1;i<=n;i++) {
int X = x[i]+y[i]-1, Y = x[i]-y[i]+m, Z = z[i];
ans += f(Z, X-d, X+d, Y-d, Y+d) - 1;
for(int j=1;j<=d;j++) {
int D = d - j;
if(Z >= j) ans += f(Z-j, X-D, X+D, Y-D, Y+D);
if(Z <= m-j) ans += f(Z+j, X-D, X+D, Y-D, Y+D);
}
}
ans /= 2;
}
int main()
{
int TC;
scanf("%d%d%d%d",&TC,&n,&d,&m);
if(TC == 1) solve1();
if(TC == 2) solve2();
if(TC == 3) solve3();
printf("%lld\n",ans);
}
Compilation message
pairs.cpp: In function 'void solve1()':
pairs.cpp:13:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",&x[i]);
~~~~~^~~~~~~~~~~~
pairs.cpp: In function 'void solve2()':
pairs.cpp:50:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d",&x[i],&y[i]);
~~~~~^~~~~~~~~~~~~~~~~~~~
pairs.cpp: In function 'void solve3()':
pairs.cpp:77:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d%d",&x[i],&y[i],&z[i]);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
pairs.cpp: In function 'int main()':
pairs.cpp:102:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d%d%d",&TC,&n,&d,&m);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
3832 KB |
Output is correct |
2 |
Correct |
4 ms |
3944 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
4020 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
26 ms |
4992 KB |
Output is correct |
2 |
Correct |
28 ms |
4992 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
36 ms |
4992 KB |
Output is correct |
2 |
Correct |
32 ms |
4992 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
40 ms |
4992 KB |
Output is correct |
2 |
Correct |
34 ms |
5072 KB |
Output is correct |
3 |
Correct |
36 ms |
5072 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
5244 KB |
Output is correct |
2 |
Correct |
7 ms |
5264 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
32 ms |
5452 KB |
Output is correct |
2 |
Correct |
30 ms |
5452 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
39 ms |
5580 KB |
Output is correct |
2 |
Correct |
42 ms |
5580 KB |
Output is correct |
3 |
Correct |
41 ms |
5580 KB |
Output is correct |
4 |
Correct |
40 ms |
5580 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
75 ms |
7988 KB |
Output is correct |
2 |
Correct |
86 ms |
8060 KB |
Output is correct |
3 |
Correct |
54 ms |
8060 KB |
Output is correct |
4 |
Correct |
50 ms |
8060 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
29 ms |
21756 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
36 ms |
21756 KB |
Output is correct |
2 |
Correct |
38 ms |
21756 KB |
Output is correct |
3 |
Correct |
42 ms |
21756 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
72 ms |
21756 KB |
Output is correct |
2 |
Correct |
157 ms |
21756 KB |
Output is correct |
3 |
Correct |
117 ms |
21756 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
179 ms |
24136 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |