Submission #1243105

#TimeUsernameProblemLanguageResultExecution timeMemory
1243105Bui_Quoc_CuongWatching (JOI13_watching)C++20
100 / 100
97 ms16160 KiB
/* 29 . 03 . 2008 */ #include <bits/stdc++.h> using namespace std ; typedef long long ll ; typedef vector<int> vi ; typedef vector<pair<int,int>> vii ; typedef pair<int,int> pii ; typedef pair<ll,int> pli ; typedef pair<int,ll> pil ; typedef pair<ll,ll> pll ; #define FOR(i,a,b) for(int i(a) ; i <= (int)b ; i++) #define FORD(i,a,b) for(int i(a) ; i >= (int)b ; i--) #define FORN(i,a,b) for(int i(a) ; i < (int)b ; i++) #define all(a) a.begin() , a.end() #define pb push_back #define fi first #define se second #define endl '\n' #define BIT(mask,i) ((mask>>i)&1) #define builtin_popcount builtin_popcountll #define uni(a) sort(all(a)), a.resize(unique(all(a))-a.begin()) #define MASK(a) (1ll << a) int gcd(int x, int y) {return __gcd(x, y) ;} int lg(int x) {return __lg(x) ;} int lcm(int x, int y) {return x / __gcd(x, y) * y ;} template <class T> bool maxi(T &x,T y) { if (x < y) { x = y ; return true ;} return false ;} template <class T> bool mini(T &x,T y) { if (x > y) { x = y ; return true ;} return false ;} const int N = 2e3 + 5, M = 5e3 + 5, LG = __lg(N) + 1, base = 311 ; const int oo = 2e9, sm = 1e9 + 7, mod1 = 1e9 + 7, mod2 = 1e9 + 3 ; const long long inf = 1e18 ; int n, p, q ; ll a[N]; void init() { cin >> n >> p >> q ; FOR(i, 1, n) cin >> a[i] ; sort(a + 1, a + 1 + n) ; } int dp[N][N] ; // dp(i, j) : so lan dung w it de phu 1 ... i va dung j lan 2 * w bool check(ll w) { FOR(i, 0, n) FOR(j, 0, min(n, q)) dp[i][j] = oo ; dp[0][0] = 0 ; dp[1][0] = 1 ; dp[1][1] = 0 ; FOR(i, 2, n) { int l = 1, r = i, v1 = i ; while(l <= r) { int mid = (l + r) >> 1 ; if(a[mid] >= a[i] - w + 1) v1 = mid, r = mid - 1 ; else l = mid + 1 ; } l = 1, r = i ; int v2 = i ; while(l <= r) { int mid = (l + r) >> 1 ; if(a[mid] >= a[i] - 1ll * w * 2 + 1) v2 = mid, r = mid - 1 ; else l = mid + 1 ; } FOR(j, 0, min(i, q)) { if(j > 0) mini(dp[i][j], dp[v2 - 1][j - 1]) ; mini(dp[i][j], dp[v1 - 1][j] + 1) ; } } int ans = oo ; FOR(j, 0, min(n, q)) mini(ans, dp[n][j]) ; return (ans <= p) ; } void solve() { ll l = 1, r = 1e9, ans = - 1 ; while(l <= r) { ll mid = (l + r) >> 1 ; if(check(mid)) ans = mid, r = mid - 1 ; else l = mid + 1 ; } cout << ans ; } signed main() { #define task "paint" ios_base::sync_with_stdio(0) ; cin.tie(0) ; cout.tie(0) ; if(fopen(".inp","r")) { freopen(".inp","r",stdin) ; freopen(".out","w",stdout) ; } if(fopen(task".inp","r")) { freopen(task".inp","r",stdin) ; freopen(task".out","w",stdout) ; } init() ; solve() ; cerr << "\nTime : " << clock() * 0.001 << "s" << endl ; return 0 ; } /* Watbor */

Compilation message (stderr)

watching.cpp: In function 'int main()':
watching.cpp:96:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   96 |         freopen(".inp","r",stdin) ; freopen(".out","w",stdout) ;
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~
watching.cpp:96:44: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   96 |         freopen(".inp","r",stdin) ; freopen(".out","w",stdout) ;
      |                                     ~~~~~~~^~~~~~~~~~~~~~~~~~~
watching.cpp:99:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   99 |         freopen(task".inp","r",stdin) ; freopen(task".out","w",stdout) ;
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
watching.cpp:99:48: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   99 |         freopen(task".inp","r",stdin) ; freopen(task".out","w",stdout) ;
      |                                         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...