Submission #1627200
Source Code Expand
#include <string> #include <vector> #include <algorithm> #include <iostream> #define int long long using namespace std; signed main(){ string s,ans = ""; int k,n,pos = -1,sum = 0,dp[1000010] = {},su[1000010] = {}; vector<int> ind[26]; cin >> s >> k; n = s.length(); dp[n + 1] = -1; for(int i = 0;i < n;i++) ind[s[i] - 'a'].push_back(i); for(int i = n - 1;i >= 0;i--){ int next = upper_bound(ind[s[i] - 'a'].begin(),ind[s[i] - 'a'].end(),i) - ind[s[i] - 'a'].begin(); if(next >= ind[s[i] - 'a'].size()) next = n; else next = ind[s[i] - 'a'][next]; dp[i] = min((int)4e18,dp[i + 1] - dp[next + 1] + dp[i + 1]); su[i] = min((int)2e18,dp[i] - dp[i + 1] + su[next]); dp[i] = min((int)2e18,dp[i]); } while(1){ if(sum >= k) break; bool flag = false; for(int i = 0;i < 26;i++){ int next = upper_bound(ind[i].begin(),ind[i].end(),pos) - ind[i].begin(); if(next >= ind[i].size()) continue; if(su[ind[i][next]] + sum >= k){ ans += (char)('a' + i); pos = ind[i][next]; flag = true; break; } sum = min((int)2e18,sum + su[ind[i][next]]); } if(!flag) break; sum++; } if(ans != "") cout << ans << endl; else cout << "Eel" << endl; return 0; }
Submission Info
Submission Time | |
---|---|
Task | G - 辞書順 |
User | hoget157 |
Language | C++14 (GCC 5.4.1) |
Score | 4 |
Code Size | 1238 Byte |
Status | AC |
Exec Time | 110 ms |
Memory | 29060 KB |
Judge Result
Set Name | All | ||
---|---|---|---|
Score / Max Score | 4 / 4 | ||
Status |
|
Set Name | Test Cases |
---|---|
All | 00, 01, 02, 90, 91 |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
00 | AC | 110 ms | 29060 KB |
01 | AC | 7 ms | 16000 KB |
02 | AC | 6 ms | 15872 KB |
90 | AC | 5 ms | 15872 KB |
91 | AC | 5 ms | 15872 KB |