寒假训练营第二场补题+题解

A.小沙的炉石

思路:

code:


B.小沙的魔法

思路:

code:


C.小沙的杀球

思路:

按题意贪心处理即可

code:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
const double eps = 1e-9;
int main()
{
    std::ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

#ifdef ak
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
#endif
    ll x, a, b, ans = 0;
    string s;
    cin >> x >> a >> b >> s;
    for (int i = 0; i < s.length(); i++)
    {
        int t = s[i] - '0';
        if (t && x > a)
            x -= a, ans++;
        else
            x += b;
    }
    cout << ans << endl;
    return 0;
}


D.小沙的涂色

思路:

code:


E.小沙的长路

思路:

code:


F.小沙的算数

思路:

code:


G.小沙的身法

思路:

code:


H.小沙的数数

思路:

计算出m二进制下1的个数idxidx,计算nidxn^{idx}即可

code:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
const double eps = 1e-9;
const int mod = 1e9 + 7;
ll fastpow(ll a, ll b, ll mod)
{
    a %= mod;
    ll base = a, ans = 1;
    while (b)
    {
        if (b & 1)
            ans *= base;
        base *= base;
        base %= mod;
        ans %= mod;
        b >>= 1;
    }
    return ans % mod;
}
int main()
{
    std::ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

#ifdef ak
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
#endif
    ll n, m;
    cin >> n >> m;

    ll x = 0;
    while (m)
    {
        if (m & 1)
            x++;
        m >>= 1;
    }
    ll ans = fastpow(n, x, mod);
    cout << ans << endl;
    return 0;
}


I.小沙的构造

思路:

双指针模拟,最后奇偶条件特判。

code:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
const double eps = 1e-9;
pair<char, char> s[10];
const int N = 1e4 + 10;
char ans[N], cs[25] = {'V', '"', '!', '\'', '*', '+', '-', '.', '0', '8', ':', '=', '^', '_', 'W', 'T', 'Y', 'U', 'I', 'O', 'A', 'H', 'X', 'M', '|'};
int n, m;
bool failed = 0;
void op()
{
    int idx1 = 1, idx2 = 0;
    int l = 1, r = n, res = n;
    while (m)
    {
        if (m >= 2 && idx1 <= 5)
        {
            m -= 2;
            if (l >= r)
            {
                failed = 1;
                return;
            }
            ans[l++] = s[idx1].first;
            ans[r--] = s[idx1++].second;
            res -= 2;
        }
        else
        {
            m -= 1;
            if (l > r || idx2 >= 25)
            {
                failed = 1;
                return;
            }
            else
            {
                ans[l] = ans[r] = cs[idx2++];
                l++, r--;
                res -= 2;
            }
        }
    }
    if (l <= r)
    {
        if (ans[l - 1] != ans[r + 1])
        {
            if (res & 1)
            {
                if (idx2 <= 23)
                {
                    char c1 = cs[idx2];
                    char c2 = cs[++idx2];
                    l--;
                    r++;
                    while (l < r)
                    {
                        ans[l++] = c1;
                        ans[r--] = c1;
                    }
                    ans[l] = c2;
                }
                else
                {
                    failed = 1;
                    return;
                }
            }
            else
            {
                char c1 = ans[l - 1], c2 = ans[r + 1];
                while (l <= r)
                {
                    ans[l++] = c1;
                    ans[r--] = c2;
                }
            }
        }
        else
        {
            char c1 = ans[l - 1];
            while (l <= r)
            {
                ans[l++] = c1;
                ans[r--] = c1;
            }
        }
    }
}
int main()
{
    std::ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

#ifdef ak
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
#endif
    s[1] = {'<', '>'};
    s[2] = {'[', ']'};
    s[3] = {'{', '}'};
    s[4] = {'(', ')'};
    s[5] = {'\\', '/'};
    cin >> n >> m;
    op();
    if (failed)
        cout << -1 << endl;
    else
        cout << ans + 1 << endl;
    return 0;
}


J.小沙的Dota

思路:

code:


K.小沙的步伐

思路:

按题意模拟步数即可

code:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
const double eps = 1e-9;
ll a[100];
int main()
{
    std::ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
#ifdef ak
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
#endif
    string s;
    cin >> s;
    for (int i = 0; i < s.length(); i++)
    {
        int t = s[i] - '0';
        if (t != 5)
        {
            a[5]++;
            a[t]++;
        }
    }
    for (int i = 1; i <= 9; i++)
    {
        cout << a[i] << " ";
    }
    return 0;
}


L.小沙的remake(普通版)

思路:

code:


M.小沙的remake(竞速版)

思路:

code:


算法入门题单刷题记录 文章被收录于专栏

1

全部评论

相关推荐

点赞 评论 收藏
转发
感觉这一周太梦幻了,就像一个梦,很不真实~~~感觉这个暑期,我的运气占了99成,实力只有百分之一4.15上午&nbsp;腾讯csig&nbsp;腾讯云部门,面完秒进入复试状态4.16下午&nbsp;美团优选供应链部门,4.18上午发二面4.17晚上&nbsp;阿里国际一面,纯拷打,面完我都玉玉了4.18下午&nbsp;阿里国际二面,是我们leader面的我,很轻松~~4.18晚上&nbsp;约了hr面4.19上午&nbsp;hr面,下午两点口头oc4.19晚上&nbsp;意向书说起来我的暑期好像一次都没挂过~~~~~难道我是天生面试圣体?----------------------------------------------------------------------六个月前,我还是0项目0刷题,当时想的是先把论文发出来再去找实习。结果一次组会,老师打破了我的幻想(不让投B会,只让投刊或者A)我拿头投啊!!!然后就开始物色着找实习,顺便做完了mit的6.s081,但是基本上还是没刷过题目-----------------------------------------------------------------------11月&nbsp;&nbsp;一次偶然的机会,面进了某个耳机厂的手环部门,大概是做嵌入式的,用的是CPP。12月&nbsp;莫名其妙拿到了国创的面试机会,0基础四天速成java基础!居然也给我面过了hhhhh,可能是面试没写题吧入职国创后的几个月,一直没活,天天搁那看剧,都快忘了还有暑期实习这回事了~~~~命运的齿轮在2.26开始转动,因为这一天美团开了,我开始慌了,因为那时的我什么都不会。lc,八股,sql全部是0进度。然后就开始了女娲补天,上班刷题,下班继续做之前的开源,顺便学一学八股。3月到现在,lc也刷到快200了,一天最多提交了47次~~~~~~~~~~八股根据别人的面经总结和博客,写了快十万字的笔记~~~~~~~~~~简历上的实习经历和开源,也努力去深挖了,写了几万字的记录~~~~~~所以面试的时候,基本上都能cover了,面试官问到的基础基本都会,不基础的我就把他往我会的地方引。结果好像还不错,基本上每个面试官评价都挺好的emmmmmmmm
投递阿里巴巴等公司10个岗位
点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务