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牛客寒假算法基础集训营3 签到题7题(附基础集训营1-3签到题总结)