Submission #949874

#TimeUsernameProblemLanguageResultExecution timeMemory
949874fuad27Alternating Current (BOI18_alternating)C++17
33 / 100
3064 ms2392 KiB
#include <bits/stdc++.h> using namespace std; mt19937 rng(chrono::steady_clock().now().time_since_epoch().count()); long double P(int old, int nw, long double temp) { if(nw < old)return 1.0; return exp((old-nw)/temp); } vector<int> mask; vector<pair<int,int>> a; int n, m; int eval() { int cnt1[n+1], cnt2[n+1]; memset(cnt1, 0, sizeof cnt1); memset(cnt2, 0, sizeof cnt2); for(int i = 0;i<m;i++) { if(mask[i]) { if(a[i].second>=a[i].first) { cnt1[a[i].first]++; cnt1[a[i].second+1]--; } else { cnt1[a[i].first]++; cnt1[0]++; cnt1[a[i].second+1]--; } } else { if(a[i].second>=a[i].first) { cnt2[a[i].first]++; cnt2[a[i].second+1]--; } else { cnt2[a[i].first]++; cnt2[0]++; cnt2[a[i].second+1]--; } } } for(int i = 1;i<=n;i++) { cnt1[i]+=cnt1[i-1]; cnt2[i]+=cnt2[i-1]; } int cc=0; for(int i = 0;i<n;i++) { if(cnt1[i]<=0 or cnt2[i]<=0)cc++; } return cc; } int main () { cin.tie(0)->sync_with_stdio(0); cin >> n >> m; mask.resize(m); a.resize(m); for(int i = 0;i<m;i++){ cin >> a[i].first >> a[i].second; a[i].first--; a[i].second--; } for(int _ = 0;_<100;_++) { long double temp = 100; for(int i = 0;i<m;i++)mask[i]=rng()%2; int old = eval(); for(int __ = 0;__<10000;__++) { int c = rng()%m; mask[c]^=1; int nw = eval(); if(nw==0) { for(int i:mask)cout << i; cout << "\n"; return 0; } long double rn = (long double)(rng()%1000)/1000; if(P(old, nw, temp)>rn) { old=nw; } else { mask[c]^=1; } temp*=0.95; } // cerr << fixed << setprecision(5) << (long double)temp << endl; } cout << "impossible\n"; }
#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...