(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 #872713

#TimeUsernameProblemLanguageResultExecution timeMemory
872713vjudge1Nivelle (COCI20_nivelle)C++17
62 / 110
1058 ms9028 KiB
#include<bits/stdc++.h> using namespace std; #pragma GCC optimize("O3") #define tof_io ios_base::sync_with_stdio(false);cin.tie(0) , cout.tie(0); #define double long double #define int long long #define pb push_back #define all(x) x.begin(),x.end() #define endl '\n' const int mod = 998244353; //998244353 1e9+7 1e9+9 const int inf = 1e18; const int N = 1e6 + 23; const int lg = 23; int fac[N]; int inv[N]; int dnt_pow (int a, int b, int md = mod){int ans = 1; while(b){if(b&1){ans = (a*ans)%md;}a = (a*a)%md;b >>= 1;}return ans ;} void dnt_bld (){fac[0] = 1; inv[0] = dnt_pow(fac[0],mod-2) ;for(int i = 1 ; i < N ; i++) {fac[i] = (fac[i-1] * i) % mod;inv[i] = dnt_pow( fac[i] , mod-2);}} int dnt_ncr (int r,int n){if(r>n) return 0; return fac[n] * inv[r] % mod * inv[n-r] % mod;} bool cmp (pair<int,int> a, pair<int,int> b){ return a.second > b.second; } char x[6] = {'a','b','c','d','e'}; vector<int> v ; int vis[10]; double ans = 1e18; int L,R; int freq[N][6],n; double mn = 1.0; vector<int> cnt(26); void check(string s , int i , int j) { double len = j - i + 1; double cnt1 = 0; for(int i = 0; i < 26; i++) { if(cnt[i] > 0) cnt1++; } double res = cnt1 / len; if(res < mn) { L = i; R = j; mn = res; } } bool ok(int mid,int l) { if(l + mid - 1 >= n) return 0; for(int i = 0; i < 5; i++) { int x; if(l == 0) x = freq[l+mid-1][i]; else x = freq[l+mid-1][i] - freq[l-1][i]; if(vis[i]==0 and x!=0) return 0; } return 1; } void bt(int index) { if(index == 5) { for(int i = 0 ; i < n ;i++) { int l=0; int r=n; while(l < r) { int mid = ( l + r + 1 ) / 2; if(ok(mid,i) == 1) { l = mid; } else { r=mid-1; } } double cnt1 = 0; for(int i = 0 ; i < 5 ; i++) if(vis[i]) cnt1++; double len=l; double res = cnt1 / len; if(cnt1/l < ans) { L = i; R = i + len - 1; ans = res; } } return ; } vis[x[index]-'a'] = 1; bt(index + 1); vis[x[index]-'a'] = 0; bt(index + 1); } void solve1(int n, string s) { for(int j = 0; j < 5; j++) { freq[0][j]=(j==(s[0]-'a')); } for(int i = 1; i < n; i++) { for(int j = 0; j < 5; j++) { freq[i][j] = freq[i-1][j] +( j == (s[i]-'a')); } } bt(0); cout << L + 1 <<' ' << R + 1 ; } void solve2(int n, string s) { for(int i = 0; i < n; i++) { for(int j = 0; j < 26; j++) cnt[j] = 0; string k=""; for(int j = i; j < n; j++) { k = k + s[j]; cnt[s[j]-'a']++; check(k,i,j); } } cout << L+1 << ' ' << R+1; } int32_t main() { cin >> n; string s; cin >> s; int wich = 0; for(int i = 0; i < n; i++) { if(s[i] == 'a' or s[i] == 'b' or s[i] == 'c' or s[i] == 'd' or s[i] == 'e') wich++; } if(wich == n) { solve1(n,s); } else { solve2(n,s); } }

Compilation message (stderr)

nivelle.cpp: In function 'bool ok(long long int, long long int)':
nivelle.cpp:51:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   51 |     if(l + mid - 1 >= n)
      |     ^~
nivelle.cpp:54:2: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   54 |  for(int i = 0; i < 5; i++)
      |  ^~~
#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...