Submission #28936

# Submission time Handle Problem Language Result Execution time Memory
28936 2017-07-18T01:32:07 Z 윤교준(#1230) Taxis (POI13_tak) C++11
10 / 100
1000 ms 7880 KB
#include <bits/stdc++.h>
#define pb push_back
#define sz(V) ((int)(V).size())
#define allv(V) ((V).begin()),((V).end())
#define sorv(V) sort(allv(V))
#define univ(V) (V).erase(unique(allv(V)),(V).end())
#define revv(V) reverse(allv(V))
#define clv(V) (V).clear()
#define upmin(a,b) (a)=min((a),(b))
#define upmax(a,b) (a)=max((a),(b))
#define rb(x) ((x)&(-(x)))
#define INF (0x3f3f3f3f)
#define INFLL (0x3f3f3f3f3f3f3f3fll)
#define MAXN (500005)
using namespace std;
typedef long long ll;

ll A[MAXN];
int P[MAXN];
ll L, R;
int N, Ans = INF, Hi;

int main() {
	scanf("%lld%lld%d", &R, &L, &N);
	for(int i = 0; i < N; i++) scanf("%lld", &A[i]);
	sort(A, A+N);
	for(int i = 0; i < N; i++) P[i] = i;
	do {
		int cnt = 0; ll x = 0;
		for(int i = 0; i < N && x < R; i++) {
			if(x < L) {
				if(A[P[i]] <= L-x) continue;
				x += A[P[i]] - (L-x); cnt++;
			} else {
				if(A[P[i]] < R-L) continue;
				cnt++; x = R;
			}
		}
		if(x < R) continue;
		upmin(Ans, cnt);
	} while(next_permutation(P, P+N));
	/*
	Hi = -1; for(int i = 0; i < N; i++) {
		if(A[i] < R-L) continue;
		if(-1 == Hi || A[i] < A[Hi]) Hi = i;
	}
	if(-1 == Hi) { puts("0"); return 0; }
	{
		int cnt = 0, i = N-1; ll x = 0;
		for(; ~i && x < L; i--) {
			if(Hi == i) continue;
			if(A[i] < L-x) break;
			x += A[i] - (L-x); cnt++;
		}
		if(R <= x) upmin(Ans, cnt);
		else if(L <= x) upmin(Ans, cnt+1);
	}
	{
		int cnt = 0, i = N-1; ll x = 0;
		for(; ~i && x < L; i--) {
			if(A[i] < L-x) break;
			x += A[i] - (L-x); cnt++;
		}
		if(R <= x) upmin(Ans, cnt);
		else if(L <= x && ~i && R-x <= A[i]) upmin(Ans, cnt+1);
	}
	*/
	printf("%d\n", INF <= Ans ? 0 : Ans);
	return 0;
}

Compilation message

tak.cpp: In function 'int main()':
tak.cpp:24:33: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%lld%lld%d", &R, &L, &N);
                                 ^
tak.cpp:25:49: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(int i = 0; i < N; i++) scanf("%lld", &A[i]);
                                                 ^
# Verdict Execution time Memory Grader output
1 Correct 0 ms 7880 KB Output is correct
2 Correct 0 ms 7880 KB Output is correct
3 Correct 0 ms 7880 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 1000 ms 7880 KB Execution timed out
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1000 ms 7880 KB Execution timed out
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1000 ms 7880 KB Execution timed out
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1000 ms 7880 KB Execution timed out
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1000 ms 7880 KB Execution timed out
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1000 ms 7880 KB Execution timed out
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1000 ms 7880 KB Execution timed out
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1000 ms 7880 KB Execution timed out
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1000 ms 7880 KB Execution timed out
2 Halted 0 ms 0 KB -