From f10403c366aad1f6721670cb75e12e152488780b Mon Sep 17 00:00:00 2001 From: Ankit Singh Date: Fri, 2 Jul 2021 15:01:53 +0530 Subject: [PATCH] solution using pairs --- src/1087 - Shortest Subsequence.cpp | 113 ++++++++++++++++++---------- 1 file changed, 72 insertions(+), 41 deletions(-) diff --git a/src/1087 - Shortest Subsequence.cpp b/src/1087 - Shortest Subsequence.cpp index adb6623..4dd88c5 100644 --- a/src/1087 - Shortest Subsequence.cpp +++ b/src/1087 - Shortest Subsequence.cpp @@ -1,46 +1,77 @@ /* -Problem Name: Shortest Subsequence -Problem Link: https://cses.fi/problemset/task/1087 -Author: Sachin Srivastava (mrsac7) + */ + + #include using namespace std; -// #define int long long -#define endl '\n' - -signed main(){ - ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); - #ifdef LOCAL - freopen("input.txt", "r" , stdin); - freopen("output.txt", "w", stdout); - #endif - - string s; cin>>s; - int l = 0, r = 0; - bool a = 0, b = 0, c = 0, d = 0; - int n = s.size(); - string ans; - while(l < n) { - a = 0, b = 0, c = 0, d = 0; - a += (s[l] == 'A'); b += (s[l] == 'C'); - c += (s[l] == 'G'); d += (s[l] == 'T'); - r = l+1; - while(r < n && a+b+c+d != 4) { - a += (s[r] == 'A'); b += (s[r] == 'C'); - c += (s[r] == 'G'); d += (s[r] == 'T'); - r++; - } - if (a+b+c+d == 4) - ans += s[r-1]; - l = r; - } - cerr< +#define mod 1000000007 +#define pi pair +#define ti tuple +#define all(v) (v).begin(),(v).end() +#define allr(v) (v).rbegin(), (v).rend() +#define set_bits(x) __builtin_popcountll(x) +#define deb(x) cout << "[" << #x << " = " << x << "]" +#define deb2(x, y) cout << "[" << #x << " = " << x << " " << #y << " = " << y << "]" +#define output_vector(a) for(auto x : a) cout << x << " " +#define output_vector2(a) for(auto i : a) { for(auto j : i) cout << j << " "; cout << "\n"; } + +void solve() { + string s; + cin >> s; + + int n = sz(s); + + pi g = {0, 0}, c = {0, 0}, a = {0, 0}, t = {0, 0}; + + int k = 0; + string ans; + for(int i = 0; i < n; i++) { + if(s[i] == 'G') g.ff++, g.ss = i; + else if(s[i] == 'C') c.ff++, c.ss = i; + else if(s[i] == 'A') a.ff++, a.ss = i; + else if(s[i] == 'T') t.ff++, t.ss = i; + if(g.ff && c.ff && a.ff && t.ff) { + k++; +// deb(i); + int j = max({g.ss, c.ss, a.ss, t.ss}); + ans += s[j]; + g = c = a = t = {0, 0}; + } + } + + + if(a.ff == 0) ans += "A"; + else if(c.ff == 0) ans += "C"; + else if(g.ff == 0) ans += "G"; + else if(t.ff == 0) ans += "T"; + else ans += "A"; + cout << ans << "\n"; +} + +int32_t main() { + + fastio; + + int test_cases = 1; +// cin >> test_cases; + + while(test_cases--) { + solve(); + } + + cerr << "Time elapsed : " << 1.0 * clock() / CLOCKS_PER_SEC << " sec \n "; + + return 0; +} +