답안 #53765

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
53765 2018-07-01T07:00:52 Z 윤교준(#1438) Fish (IOI08_fish) C++11
49 / 100
3000 ms 44196 KB
#include <bits/stdc++.h>
#define pb push_back
#define eb emplace_back
#define sz(V) ((int)(V).size())
#define rb(x) ((x)&(-(x)))
#define upmin(a,b) (a)=min((a),(b))
#define upmax(a,b) (a)=max((a),(b))
#define INF (0x3f3f3f3f)
#define INFLL (0x3f3f3f3f3f3f3f3fll)
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;

const int MAXN = 500005;
const int MAXK = 7005;
const bool debug = 0;

int D[MAXK][MAXK];

int C[MAXK], O[MAXK], RO[MAXK];
int A[MAXN], B[MAXN];

ll Ans;
int N, K, MOD;

int main() {
	ios::sync_with_stdio(false);

	cin >> N >> K >> MOD;
	for(int i = 1; i <= N; i++) cin >> B[i] >> A[i];

	for(int i = 1; i <= N; i++)
		upmax(C[A[i]], B[i]);
	

	iota(O, O+K+1, 0);
	sort(O+1, O+K+1, [&](int a, int b) {
		return C[a] > C[b];
	});
	for(int i = 1; i <= K; i++) RO[O[i]] = i;

	fill(C, C+K+1, 0);
	for(int i = 1; i <= N; i++) {
		A[i] = RO[A[i]];
		upmax(C[A[i]], B[i]);
	}

	for(int i = 1; i <= K; i++) {
		for(int j = 1; j <= N; j++)
			if(B[j]*2 <= C[i])
				D[i][A[j]]++;
	}

if(debug) {
	for(int i = 1; i <= K; i++) printf("%d : %d\n", i, C[i]);
	for(int i = 1; i <= K; i++) {
		for(int j = 1; j <= K; j++)
			printf("%d ", D[i][j]);
		puts("");
	}
}

	fill(D[0], D[0]+K+1, -1);

	for(int i = 1; i <= K; i++) {
		if(!C[i]) continue;
		ll ret = D[i][i];
		for(int j = i+1; j <= K; j++)
			ret = ret * (D[i][j] + 1) % MOD;
		Ans = (Ans + ret) % MOD;
		if(debug) printf("T1 %d : %lld\n", i, ret);

		ret = 1;
		for(int j = i+1; j <= K; j++)
			ret = ret * (D[i][j] + 1) % MOD;
		for(int j = 1; j < i; j++)
			if(D[j][i] == D[i][i])
				ret = ret * (D[i][j] + 1) % MOD;
		Ans = (Ans + ret) % MOD;
		if(debug) printf("T2 %d : %lld\n", i, ret);
	}

	cout << Ans << endl;

	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 484 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 484 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 696 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 696 KB Output is correct
2 Correct 2 ms 696 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 696 KB Output is correct
2 Correct 188 ms 4564 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 4564 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 4564 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 339 ms 4564 KB Output is correct
2 Correct 266 ms 6736 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 132 ms 6736 KB Output is correct
2 Correct 67 ms 11828 KB Output is correct
3 Correct 129 ms 22124 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3025 ms 22328 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1693 ms 31400 KB Output is correct
2 Execution timed out 3063 ms 31400 KB Time limit exceeded
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3048 ms 31400 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3050 ms 44196 KB Time limit exceeded
# 결과 실행 시간 메모리 Grader output
1 Runtime error 176 ms 44196 KB Execution killed with signal 11 (could be triggered by violating memory limits)
# 결과 실행 시간 메모리 Grader output
1 Runtime error 279 ms 44196 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1964 ms 44196 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1585 ms 44196 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3016 ms 44196 KB Time limit exceeded
2 Halted 0 ms 0 KB -