Submission #3004700
Source Code Expand
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <vector>
#include <string>
#include <sstream>
#include <set>
#include <map>
#include <iostream>
#include <utility>
#include <cctype>
#include <queue>
#include <stack>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <unordered_set>
#include <unordered_map>
#include <limits.h>
#include <cstring>
#include <tuple>
#include <cassert>
#include <numeric>
using namespace std;
// type alias
typedef long long LL;
typedef vector < int > VI;
typedef unordered_map < int, int > MAPII;
typedef unordered_set < int > SETI;
typedef pair< int , int > II;
typedef tuple< int, int, int > III;
// repetition
#define FORE(i,a,b) for(int i=(a);i<=(b);++i)
#define REPE(i,n) for(int i=0;i<=(n);++i)
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n) for(int i=0;i<(n);++i)
#define FORR(x,arr) for(auto& x:arr)
#define SZ(a) int((a).size())
// DP
#define MINUS(dp) memset(dp, -1, sizeof(dp))
#define ZERO(dp) memset(dp, 0, sizeof(dp))
// minmax
#define SMAX(a,b) a = max(a,b)
#define SMIN(a,b) a = min(a,b)
// debug cerr
#define TRACE true
#define dump(x) if(TRACE) { cerr << #x << " = " << (x) << endl; }
#define dump2(x,y) if(TRACE) { cerr << #x << " = " << (x) << ", " << #y << " = " << (y) << endl; }
#define dump3(x,y,z) if(TRACE) { cerr << #x << " = " << (x) << ", " << #y << " = " << (y) << ", " << #z << " = " << (z) << endl; }
#define dump4(x,y,z,a) if(TRACE) { cerr << #x << " = " << (x) << ", " << #y << " = " << (y) << ", " << #z << " = " << (z) << ", " << #a << " = " << (a) << endl; }
#define dumpAR(ar) if(TRACE) { FORR(x,(ar)) { cerr << x << ','; } cerr << endl; }
/*
8/12/2018
22:10-22:45 give up
I tried to solve by brute-forcing from 1 to 24 or finding greedy strategy. However no luck.
8/13/2018
14:00- read editorials
Editorials:
- https://img.atcoder.jp/cf17-final/editorial.pdf
Cities are mapped to a ring with 24 points.
We want to maximize distance with adjacent point.
We can choose T[i] or 24-T[i] for city `i`.
If there are three cities, at least two cities share the same time T[i] or 24-T[i].
=> res = 0
Two cities at T[i]
=> they should be placed at T[i] and 24-T[i] respectively
Otherwise we can choose T[i] or 24-T[i].
There can exist 2^11 options for those cities. We can brute-force them.
Key:
- Problem is reduced to ring
- Three cities with same time => res=0
Summary:
- I didn't have idea of projecting to "ring" (we need to see 18-24 = 6 hours gap too)
*/
// $ g++ -std=c++14 -Wall -O2 -D_GLIBCXX_DEBUG x.cpp && ./a.out
const int MAX_N=50+1;
int N;
int D[MAX_N];
int cnt[13]={};
int solve() {
cnt[0]=1;
REP(i,N)cnt[D[i]]++;
FOR(i,1,12) if(cnt[i]>2) return 0;
if(cnt[0]>1) return 0;
if(cnt[12]>1) return 0;
int res=0;
REP(mask,1<<11) {
VI X;
if(cnt[0]) X.push_back(0);
if(cnt[12]) X.push_back(12);
REP(i,11) if(cnt[i+1]>0) {
int t=i+1;
if(cnt[t]>1) X.push_back(t),X.push_back(24-t);
else X.push_back(((mask>>i)&1)?t:24-t);
}
sort(X.begin(),X.end());
X.push_back(24);
int ming=25;
REP(i,SZ(X)-1) SMIN(ming,X[i+1]-X[i]);
// dump(ming);
// dumpAR(X);
SMAX(res,ming);
}
return res;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>N;
REP(i,N) cin>>D[i];
cout<<solve()<<endl;
return 0;
}
Submission Info
Submission Time |
|
Task |
C - Time Gap |
User |
kumalimak |
Language |
C++14 (Clang 3.8.0) |
Score |
500 |
Code Size |
3498 Byte |
Status |
AC |
Exec Time |
5 ms |
Memory |
504 KB |
Judge Result
Set Name |
sample |
All |
Score / Max Score |
0 / 0 |
500 / 500 |
Status |
|
|
Set Name |
Test Cases |
sample |
sample-01.txt, sample-02.txt, sample-03.txt |
All |
sample-01.txt, sample-02.txt, sample-03.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt, 01-31.txt, 01-32.txt, 01-33.txt, 01-34.txt, 01-35.txt, 01-36.txt, 01-37.txt, 01-38.txt, 01-39.txt, 01-40.txt, 01-41.txt, 01-42.txt, 01-43.txt, sample-01.txt, sample-02.txt, sample-03.txt |
Case Name |
Status |
Exec Time |
Memory |
01-01.txt |
AC |
5 ms |
504 KB |
01-02.txt |
AC |
2 ms |
256 KB |
01-03.txt |
AC |
2 ms |
256 KB |
01-04.txt |
AC |
1 ms |
256 KB |
01-05.txt |
AC |
1 ms |
256 KB |
01-06.txt |
AC |
1 ms |
256 KB |
01-07.txt |
AC |
1 ms |
256 KB |
01-08.txt |
AC |
2 ms |
256 KB |
01-09.txt |
AC |
1 ms |
256 KB |
01-10.txt |
AC |
2 ms |
256 KB |
01-11.txt |
AC |
1 ms |
256 KB |
01-12.txt |
AC |
1 ms |
256 KB |
01-13.txt |
AC |
1 ms |
256 KB |
01-14.txt |
AC |
1 ms |
256 KB |
01-15.txt |
AC |
1 ms |
256 KB |
01-16.txt |
AC |
1 ms |
256 KB |
01-17.txt |
AC |
1 ms |
256 KB |
01-18.txt |
AC |
1 ms |
256 KB |
01-19.txt |
AC |
1 ms |
256 KB |
01-20.txt |
AC |
1 ms |
256 KB |
01-21.txt |
AC |
1 ms |
256 KB |
01-22.txt |
AC |
2 ms |
256 KB |
01-23.txt |
AC |
2 ms |
256 KB |
01-24.txt |
AC |
2 ms |
256 KB |
01-25.txt |
AC |
1 ms |
256 KB |
01-26.txt |
AC |
2 ms |
256 KB |
01-27.txt |
AC |
1 ms |
256 KB |
01-28.txt |
AC |
1 ms |
256 KB |
01-29.txt |
AC |
2 ms |
256 KB |
01-30.txt |
AC |
2 ms |
256 KB |
01-31.txt |
AC |
2 ms |
256 KB |
01-32.txt |
AC |
2 ms |
256 KB |
01-33.txt |
AC |
2 ms |
256 KB |
01-34.txt |
AC |
2 ms |
256 KB |
01-35.txt |
AC |
2 ms |
256 KB |
01-36.txt |
AC |
2 ms |
256 KB |
01-37.txt |
AC |
2 ms |
256 KB |
01-38.txt |
AC |
2 ms |
256 KB |
01-39.txt |
AC |
2 ms |
256 KB |
01-40.txt |
AC |
1 ms |
256 KB |
01-41.txt |
AC |
1 ms |
256 KB |
01-42.txt |
AC |
1 ms |
256 KB |
01-43.txt |
AC |
2 ms |
256 KB |
sample-01.txt |
AC |
2 ms |
256 KB |
sample-02.txt |
AC |
1 ms |
256 KB |
sample-03.txt |
AC |
1 ms |
256 KB |