You are on page 1of 4

Solution/Tutorial of Techsapiens1.

Q1: Techsapien and its Permutation


Code:
#include<stdio.h>
#define F for(i=1;i<=n;i++)
long long i,j,m,n,r,f[250107]={1};
int main(){
    scanf("%lli%lli",&n,&m);
    F f[i]=f[i-1]*i%m;
    F r=(r+f[i]*f[n-i+1]%m*(n-i+1)%m)%m;
    return printf("%lli",r),0;
}

Q2: Unique Binary Strings


Code:
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
        int n;
        cin>>n;
        string str;
        cin>>str;
        int c=1;
        for(int i=0;i<n-1;i++){
            if(str[i]!=str[i+1]){
                c++;
            }
        }
        cout<<c<<endl;  
    return 0;
}

Q3: Save Rahul's Books


Code:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
    ll t, n, ans, i, j, min_v;
    string a;
    
    
        cin>>n;
        cin>>a;
        
        ll box[n];
        
        for(i=0; i<n; i++){
            cin>>box[i];
        }
        ans=0;
        for(i=n-1; i>=0; ){
            if(a[i]=='1'){
                min_v=box[i];
                while(i>=0){
                    min_v=min(min_v, box[i]);
                    if(a[i]=='1'){
                        ans=ans+box[i];
                        i--;
                    }else{
                        ans=ans+box[i];
                        i--;
                        ans=ans-min_v;
                        break;
                    }
                }
            }else{
                i--;
            }
        }
        
        cout<<ans<<"\n";
        return 0;
    
}

Q4: Balanced String


Code:
#include <bits/stdc++.h>
using namespace std;
#define sz(a) int((a).size())
#define forn(i, n) for (int i = 0; i < int(n); ++i)

int solve(const string& s, int x, int y) {
    int res = 0;
    for (auto c : s) if (c - '0' == x) {
        ++res;
        swap(x, y);
    }
    if (x != y && res % 2 == 1)
        --res;
    return res;
}

void solve() {
    string s;
    cin >> s;
    int ans = 0;
    forn(x, 10) forn(y, 10)
        ans = max(ans, solve(s, x, y));
    cout << sz(s) - ans << endl;
}

int main() {
    int T;
    solve();
}

Q5: Rahul's Unfinished Assignment


Code:
#include<bits/stdc++.h>
#define ll long long

using namespace std;

void solve(){
    int n, c, q; cin >> n >> c >> q;
    string s; cin >> s;

    vector<ll> left(c+1), right(c+1), diff(c+1);
    left[0] = 0;
    right[0] = n;

    for(int i=1; i<=c; ++i){
        ll l, r; cin >> l >> r;
        l--; r--;
        left[i] = right[i-1];
        right[i] = left[i] + (r-l+1);
        diff[i] = left[i] - l;
    }

    while(q--){
        ll k; cin >> k;
        k--;
        for(int i=c; i>=1; --i){
            if(k < left[i]) continue;
            else k -= diff[i];
        }
        cout << s[k] << "\n";
    }

int main(){
    solve();
}

You might also like