C++笔试强训day36

目录

1.提取不重复的整数

2.【模板】哈夫曼编码

3.abb


1.提取不重复的整数

链接https://www.nowcoder.com/practice/253986e66d114d378ae8de2e6c4577c1?tpId=37&tqId=21232&ru=/exam/oj

按照题意模拟就行,记得从右往左遍历

cpp 复制代码
#include <iostream>
using namespace std;

int a[10];
int main() {
    string s;
    cin >> s;

    for (int i = s.size() - 1; i >= 0; --i)
        if (a[s[i] - '0']++ == 0)
            cout << s[i] - '0';
    cout << endl;
    return 0;
}

2.【模板】哈夫曼编码

链接https://www.nowcoder.com/practice/4c0419eb07c840ca8402e4f2a52cfd49?tpId=308&tqId=40489&ru=/exam/oj

做这题前首先需要去了解哈夫曼编码。

因为题中已经给出了每个字符的频次,因此可以直接用优先队列(堆)解决,但别忘了用小根堆。

3.abb

链接https://www.nowcoder.com/practice/0a8bbf8b9b5b4280957849ef4f240f07?tpId=230&tqId=38957&ru=/exam/oj

一道动态规划题,同样是去找出它的状态表示:

dpx : 以 x 元素结尾的所有子序列中,_xx的个数

要想拿到dpx,则需要找到以 x 元素结尾的所有子序列中,_x的个数。

将其(以 x 元素结尾的所有子序列中,_x的个数 )定义为 fx ,要想拿到 fx ,则需要找到区间0, i - 1非 x 的个数,(这里我们转化为 x 的个数,最后用 i {区间总数} 减去 x 个数即可),(定义为gx

然后就是状态转移方程:

dpx = fx, (因为这时候遍历到的数就是 x,_x 加上x即为_xx)

fx = fx + (i - gx)

gx = gx + 1

注意状态转移方程顺序,要先更新 fx 后才能更新 gx

最后是返回值:

返回的是所有字母为结尾的个数的和。即所有的dpx。因为dpx = fx

所以可以不需要dpx

cpp 复制代码
#include <iostream>
#define int long long
using namespace std;

int f[26];
int g[26];
char s[100010];
int n;

signed main() {
    cin >> n;
    for(int i = 0; i < n; ++i)
        cin >> s[i];

    int ret = 0;
    for(int i = 0; i < n; ++i)
    {
        int x = s[i] - 'a';        
        ret += f[x];

        f[x] = f[x] + i - g[x];
        g[x] = g[x] + 1;
    }

    cout << ret << endl;
    return 0;
}
相关推荐
hehelm2 分钟前
仿muduo库实现高并发服务器—EventLoop
linux·服务器·网络·c++
_Narcissus_3 分钟前
常见数论算法笔记
数据结构·c++·算法·高精度·数论·快速幂·质数筛
余额瞒着我当琳5 分钟前
C++STL--list底层实现,迭代器分类,模拟list的迭代器封装、实现
java·开发语言·c++
吴声子夜歌11 分钟前
Java面试——数据结构(二)
java·数据结构·面试
kyle~14 分钟前
计算机系统 --- 缓存一致性
开发语言·c++·缓存·计算机系统
CVHub19 分钟前
智能标注工具 X-AnyLabeling v4 全面升级:迈向 AI 时代的数据生产基础设施
人工智能·算法·github
octopus_c3 小时前
数据结构:堆(Heap)详解
c语言·数据结构·算法
YH55269849 小时前
GPT‑5.6 Sol 原本支持 1M 上下文,Codex 现已放开此前限制,如何看待这次调整?
java·jvm·人工智能·gpt·算法·chatgpt
吃着火锅x唱着歌9 小时前
Effective C++ 学习笔记 条款43 学习处理模板化基类内的名称
c++·笔记·学习
felixking10 小时前
C++20 协程
开发语言·c++·协程