# |
제출 시각 |
아이디 |
문제 |
언어 |
결과 |
실행 시간 |
메모리 |
262759 |
2020-08-13T08:30:00 Z |
임성재(#5086) |
Pairs (IOI07_pairs) |
C++17 |
|
841 ms |
29920 KB |
#include<bits/stdc++.h>
using namespace std;
#define fast ios::sync_with_stdio(false); cin.tie(0);
#define pre(a) cout << fixed; cout.precision(a);
#define fi first
#define se second
#define em emplace
#define eb emplace_back
#define all(v) (v).begin() (v).end()
#define mp make_pair
#define mt make_tuple
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const ll INF = 1e18;
const int inf = 1e9;
struct point {
ll x[3];
point() {
x[0] = x[1] = x[2] = 0;
}
bool operator<(point &p) {
return mt(x[0], x[1], x[2]) < mt(p.x[0], p.x[1], p.x[2]);
}
};
ll b, n, d, m;
point p[100010];
int cnt[80][80][80];
ll dp[230][80][80][80];
int dp2[230][80][80][80];
int dp3[230][80][80][80];
int tot[80][80][80];
ll dist(int i, int j) {
ll ret = 0;
for(int k=0; k<3; k++) {
ret += abs(p[i].x[k] - p[j].x[k]);
}
return ret;
}
int main() {
fast;
cin >> b >> n >> d >> m;
for(int i=1; i<=n; i++) {
for(int j=0; j<b; j++) {
cin >> p[i].x[j];
}
cnt[p[i].x[0]][p[i].x[1]][p[i].x[2]]++;
}
if(b == 1) {
sort(p+1, p+n+1);
ll ans = 0;
int idx = 1;
for(int i=1; i<=n; i++) {
while(idx <= n && dist(idx, i) <= d) idx++;
ans += idx - i - 1;
}
cout << ans;
return 0;
}
if(b == 2) {
sort(p+1, p+n+1);
for(int i=1; i<=n; i++) {
int x = p[i].x[0];
int y = p[i].x[2];
}
}
if(b == 3) {
for(int i=0; i<=min(d, 3*m-3); i++) {
for(int j=1; j<=m; j++) {
for(int k=1; k<=m; k++) {
for(int l=1; l<=m; l++) {
if(i == 0) {
dp[0][j][k][l] = cnt[j][k][l];
continue;
}
dp[i%3][j][k][l] = dp[(i+2)%3][j+1][k][l];
dp[i%3][j][k][l] += dp[(i+2)%3][j-1][k][l];
if(i > 1 && j > 1 && j < m) dp[i%3][j][k][l] -= dp[(i+1)%3][j][k][l];
if(i == 2) dp[i%3][j][k][l] -= cnt[j][k][l];
}
}
}
for(int j=1; j<=m; j++) {
for(int k=1; k<=m; k++) {
for(int l=1; l<=m; l++) {
dp2[i%3][j][k][l] = dp[i%3][j][k][l];
if(i == 0) continue;
dp2[i%3][j][k][l] += dp2[(i+2)%3][j][k-1][l];
dp2[i%3][j][k][l] += dp2[(i+2)%3][j][k+1][l];
if(i > 1 && k > 1 && k < m) dp2[i%3][j][k][l] -= dp2[(i+1)%3][j][k][l];
if(i > 1) dp2[i%3][j][k][l] -= dp[(i+1)%3][j][k][l];
}
}
}
for(int j=1; j<=m; j++) {
for(int k=1; k<=m; k++) {
for(int l=1; l<=m; l++) {
dp3[i%3][j][k][l] = dp2[i%3][j][k][l];
if(i == 0) continue;
dp3[i%3][j][k][l] += dp3[(i+2)%3][j][k][l-1];
dp3[i%3][j][k][l] += dp3[(i+2)%3][j][k][l+1];
if(i > 1 && l > 1 && l < m) dp3[i%3][j][k][l] -= dp3[(i+1)%3][j][k][l];
if(i > 1) dp3[i%3][j][k][l] -= dp2[(i+1)%3][j][k][l];
tot[j][k][l] += dp3[i%3][j][k][l];
}
}
}
}
ll ans = 0;
for(int i=1; i<=m; i++) {
for(int j=1; j<=m; j++) {
for(int k=1; k<=m; k++) {
ans += (tot[i][j][k] + cnt[i][j][k] - 1) * cnt[i][j][k];
}
}
}
cout << ans / 2;
return 0;
}
}
Compilation message
pairs.cpp: In function 'int main()':
pairs.cpp:80:8: warning: unused variable 'x' [-Wunused-variable]
80 | int x = p[i].x[0];
| ^
pairs.cpp:81:8: warning: unused variable 'y' [-Wunused-variable]
81 | int y = p[i].x[2];
| ^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
2816 KB |
Output is correct |
2 |
Correct |
2 ms |
2816 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
84 ms |
2688 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
85 ms |
2688 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
87 ms |
2688 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
82 ms |
2688 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
81 ms |
2688 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
84 ms |
4992 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
88 ms |
2816 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
86 ms |
2816 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
121 ms |
28792 KB |
Output is correct |
2 |
Correct |
841 ms |
28920 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
21 ms |
3456 KB |
Output is correct |
2 |
Correct |
22 ms |
3620 KB |
Output is correct |
3 |
Correct |
22 ms |
3576 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
57 ms |
22136 KB |
Output is correct |
2 |
Correct |
145 ms |
22136 KB |
Output is correct |
3 |
Correct |
366 ms |
22136 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
162 ms |
29816 KB |
Output is correct |
2 |
Correct |
320 ms |
29908 KB |
Output is correct |
3 |
Correct |
693 ms |
29920 KB |
Output is correct |