(UPD: 2024-12-04 14:48 UTC) Judge is not working due to Cloudflare incident. (URL) We can do nothing about it, sorry. After the incident is resolved, we will grade all submissions.

Submission #671194

#TimeUsernameProblemLanguageResultExecution timeMemory
671194NimbostratusNivelle (COCI20_nivelle)C++17
110 / 110
255 ms624 KiB
#include <bits/stdc++.h> #define endl '\n' using namespace std; using lint = long long; const int maxn = 2e5 + 5; const int inf = 1e9 + 5; const int mod = 1e9 + 7; int n; string s; int now; int freq[30]; vector<pair<int, int>> vals; void add(int x) { freq[x]++; now += freq[x] == 1; } void remove(int x) { freq[x]--; now -= freq[x] == 0; } int check(int k, int d) { fill(freq, freq + 26, 0); now = 0; for(int i = 0; i < k; i++) add(s[i] - 'a'); if(now == d) return 0; int nowmin = now; for(int i = k; i < n; i++) { add(s[i] - 'a'); remove(s[i - k] - 'a'); nowmin = min(nowmin, now); if(now == d) return 0; } return nowmin > d ? 1 : -1; } int binsearch(int d) { int lo = 1, hi = n, mid; while(lo < hi - 1) { mid = (lo + hi) / 2; int res = check(mid, d); if(res == -1) lo = mid + 1; else if(res == 0) lo = mid; else hi = mid - 1; } int r1 = check(hi, d); int r2 = check(lo, d); if(r1 == 0) return hi; if(r2 == 0) return lo; return -1; } pair<int, int> getrange(int k, int d) { fill(freq, freq + 26, 0); now = 0; for(int i = 0; i < k; i++) add(s[i] - 'a'); if(now == d) return {1, k}; for(int i = k; i < n; i++) { add(s[i] - 'a'); remove(s[i - k] - 'a'); if(now == d) return {i - k + 2, i + 1}; } assert(false); return {-1, -1}; } bool cmp(pair<int, int>& x, pair<int, int>& y) { return x.first * y.second < y.first * x.second; } signed main() { #ifdef Local freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); #endif ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n; cin >> s; for(int i = 1; i <= 26; i++) { int len = binsearch(i); if(len != -1) vals.push_back({i, len}); } auto res = *min_element(vals.begin(), vals.end(), cmp); auto ans = getrange(res.second, res.first); cout << ans.first << " " << ans.second << endl; }
#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...