제출 #609451

#제출 시각아이디문제언어결과실행 시간메모리
609451HediChehaidar전선 연결 (IOI17_wiring)C++17
0 / 100
1 ms212 KiB
//#include "wiring.h" #include<bits/stdc++.h> typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef double db; ll gcd(ll a , ll b) {return b ? gcd(b , a % b) : a ;} // greatest common divisor (PGCD) ll lcm(ll a , ll b) {return (a * b) / gcd(a , b);} // least common multiple (PPCM) #define ss second #define ff first #define all(x) (x).begin() , (x).end() #define pb push_back #define vi vector<int> #define vii vector<pair<int,int>> #define vl vector<ll> #define vll vector<pair<ll,ll>> #define pii pair<int,int> #define pll pair<ll,ll> #define pdd pair<double,double> #define vdd vector<pdd> #define dte tuple<double , double , double> using namespace std; const int INF = 1000*1000*1000; // 1 e 9 const int MOD = 1e9 + 7;//998244353 ; const double EPS = 0.000000001; // 1 e -9 const ll inf = (ll)1e18; vl r , b; int n , m; vi v; int col[(int)2e5 + 10]; ll dp[(int)2e5 + 10][(1 << 6)]; ll solve(int pos , int mask){ if(pos == n + m) return (mask == (1 << 6) - 1) ? 0 : inf; if(pos >= 6 && !(mask & (1 << 5))){ return col[pos] == col[pos - 6] ? inf : (solve(pos + 1 , 2 * mask + 1)+ v[pos] - v[pos - 6] ); } if(dp[pos][mask] != -1) return dp[pos][mask]; ll ans = solve(pos + 1 , 2 * (mask - (1 << 5))); for(int i = 0 ; i < min(pos , 6) ; i++){ if(mask & (1 << i)) continue; if(col[pos] != col[pos - i - 1]){ int x = (mask & (1 << 5)) ? mask - (1 << 5) : mask; x += (1 << i); ans = min(ans , v[pos] - v[pos - i-1] + solve(pos + 1 , 2 * mask + 1)); } } return dp[pos][mask] = ans; } ll min_total_length(vi R, vi B){ n = R.size(); m = B.size(); r.clear(); b.clear(); for(int i = 0 ; i < n ; i++) r.pb(R[i]); for(int i = 0 ; i < m ; i++) b.pb(B[i]); int i = 0 , j = 0; while(i < n || j < m){ if(i == n || (j < m && b[j] < r[i])){ col[v.size()] = 1; v.pb(b[j]); j++; } else{ col[v.size()] = 0; v.pb(r[i]); i++; } } return solve( 1 , 0); } /*int main(){ //ifstream fin ("testing.txt"); //ofstream fout ("output.txt"); ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); return 0; } */ /* Think of : BS / DFS / BFS / SSSP / SCC / MSP / MAX FLOW / TOPSORT / LCA / MATRIX / DP(bitmask) / 2 POINTERS / SEG TREE / MATH / UN FIND / MO / HLD Read the statement CAREFULLY !! Make a GREADY APPROACH !!!! (start from highest / lowest) Make your own TESTS !! Be careful from CORNER CASES ! */
#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...