답안 #135433

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
135433 2019-07-24T05:35:17 Z 윤교준(#3250) PIN (CEOI10_pin) C++14
60 / 100
683 ms 7928 KB
#include <bits/stdc++.h>
#define eb emplace_back
#define sz(V) ((int)(V).size())
#define befv(V) ((V)[sz(V)-2])
#define allv(V) ((V).begin()),((V).end())
#define sorv(V) sort(allv(V))
#define INF (0x3f3f3f3f)
#define INFLL (0x3f3f3f3f3f3f3f3fll)
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;

int B[36][36][36][36];
int A[50005][4];

ll Ans;
int N, K;

ll preans = -1;
ll solve2() {
	if(0 <= preans) return preans;
	ll ret = 0;
	for(int i = 0; i < N; i++) {
		int a = A[i][0], b = A[i][1], c = A[i][2], d = A[i][3];
		for(int j = 0; j < 36; j++) if(j != a) {
			for(int k = 0; k < 36; k++) {
				if(k != b) ret += B[j][k][c][d];
				if(k != c) ret += B[j][b][k][d];
				if(k != d) ret += B[j][b][c][k];
			}
		}
		for(int j = 0; j < 36; j++) if(j != b) {
			for(int k = 0; k < 36; k++) {
				if(k != c) ret += B[a][j][k][d];
				if(k != d) ret += B[a][j][c][k];
			}
		}
		for(int j = 0; j < 36; j++) if(j != c) {
			for(int k = 0; k < 36; k++) if(k != d)
				ret += B[a][b][j][k];
		}
	}
	return preans = (ret >> 1);
}

ll solve1() {
	int ret = 0;
	for(int i = 0; i < N; i++) {
		int a = A[i][0], b = A[i][1], c = A[i][2], d = A[i][3];
		for(int j = 0; j < 36; j++) {
			if(j != a) ret += B[j][b][c][d];
			if(j != b) ret += B[a][j][c][d];
			if(j != c) ret += B[a][b][j][d];
			if(j != d) ret += B[a][b][c][j];
		}
	}
	return ret >> 1;
}

int C[4][36];
ll solve4() {
	ll ret = ll(N) * (N-1) >> 1;
	ll d2 = solve2(), d1 = solve1();
	for(int i = 0; i < N; i++) {
		for(int j = 0; j < 4; j++)
			C[j][A[i][j]]++;
	}

	ll one = 0;
	for(int i = 0; i < 4; i++) {
		for(int j = 0; j < 36; j++) {
			one += (ll(C[i][j]) * (C[i][j]-1)) >> 1;
		}
	}
	one -= d2 + (d1<<1);

	return ret - one + d2;
}

ll solve3() {
	return (ll(N) * (N-1) >> 1) - solve1() - solve2() - solve3();
}

int main() {
	scanf("%d%d", &N, &K);
	for(int i = 0; i < N; i++) {
		char str[5]; scanf(" %s", str);
		for(int j = 0; j < 4; j++) {
			if('0' <= str[j] && str[j] <= '9')
				A[i][j] = str[j] & 15;
			else A[i][j] = str[j] - 'a' + 10;
		}
		B[A[i][0]][A[i][1]][A[i][2]][A[i][3]]++;
	}

	if(1 == K) Ans = solve1();
	else if(2 == K) Ans = solve2();

	cout << Ans << endl;
	return 0;
}

Compilation message

pin.cpp: In function 'int main()':
pin.cpp:85:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &N, &K);
  ~~~~~^~~~~~~~~~~~~~~~
pin.cpp:87:21: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   char str[5]; scanf(" %s", str);
                ~~~~~^~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 1656 KB Output is correct
2 Correct 18 ms 1656 KB Output is correct
3 Incorrect 3 ms 1660 KB Output isn't correct
4 Correct 10 ms 2040 KB Output is correct
5 Correct 13 ms 2092 KB Output is correct
6 Correct 206 ms 2176 KB Output is correct
7 Correct 167 ms 2168 KB Output is correct
8 Correct 14 ms 2168 KB Output is correct
9 Correct 18 ms 2556 KB Output is correct
10 Correct 413 ms 2656 KB Output is correct
11 Correct 222 ms 2296 KB Output is correct
12 Incorrect 9 ms 2680 KB Output isn't correct
13 Incorrect 7 ms 2296 KB Output isn't correct
14 Incorrect 6 ms 2168 KB Output isn't correct
15 Incorrect 9 ms 2556 KB Output isn't correct
16 Correct 25 ms 7544 KB Output is correct
17 Correct 683 ms 7928 KB Output is correct
18 Incorrect 14 ms 7644 KB Output isn't correct
19 Incorrect 14 ms 7748 KB Output isn't correct
20 Incorrect 16 ms 7928 KB Output isn't correct