855A - Tom Riddle Diary

Click to show code.


using namespace std;
map<string, bool> exists;
int main(void)
{
    int n;
    string s;
    cin >> n;
    while (n--)
    {
        cin >> s;
        if (exists[s])
            cout << "YES" << endl;
        else
            cout << "NO" << endl;
        exists[s] = true;
    }
    return 0;
}


850B - Arpa List Numbers

Click to show code.


const int TAMAX = 2e6 + 22;
using namespace std;
using ll = long long;
using vll = vector<ll>;
ll n, x, y;
vll a, acc_sum(TAMAX, 0), acc_cnt(TAMAX, 0);
inline ll cnt(int l, int r)
{
    if (r < l)
        return 0;
    return acc_cnt[r] - (l <= 0 ? 0 : acc_cnt[l - 1]);
}
inline ll sum(int l, int r)
{
    if (r < l)
        return 0;
    return acc_sum[r] - (l <= 0 ? 0 : acc_sum[l - 1]);
}
ll cost(ll p)
{
    ll local_ans = 0, local_inc_cost, local_del_cost;
    ll rel_border = min(p - 1, x / y);
    for (ll j = p; j < TAMAX; j += p)
    {
        ll border = j - rel_border;
        local_del_cost = x * cnt(j - p + 1, border - 1);
        local_inc_cost = y * (j * cnt(border, j - 1) - sum(border, j - 1));
        local_ans += local_inc_cost + local_del_cost;
    }
    return local_ans;
}
ll solve(void)
{
    ll ans = x * n;
    for (ll p = 2; p < TAMAX; ++p)
        ans = min(ans, cost(p));
    return ans;
}
int main(void)
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n >> x >> y;
    a = vll(n);
    for (auto &x : a)
    {
        cin >> x;
        ++acc_cnt[x];
        acc_sum[x] += x;
    }
    for (int i = 1; i < TAMAX; ++i)
    {
        acc_cnt[i] += acc_cnt[i - 1];
        acc_sum[i] += acc_sum[i - 1];
    }
    cout << solve() << endl;
    return 0;
}


812C - Sagheer Nubian Market

Click to show code.


using namespace std;
using ll = long long;
const int NMAX = 10e5 + 11;
ll n, S;
ll a[NMAX], ka[NMAX];
ll compute(ll k)
{
    ll ans = 0;
    for (int i = 0; i < n; ++i)
        ka[i] = a[i] + (i + 1) * k;
    sort(ka, ka + n);
    for (int i = 0; i < k; ++i)
        ans += ka[i];
    return ans;
}
int binary_search(ll low, ll high, ll target)
{
    auto p = [&](ll k) { return compute(k + 1) > target; };
    while (low < high)
    {
        ll mid = low + (high - low + 1) / 2;
        if (p(mid))
            high = mid - 1;
        else
            low = mid;
    }
    if (p(low))
        return -1;
    return low;
}
int main(void)
{
    cin >> n >> S;
    for (int i = 0; i < n; ++i)
        cin >> a[i];
    int index = binary_search(0, n - 1, S);
    cout << index + 1 << " " << (index == -1 ? 0 : compute(index + 1)) << endl;
    return 0;
}


792B - Counting Out Rhyme

Click to show code.


using namespace std;
using vi = vector<int>;
void print(vi v)
{
    for (auto x : v)
        cout << x << " ";
    cout << endl;
}
int main(void)
{
    int n, k, ai;
    cin >> n >> k;
    vi children(n);
    for (int i = 0; i < n; ++i)
        children[i] = i;
    int pos = 0, killed;
    while (k--)
    {
        cin >> ai;
        killed = (pos + ai % children.size()) % children.size();
        cout << children[killed] + 1 << " ";
        children.erase(children.begin() + killed);
        pos = killed % (children.size());
    }
    cout << endl;
}


791A - Bear Big Brother

Click to show code.


using namespace std;
int main(void)
{
    int a, b, ans = 0;
    cin >> a >> b;
    while (a <= b)
    {
        a *= 3;
        b *= 2;
        ++ans;
    }
    cout << ans << endl;
    return 0;
}


78A - Haiku

Click to show code.


using namespace std;
inline bool is_vowel(char c)
{
    return c == 'a' or c == 'e' or c == 'i' or c == 'o' or c == 'u';
}
int count(string line)
{
    int ans = 0;
    string word;
    stringstream ss(line);
    while (ss >> word)
    {
        for (auto c : word)
        {
            if (is_vowel(c))
                ++ans;
        }
    }
    return ans;
}
int main(void)
{
    int line_number = 0, syllabes_count;
    int expected_syl[3] = {5, 7, 5};
    string line;
    while (line_number < 3)
    {
        getline(cin, line);
        syllabes_count = count(line);
        if (expected_syl[line_number] != syllabes_count)
        {
            cout << "NO" << endl;
            return 0;
        }
        line_number++;
    }
    cout << "YES" << endl;
    return 0;
}


779D - String Game

Click to show code.


using namespace std;
using vi = vector<int>;
using predicate = function<bool(int)>;
int n, m;
vi a;
string s, t;
bool ok(int q)
{
    vector<bool> usable(n, true);
    for (int i = 0; i < q; ++i)
        usable[a[i]] = false;
    int j = 0;
    for (int i = 0; i < n and j < m; ++i)
        if (usable[i] and t[j] == s[i])
            ++j;
    return j == m;
}
int bs(int l, int r, predicate p)
{
    while (l < r)
    {
        int m = l + (r - l + 1) / 2;
        if (p(m))
            l = m;
        else
            r = m - 1;
    }
    return l;
}
int main(void)
{
    ios::sync_with_stdio(false), cin.tie(NULL);
    cin >> s >> t;
    n = (int)s.size(), m = (int)t.size();
    a.resize(n);
    for (auto &ai : a)
        cin >> ai, ai--;
    cout << bs(0, n, ok) << endl;
    return 0;
}


761C - Dasha And Password

Click to show code.


using namespace std;
using ll = long long;
const int NMAX = 50 + 11;
const int MMAX = 50 + 11;
int n, m;
int mem[NMAX][3];
int solve(void)
{
    ll ans = 3 * MMAX;
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n; ++j)
        {
            if (i == j)
                continue;
            for (int k = 0; k < n; ++k)
            {
                if (k == j or k == i)
                    continue;
                ans = min(ans, (ll)(mem[i][0] + mem[j][1] + mem[k][2]));
            }
        }
    }
    return ans;
}
int main(void)
{
    string s;
    cin >> n >> m;
    for (int i = 0; i < n; ++i)
        mem[i][0] = mem[i][1] = mem[i][2] = MMAX;
    for (int i = 0; i < n; ++i)
    {
        cin >> s;
        for (int j = 0; j < m; ++j)
        {
            if (isdigit(s[j]))
                mem[i][0] = min(mem[i][0], min(j, m - j));
            else if (isalpha(s[j]))
                mem[i][1] = min(mem[i][1], min(j, m - j));
            else
                mem[i][2] = min(mem[i][2], min(j, m - j));
        }
    }
    cout << solve() << endl;
    return 0;
}


753A - Santa Claus Candies

Click to show code.


using namespace std;
int main(void)
{
    int n, i;
    int sum = 0;
    cin >> n;
    for (i = 1; sum + i <= n and (n - sum - i) > i; ++i)
        sum += i;
    cout << i - 1 + (sum != n) << endl;
    for (int j = 1; j < i; ++j)
        cout << j << " ";
    if (sum != n)
        cout << n - sum << endl;
    return 0;
}


749C - Voting

Click to show code.


using namespace std;
using ll = long long;
const int NMAX = 2 * 10e5 + 11;
int n;
ll high;
char s[NMAX];
deque<ll> D, R;
int main(void)
{
    cin >> n;
    cin >> s;
    for (int i = 0; i < n; ++i)
    {
        if (s[i] == 'D')
            D.push_back(i);
        else
            R.push_back(i);
    }
    high = n;
    while (D.size() and R.size())
    {
        ll fd = D.front();
        D.pop_front();
        ll fr = R.front();
        R.pop_front();
        if (fd < fr)
            D.push_back(high++);
        else
            R.push_back(high++);
    }
    if (D.size())
        cout << "D" << endl;
    else
        cout << "R" << endl;
    return 0;
}