2022牛客寒假算法基础集训营6 签到题5题(附基础集训营4-6签到题总结)

Posted 小哈里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022牛客寒假算法基础集训营6 签到题5题(附基础集训营4-6签到题总结)相关的知识,希望对你有一定的参考价值。

1、I-A+B问题

  • 模拟,类似于高精度,竖式运算
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int k;  cin>>k;
    string a, b;  cin>>a>>b;
    int len1 = a.size(), len2 = b.size();
    vector<int>x;
    int c = 0;
    for(int i = 0; i<len1||i<len2; i++)
        if(i<len1)c+=a[len1-i-1]-'0';
        if(i<len2)c+=b[len2-i-1]-'0';
        x.push_back(c%k);
        c /= k;
    
    if(c)x.push_back(1);
    for(int i = x.size()-1; i >= 0; i--)cout<<x[i];
    return 0;



2、F +-串

  • 一次操作让|x|加2或减2,先枚举一遍得到初始值,然后贪心的>0就-2,小于零就+2,最后的x绝对值就是结果
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
    int T;  cin>>T;
    while(T--)
        int x = 0, k;
        string s;  cin>>s>>k;
        for(char ch : s)
            if(ch=='+')x++;
            else x--;
        
        for(int i = 1; i <= k; i++)
            if(x>=0)x-=2;
            else x+=2;
        
        cout<<abs(x)<<"\\n";
    
    return 0;



3、D-删除子序列

  • 先求T的第一个字母在S的前i个字母中出现了多少次,再此基础上再求T的第二个字母在S的前i个字母中出现了多少次(始终要小于第一个字母的出现次数),最后到第m个字母就是答案。
  • 注意到T的范围很小,只有30,所以直接暴力双循环就可以过,枚举S的每个字符,然后去T中find,开个数字记录一下T的第i个字母出现的次数。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int f[30];
int main()
    int T;  cin>>T;
    while(T--)
        int n, m;  cin>>n>>m;
        string s, t;  cin>>s>>t;
        memset(f,0,sizeof(f));
        for(int i = 0; i < n; i++)
            int x = t.find(s[i]);
            if(x>=0)f[x]++;
            if(x>0&&f[x]>f[x-1])f[x]=f[x-1];
        
        cout<<f[m-1]<<"\\n";
    
    return 0;



4、E-骑士

  • 所有骑士不被秒,即对于任意一名骑士j,有hj+bj+药剂数>ai(除自己之外最大的ai)
  • 需要找到ai最大的那个骑士,他需要的药剂数取决于第二大的ai,其余所有骑士需要的都取决于ai,即为最大ai-(bj+hj)+1
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 2e5+10;
struct nodeLL a, b, h;q[maxn];
bool cmp(node x, node y)return x.a>y.a;
int main()
    int T;  cin>>T;
    while(T--)
        int n;  cin>>n;
        for(int i = 1; i <= n; i++)
            cin>>q[i].a>>q[i].b>>q[i].h;
        sort(q+1,q+n+1,cmp);
        LL ans = q[2].a-q[1].b-q[1].h+1;
        if(ans < 0)ans = 0;
        for(int i = 2; i <= n; i++)
            LL tmp = q[1].a-q[i].b-q[i].h+1;
            if(tmp>0)ans += tmp;
        
        cout<<ans<<"\\n";
    
    return 0;

5、B-价值序列

  • 题意等价于,删掉几个数,让序列的价值保持不变,求可以删的方案数量。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 1e6+10, mod = 998244353;
int pows[maxn];
void init()pows[0]=1;for(int i=1; i<=10000; i++)pows[i]=pows[i-1]*2%mod;
LL a[maxn];
int main()
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    init();
    int T;  cin>>T;
    while(T--)
        LL n;  cin>>n;
        for(int i = 1; i <= n; i++)cin>>a[i];
        LL ans = 1;
        for(int i = 1; i <= n; i++)
            int j = i;
            while(j<n && a[j+1]==a[j])j++;
            if(i>1&&j<n && ((a[i-1]<a[i]&&a[i]<a[j+1])||(a[i]<a[i-1]&&a[i]>a[j+1])))
                ans = ans*pows[j-i+1]%mod;
            else
                ans = ans*(pows[j-i+1]-1)%mod;
            
            i = j;
        
        cout<<ans<<"\\n";
    
    return 0;



附签到题总结

  • 2022牛客寒假算法基础集训营4
    题号 标题 已通过代码 通过率 我的状态
    A R 点击查看 1569/3702 通过(贪心,遍历)
    B 进制 点击查看 592/2271 未通过
    C 蓝彗星 点击查看 1881/5874 通过(区间状态,差分前缀和)
    D 雪色光晕 点击查看 1016/3846 未通过
    E 真假签到题 点击查看 2852/5744 通过(签到,结论)
    F 小红的记谱法 点击查看 1891/2231 通过(模拟,遍历)
    G 子序列权值乘积 点击查看 790/2316 未通过
    H 真真真真真签到题 点击查看 2840/3120 通过(签到,结论)
    I 爆炸的符卡洋洋洒洒 点击查看 1501/3948 通过(01背包变种)
    J 区间合数的最小公倍数 点击查看 1298/2198 未通过
    K 小红的真真假假签到题题 点击查看 2263/5836 通过(签到,结论)
    L 在这冷漠的世界里光光哭哭 点击查看 148/533 未通过

  • 2022牛客寒假算法基础集训营5
    题号 标题 已通过代码 通过率 我的状态
    A 疫苗小孩 点击查看 1125/5166 通过(贪心,二分,贡献)
    B 乒乓小孩 点击查看 61/663 未通过
    C 战棋小孩 点击查看 579/1991 未通过
    D 数位小孩 点击查看 991/2773 通过(结论,暴力,搜索)
    E 复苏小孩 点击查看 320/826 未通过
    F 飞车小孩 点击查看 101/471 未通过
    G 163小孩 点击查看 2050/8779 通过(签到,结论)
    H 一六三小孩 点击查看 19/75 未通过
    I 兔崽小孩 点击查看 1801/9676 通过(排序,贪心,二分,贡献)
    J 三国小孩 点击查看 2576/3655 通过(签到,结论)
    K 造梦小孩 点击查看 179/796 未通过

  • 2022牛客寒假算法基础集训营6
    题号 标题 已通过代码 通过率 我的状态
    A 回文大师 点击查看 256/905 未通过
    B 价值序列 点击查看 880/3660 通过(贪心,结论,贡献)
    C 数组划分 点击查看 82/349 未通过
    D 删除子序列 点击查看 1478/5040 通过(递推,暴力)
    E 骑士 点击查看 1865/4549 通过(贪心,排序)
    F ±串 点击查看 2034/4194 通过(签到,贪心)
    G 迷宫2 点击查看 361/1315 未通过
    H 寒冬信使2 点击查看 470/1446 未通过
    I A+B问题 点击查看 2195/5133 通过(签到,模拟,高精度)
    J 牛妹的数学难题 点击查看 610/2125 未通过

以上是关于2022牛客寒假算法基础集训营6 签到题5题(附基础集训营4-6签到题总结)的主要内容,如果未能解决你的问题,请参考以下文章

2022牛客寒假算法基础集训营5 签到题5题

2022牛客寒假算法基础集训营5 签到题5题

2022牛客寒假算法基础集训营3 签到题7题(附基础集训营1-3签到题总结)

2022牛客寒假算法基础集训营3 签到题7题(附基础集训营1-3签到题总结)

2022牛客寒假算法基础集训营4 签到题7题

2022牛客寒假算法基础集训营4 签到题7题