Submission #609483

#TimeUsernameProblemLanguageResultExecution timeMemory
609483HediChehaidarWiring (IOI17_wiring)C++17
Compilation error
0 ms0 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; vl 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]; int x = pos >= 6 ? mask - (1 << 5) : mask; ll ans = solve(pos + 1 , 2 * x); for(int i = 0 ; i < min(pos , 6) ; i++){ if(col[pos] != col[pos - i - 1]){ x = pos >= 6 ? mask - (1 << 5) : mask; assert(x >= 0); if(i != 5) x = x | (1 << i); ans = min(ans , v[pos] - v[pos - i-1] + solve(pos + 1 , 2 * x + 1)); } } //if(pos == 6 && mask == (1 << 6) - 1) cout << ans << "\n"; /*cout << pos << " "; for(int i = 0 ; i < 6 ; i++) cout << ((mask & (1 << i)) != 0) << " "; cout << " " << ans << "\n";*/ 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]); memset(dp , -1 , sizeof dp); 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++; } } //for(auto c : v) cout << c << " "; cout << "\n"; 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); int nn , mm; cin>>nn>>mm; vi rr(nn) , bb(mm); for(int i = 0 ; i < nn ; i++) cin>>rr[i]; for(int i = 0 ; i < mm ; i++) cin>>bb[i]; cout << min_total_length(rr , bb); 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 ! */

Compilation message (stderr)

/usr/bin/ld: /tmp/ccQjwpT1.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/cctEKW90.o:wiring.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status