제출 #666520

#제출 시각아이디문제언어결과실행 시간메모리
666520mychecksedadBoarding Passes (BOI22_passes)C++17
25 / 100
2086 ms1424 KiB
/* Author : Mychecksdead */ #include<bits/stdc++.h> using namespace std; #define setp() cout << setprecision(15) #define all(x) x.begin(), x.end() const int N = 1e5 + 100; int n; string s; double dp[N]; vector<int> v[15], pref, vis; void solve(){ cin >> s; n = s.length(); for(int i = 0; i < n; ++i) v[s[i]-'A'].push_back(i); for(int i = 0; i < (1<<15); ++i) dp[i] = 1e15; dp[0] = 0; for(int mask = 1; mask < (1<<15); ++mask){ for(int j = 0; j < 15; ++j){ if(mask&(1<<j)){ double passes = 0; pref.clear(); pref.resize(n); for(int i = 0; i < 15; ++i){ if(i != j && (mask&(1<<i)) > 0) for(int pos: v[i]) pref[pos] = 1; } for(int i = 1; i < n; ++i) pref[i] = pref[i - 1] + pref[i]; long long cur = 0; long long s = v[j].size(); for(int i = 0; i < s; ++i){ cur += pref[n - 1] - pref[v[j][i]]; } passes = cur + s*(s-1)/4.0; for(long long i = 1; i <= s; ++i){ cur -= pref[n - 1] - pref[v[j][i - 1]]; cur += pref[v[j][i - 1]]; long long k1 = s - i; passes = min(passes, cur + (i*(i-1)+k1*(k1-1))/4.0); } dp[mask] = min(dp[mask], dp[mask^(1<<j)] + passes); } } } cout << dp[(1<<15)-1]; } int main(){ cin.tie(0); ios::sync_with_stdio(0); int T = 1, aa; // cin >> T;aa=T; setp(); while(T--){ // cout << "Case #" << aa-T << ": "; solve(); } return 0; }

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

passes.cpp: In function 'int main()':
passes.cpp:62:16: warning: unused variable 'aa' [-Wunused-variable]
   62 |     int T = 1, aa;
      |                ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...