102433D - Dividing By Two

Click to show code.


using namespace std;
int solve(int a, int b)
{
    if (a < b)
        return b - a;
    else
    {
        int ans = 0;
        while (a > b)
        {
            if (a % 2 == 0)
                a /= 2;
            else
                a++;
            ans++;
        }
        return ans + b - a;
    }
}
int main()
{
    int a, b;
    cin >> a >> b;
    cout << solve(a, b) << endl;
    return 0;
}


102433C - Coloring Contention

Click to show code.


using namespace std;
using vi = vector<int>;
const int NMAX = 1e5 + 100;
int n, m, dist[NMAX];
bool vis[NMAX];
vi g[NMAX];
void bfs(int u)
{
    queue<int> q;
    vis[u] = true;
    q.push(u);
    while (!q.empty())
    {
        u = q.front();
        q.pop();
        for (int v : g[u])
        {
            if (not vis[v])
            {
                vis[v] = true;
                dist[v] = dist[u] + 1;
                q.push(v);
            }
        }
    }
}
int main(void)
{
    int n, m, u, v;
    cin >> n >> m;
    for (int i = 0; i < m; ++i)
    {
        cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    bfs(1);
    cout << dist[n] - 1 << endl;
    return 0;
}


102433B - Perfect Flush

Click to show code.


using namespace std;
using ll = long long;
using vi = vector<int>;
using vb = vector<bool>;
int main(void)
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int n, k;
    cin >> n >> k;
    vi a(n + 1), pos(n + 1), ans;
    vb vis(n + 1, false);
    for (int i = 1; i <= n; ++i)
    {
        cin >> a[i];
        pos[a[i]] = i;
    }
    for (int i = 1; i <= n; ++i)
    {
        if (vis[a[i]])
            continue;
        while (not ans.empty() and a[i] < ans.back() and i < pos[ans.back()])
        {
            vis[ans.back()] = false;
            ans.pop_back();
        }
        ans.push_back(a[i]);
        vis[a[i]] = true;
    }
    for (int i = 0, len = (int)ans.size(); i < len; ++i)
        cout << ans[i] << (i < len - 1 ? " " : "");
    cout << endl;
    return 0;
}


102433A - Radio Prize

Click to show code.


using namespace std;
using ll = long long;
using ii = pair<int, int>;
using vii = vector<ii>;
const int NMAX = 1e5 + 11;
int n, root, t[NMAX], sz[NMAX], dist[NMAX];
ll tsum[NMAX], ans[NMAX];
vii g[NMAX];
void precompute(int u, int p)
{
    sz[u] = 1;
    tsum[u] = t[u];
    for (auto [v, w] : g[u])
    {
        if (v == p)
            continue;
        dist[v] = dist[u] + w;
        precompute(v, u);
        sz[u] += sz[v];
        tsum[u] += tsum[v];
    }
}
void calc_reroot(int u, int p, ll dist_sum, ll tax_dist_sum)
{
    ans[u] = t[u] * dist_sum + tax_dist_sum;
    for (auto [v, w] : g[u])
    {
        if (v == p)
            continue;
        calc_reroot(v,
                    u,
                    dist_sum + w * (n - 2 * sz[v]),
                    tax_dist_sum + w * (tsum[root] - 2 * tsum[v]));
    }
}
int main(void)
{
    int u, v, w;
    ll dist_sum, tax_dist_sum;
    cin >> n;
    for (int i = 1; i <= n; ++i)
        cin >> t[i];
    for (int i = 1; i <= n - 1; ++i)
    {
        cin >> u >> v >> w;
        g[u].push_back({v, w});
        g[v].push_back({u, w});
    }
    root = 1;
    precompute(root, 0);
    tax_dist_sum = dist_sum = 0;
    for (int u = 1; u <= n; ++u)
    {
        dist_sum += dist[u];
        tax_dist_sum += (ll)t[u] * dist[u];
    }
    calc_reroot(root, 0, dist_sum, tax_dist_sum);
    for (int u = 1; u <= n; ++u)
        cout << ans[u] << endl;
    return 0;
}


102212C - Pig Latin

Click to show code.


using namespace std;
int main(void)
{
    int t;
    string s;
    cin >> t;
    cin.ignore();
    while (t--)
    {
        getline(cin, s);
        stringstream ss(s);
        string word;
        while (ss >> word)
        {
            word += word[0];
            word += "ay";
            if (isupper(word[0]))
                cout << (char)toupper(word[1]);
            else
                cout << (char)tolower(word[1]);
            for_each(word.begin() + 2,
                     word.end(),
                     [](char c) { cout << (char)tolower(c); }),
                cout << " ";
        }
        cout << endl;
    }
    return 0;
}


102212B - Racetrack

Click to show code.


using namespace std;
int gcd(int a, int b) { return (b == 0 ? a : gcd(b, a % b)); }
int lcm(int a, int b) { return (a * (b / gcd(a, b))); }
int main(void)
{
    int a, b;
    cin >> a >> b;
    cout << lcm(a, b) << endl;
    return 0;
}


102212A - Adding Two Integers

Click to show code.


using namespace std;
int main(void)
{
    int a, b;
    cin >> a >> b;
    cout << a + b << endl;
    return 0;
}


1020B - Badge

Click to show code.


using namespace std;
const int NMAX = 1e3 + 11;
int n, vis[NMAX], g[NMAX];
int find_cycle(int u)
{
    if (vis[u] == 2)
        return u;
    ++vis[u];
    return find_cycle(g[u]);
}
int main(void)
{
    int v;
    cin >> n;
    for (int i = 0; i < n; ++i)
    {
        cin >> v;
        g[i] = v - 1;
    }
    for (int i = 0; i < n; ++i)
    {
        memset(vis, 0, n * sizeof(*vis));
        cout << find_cycle(i) + 1 << " ";
    }
    cout << endl;
    return 0;
}


101889E - Enigma

Click to show code.


using namespace std;
using ll = long long;
using ii = pair<int, int>;
using vi = vector<int>;
template <typename InputIterator,
          typename T = typename iterator_traits<InputIterator>::value_type>
void read_n(InputIterator it, int n)
{
    copy_n(istream_iterator<T>(cin), n, it);
}
template <typename InputIterator,
          typename T = typename iterator_traits<InputIterator>::value_type>
void write(InputIterator first, InputIterator last, const char *delim = "\n")
{
    copy(first, last, ostream_iterator<T>(cout, delim));
}
int const NMAX = 1e3 + 11;
int const XMAX = 1e3 + 11;
int n, x;
string s;
bool dp[NMAX][XMAX], vis[NMAX][XMAX];
char ans[NMAX];
bool possible(int i, int rem)
{
    if (i == n)
        return rem == 0;
    auto &cur = dp[i][rem];
    if (vis[i][rem])
        return cur;
    vis[i][rem] = true;
    if (s[i] == '?')
    {
        for (int d = (i == 0); d <= 9; ++d)
        {
            ans[i] = d + '0';
            if (possible(i + 1, (10 * rem + d) % x))
                return cur = true;
            ans[i] = 0;
        }
    }
    else
    {
        int d = s[i] - '0';
        ans[i] = d + '0';
        if (possible(i + 1, (10 * rem + d) % x))
            return cur = true;
        ans[i] = 0;
    }
    return cur = false;
}
int main(void)
{
    ios::sync_with_stdio(false), cin.tie(NULL);
    while (cin >> s >> x)
    {
        n = (int)s.size();
        memset(dp, 0, sizeof dp);
        memset(vis, 0, sizeof vis);
        memset(ans, 0, sizeof ans);
        if (possible(0, 0))
            write(ans, ans + n, ""), cout << endl;
        else
            cout << "*" << endl;
    }
    return 0;
}


10176 - Ocean Deep

Click to show code.


using namespace std;
using ll = long long;
const int MOD = 131071;
int main(void)
{
    char b;
    int rem = 0;
    while (cin.get(b))
    {
        if (b == '#')
        {
            cout << ((rem % MOD) == 0 ? "YES" : "NO") << endl;
            rem = 0;
        }
        else if (b == '0' or b == '1')
            rem = ((rem << 1) + (b - '0')) % MOD;
        else
            continue;
    }
    return 0;
}