DELAPP: Editorial
Problem-code: DELAPP
Contest-Code: CSMH2021
Author: JAMI YASHWANTH
Editorialist: JAMI YASHWANTH
DIFFICULTY:
MEDIUM
PREREQUISITES:
binary search,data structures,greedy,hashing,string suffix structures,strings,two pointers
PROBLEM:
Jack and you are friends . One fine day Jack challenged you to solve a problem .
Jack gives a string s, and you can do two types of operations on it:
Delete the last character of the string.
Duplicate the string: s:=s+s, where + denotes concatenation.
You can use each operation any number of times (possibly none).
Your task is to find the lexicographically smallest string of length exactly k that can be obtained by doing these operations on string s.
A string a is lexicographically smaller than a string b if and only if one of the following holds:
a is a prefix of b, but a≠b;
In the first position where a and b differ, the string a has a letter that appears earlier in the alphabet than the corresponding letter in b.
SOLUTION:
#include using namespace std; #define int long long int #define ff first #define ss second #define pb push_back #define MOD 1000000007 #define inf 1e18 #define ps(x,y) fixed<<setprecision(y)<>x; while(x--) #define endl "\n" #define timetaken cerr<<"Time : "<<1000*(long double)clock()/(long double)CLOCKS_PER_SEC<> n >> k; string s; cin >> s; int bestLen = 1; for (int i = 1; i < n; i++) { if (s[i] > s[i % bestLen]) break; if (s[i] < s[i % bestLen]) bestLen = i + 1; } s = s.substr(0, bestLen); while (s.size() < k) s += s; s = s.substr(0, k); cout << s << endl; } int32_t main() { zanj0(); solve(); timetaken; return 0; }