제출 #409793

#제출 시각아이디문제언어결과실행 시간메모리
409793Ruxandra985The short shank; Redemption (BOI21_prison)C++14
0 / 100
180 ms76448 KiB
#include <bits/stdc++.h> #define DIMN 2000010 using namespace std; int v[DIMN] , w[DIMN] , f[DIMN] , out[DIMN] , mark[DIMN] , tt[DIMN] , closest[DIMN]; pair <int , int> ev[2 * DIMN] , idk[DIMN]; priority_queue <int> h; priority_queue <pair <int , int> > h2; pair <int , int> cnt[DIMN]; vector <int> g[DIMN]; void dfs (int nod){ int i , vecin; cnt[nod] = make_pair(1 , nod); for (i = 0 ; i < g[nod].size() ; i++){ vecin = g[nod][i]; dfs(vecin); if (cnt[vecin].first + 1 > cnt[nod].first){ cnt[nod] = make_pair(cnt[vecin].first + 1 , cnt[vecin].second); } } } int main() { FILE *fin = stdin; FILE *fout = stdout; int n , d , t , sol , i , elem = 0 , e = 0 , pmax , j , now = 0 , nod , vecin; fscanf (fin,"%d%d%d",&n,&d,&t); sol = 0; now = 0; for (i = 1 ; i <= n ; i++){ fscanf (fin,"%d",&v[i]); if (v[i] > t){ closest[i] = now; w[++elem] = i; now = i; } else sol++; } for (i = 1 ; i <= n ; i++){ if (v[i] < t){ /// cauti in w intervalul de influenta pmax = min(n , i + t - v[i]); ev[++e] = make_pair(i , i); ev[++e] = make_pair(pmax + 1 , -i); } } sort (ev + 1 , ev + e + 1); i = 1; j = 1; while (j <= elem){ while (i <= e && ev[i].first <= w[j]){ /// procesezi ev[i] if (ev[i].second > 0) h.push(ev[i].second); else { out[-ev[i].second] = 1; /// il scoti } i++; } /// acum vezi w[j] ce tata are while (!h.empty() && out[h.top()]) h.pop(); if (!h.empty()){ if (closest[w[j]] < h.top()){ g[0].push_back(w[j]); /// j nu e legat de alt elem > t //printf ("0 %d\n" , w[j]); tt[w[j]] = 0; } else { g[w[j]].push_back(closest[w[j]]); //printf ("%d %d\n" , w[j] , closest[w[j]]); tt[closest[w[j]]] = w[j]; } } j++; } /// acum avem un arbore cu radacina fictiva 0 /// daca sterg un nod, se sterge tot drumul de la el la 0 /// sterg d noduri a.i sa ramana nr minim de noduri in arb dfs (0); for (i = 0 ; i < g[0].size() ; i++){ nod = g[0][i]; h2.push(cnt[nod]); } mark[0] = 1; for (j = 1 ; j <= d ; j++){ while (mark[h2.top().second]) h2.pop(); nod = h2.top().second; h2.pop(); while (!mark[nod]){ mark[nod] = 1; for (i = 0 ; i < g[tt[nod]].size() ; i++){ vecin = g[tt[nod]][i]; if (!mark[vecin]) h2.push(cnt[vecin]); } nod = tt[nod]; } } for (i = 1 ; i <= n ; i++){ if (v[i] > t && !mark[i]) sol++; } fprintf (fout,"%d",sol); return 0; }

컴파일 시 표준 에러 (stderr) 메시지

prison.cpp: In function 'void dfs(int)':
prison.cpp:14:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 |     for (i = 0 ; i < g[nod].size() ; i++){
      |                  ~~^~~~~~~~~~~~~~~
prison.cpp: In function 'int main()':
prison.cpp:103:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  103 |     for (i = 0 ; i < g[0].size() ; i++){
      |                  ~~^~~~~~~~~~~~~
prison.cpp:122:28: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  122 |             for (i = 0 ; i < g[tt[nod]].size() ; i++){
      |                          ~~^~~~~~~~~~~~~~~~~~~
prison.cpp:29:12: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   29 |     fscanf (fin,"%d%d%d",&n,&d,&t);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
prison.cpp:33:16: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   33 |         fscanf (fin,"%d",&v[i]);
      |         ~~~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...