牛客练习赛128补题

news/2024/9/19 6:08:18/文章来源:https://www.cnblogs.com/Natural-TLP/p/18414878

A. Cidoai的幂次序列

思路

思维题
题面看着复杂,但只需输出 \(n-1\)\(1\) 即可。

代码

#include <iostream>using namespace std;typedef long long ll;ll n, k;int main()
{cin >> n >> k;cout << 2 << '\n';cout << n - 1 << ' ' << 1;return 0;
}

B. Cidoai的平均数对

思路

01背包

根据题意有

\[\frac {\sum_{i=1}^n b_i}{n} \le k \]

\(n\) 移到右边

\[\sum_{i=1}^n b_i \le n*k \]

再将 \(n * k\) 移到左边

\[\sum_{i=1}^n b_i - n * k \le 0 \]

\(k\) 放入 \(b_i\) 求和的式子中

\[\sum_{i=1}^n (b_i - k) \le 0 \]

所以要满足最终和小于等于0,可以将所有\(b_i-k\),显然结果为负数的一定可选,结果为正数的可选可不选,这样就转为一个典型的01背包问题,我先将结果为负的都选上求和为背包容量,结果为正的作为体积,对应的\(a_i\)为价值。

代码

#include <iostream>using namespace std;const int N = 500 + 10, M = N * N;int n, k, sum;
int a[N], b[N];
int dp[M];int main()
{cin >> n >> k;for (int i = 1; i <= n; i ++){cin >> a[i] >> b[i];b[i] -= k;if (b[i] < 0) {sum -= b[i];b[i] = 0;}}for (int i = 1; i <= n; i ++)for (int j = sum; j >= b[i]; j --)dp[j] = max(dp[j], dp[j - b[i]] + a[i]);cout << dp[sum];return 0;
}

C. Cidoai的树上方案

思路

树形dp模板

简单图就是不含自环和重边的图。
树外一个点连接树内任意点,求不构成三元环的方案数。可以知道构成三元环,除树外的点与树内两个点相连,还有一个条件是树内两个点要相连,即相邻的两个点,由此题目转为,找不相邻的任意个点的方案数,就是一个树形dp的模板了。

代码

#include <iostream>
#include <vector>using namespace std;typedef long long ll;const int mod = 998244353;
const int N = 2e6 + 10;int n;
vector<int> g[N];
ll dp[N][2];void dfs(int u)
{dp[u][0] = dp[u][1] = 1;for (int v : g[u]){dfs(v);dp[u][0] = dp[u][0] * (dp[v][0] + dp[v][1]) % mod;dp[u][1] = dp[u][1] * dp[v][0] % mod;}
}int main()
{cin >> n;for (int i = 2; i <= n; i ++){int x;cin >> x;g[x].push_back(i);}dfs(1);cout << (dp[1][0] + dp[1][1]) % mod;return 0;
}

D. Cidoai的字符集合

思路

并查集模板

题目是求两个分类的总和,一个是有歌曲是相似的集合数1加上独立歌曲的数量n。
用map记录一下每个旋律对应哪首歌,快速判断这首歌是不是可能相似了,再用并查集找出相似的两首歌,将相似的两首歌放入集合0中。最后枚举一下0~n首歌,它父节点是它本身的数量就是答案。

代码

#include <iostream>
#include <unordered_map>using namespace std;const int N = 1e6 + 10;int n;
unordered_map<string, int> mp;
int p[N];int find(int x)
{if (p[x] != x) p[x] = find(p[x]);return p[x];
}int main()
{cin >> n;for (int i = 1; i <= n; i ++) p[i] = i;for (int i = 1; i <= n; i ++){int k;cin >> k;while (k --){string s;cin >> s;if (mp.count(s)) {int pi = find(i), ps = find(mp[s]);if (pi == ps) continue;p[pi] = 0;p[ps] = 0;}else mp[s] = i;}}int res = 0;for (int i = 0; i <= n; i ++)if (p[i] == i) res ++;cout << res;return 0;
}

E. Cidoai的映射数列

矩阵快速幂优化状态压缩,听牛客官方补的题。

代码

#include <iostream>
#include <cstring>using namespace std;typedef long long ll;const int N = 128;
const int mod = 998244353;struct Matrix {int n, m;ll mat[N][N];Matrix() {}Matrix(int _n, int _m): n(_n), m(_m) {}Matrix(int _n, int _m, bool flag) : n(_n), m(_m) {memset(mat, 0, sizeof mat);if (flag) for (int i = 0; i < n; i ++) mat[i][i] = 1;}Matrix(int k) {n = m = 1 << k;memset(mat, 0, sizeof mat);for (int st = 0; st < n; st ++){mat[st][st >> 1] = 1;if (st & 1) continue;for (int i = 0; i < k; i ++)mat[st][(st >> 1) | (1 << i)] = 1;}}friend inline Matrix operator * (Matrix x, Matrix y) {Matrix tmp = Matrix(x.n, y.m, 0);for (int i = 0; i < tmp.n; i ++)for (int k = 0; k < x.m; k ++) {if (x.mat[i][k]) {for (int j = 0; j < tmp.m; j ++)tmp.mat[i][j] = (tmp.mat[i][j] + x.mat[i][k] * y.mat[k][j] % mod) % mod; }}return tmp;}
} f[N >> 4][N >> 1];void init()
{for (int k = 0; k <= 7; k ++){f[k][1] = Matrix(k);for (int i = 2; i <= 60; i ++)f[k][i] = f[k][i - 1] * f[k][i - 1];}
}void solve()
{ll n, k;cin >> n >> k;k = min(n, k);Matrix ans = Matrix(1, 1 << k, 0);ans.mat[0][0] = 1;for (ll i = 1, j = 1; j <= n; i ++, j <<= 1)if (n & j) ans = ans * f[k][i];cout << ans.mat[0][0] << '\n';
}int main()
{   ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);init();int t;cin >> t;while (t --) solve();return 0;
}

F. Cidoai的数论求和

这个也是看官方题解补的,一堆数学公式,推公式+莫比乌斯反演。

代码

#include <iostream>
#include <cmath>using namespace std;typedef long long ll;const int N = 4e6 + 10;int prime[N], mu[N], cnt;
bool st[N];
ll n;void get_mu(int n)
{mu[1] = 1;for (int i = 2; i <= n; i ++){if (!st[i]) {prime[++ cnt] = i;mu[i] = -1;}for (int j = 1; prime[j] <= n / i; j ++){st[i * prime[j]] = 1;if (i % prime[j] == 0) {mu[i * prime[j]] = 0;break;}mu[i * prime[j]] = -mu[i];}}
}int main()
{get_mu(N - 1);cin >> n;ll res= 0;ll m = sqrtl(n);for (ll i = 1; i <= m; i ++){ll d = sqrtl(n / i / i / 2);res += mu[i] * d * d;}for (ll i = 1; i <= m; i ++){ll t = n / i / i;ll u = sqrtl(t);ll d = sqrtl(t / 2);ll sum = 0;for (ll j = d + 1, ne; j <= u; j = ne + 1){ne = t / (t / j);ne = min(ne, u);sum += t / j * (ne - j + 1);sum -= (ne - j + 1) * (j + ne) / 2;}res += mu[i] * sum * 2;}cout << res;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/798241.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

李尚杰的第一次作业

这次作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc这个作业的目标 熟悉博客的建立,向老师/助教介绍自己并阐述对课程的期待姓名-学号 李尚杰-2022329301146一、个人简介 (一)基本介绍我叫李尚杰,来自22自动化1班,浙江杭州人。我爱好摄影、旅游、看电影、健身…

数木莫系且的旭酱买水问题

dut开区用,在别的情况下该博客无效数木莫系且的旭酱买水问题 创中的招新又双叒叕开始了,“数木莫系且”要开始出招新题了,“数木莫系且”的36位老东西为了想招新题整天废寝忘食、绞尽脑汁、抓耳挠腮、呕心沥血,甚至连水都忘记喝了。“数木莫系且“的不时用日语小声发癫的旭…

字符编码发展史1 — ASCII和EASCII

1. 字符集与字符编码1.1. 字符集 1.2. 字符编码 1.3. 两者的关系2. 字符编码的发展历史2.1. 第一个阶段 ASCII编码2.1.1. ASCII 2.1.2. EASCII1. 字符集与字符编码 1.1. 字符集 字符集(Charcater Set或Charset): 是一个系统支持的所有抽象字符的集合,也就是一系列字符的集合…

[JVM]对象创建过程

Java 对象的创建过程 Java对象创建的过程主要分为五个步骤,下面我将详细介绍这五个步骤。 Step1:类加载检查 虚拟机遇到一条new指令时,首先会去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且会检查这个符号引用所指向的类是否已经完成加载、连接和初始化,…

教小模型进行推理

https://arxiv.org/abs/2212.08410 思维链提示在基础层面上是如此成功,以至于它产生了一些被称为 x 链现象的东西。谷歌研究院探索了如何使用 llm 为现有数据集生成 CoT 数据本体,然后如何在 CoT 上微调较小的语言模型。 介绍 众所周知,思维链提示提高了大型语言模型的推理能…

[WesternCTF2018]shrine

打开题目就得到了python代码 import flask import os #导包 app = flask.Flask(__name__) #创建一个flask实例, app.config[FLAG] = os.environ.pop(FLAG) #从操作系统的环境变量中读取名为FLAG的值,并将其存储在Flask的配置中,POP:读取后删除该环境变量@app.route(/) #定义…

MySQL 8.0 Public Key Retrieval is not allowed 错误的解决方法

原文:MySQL 8.0 Public Key Retrieval is not allowed 错误的解决方法 参考:Connection Java - MySQL : Public Key Retrieval is not allowed在使用 MySQL 8.0 时重启应用后提示com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieva…

MobaXterm 密钥生成器

1、MobaXterm 密钥生成器,代码仓库地址: https://gitcode.com/gh_mirrors/mo/MobaXterm-keygen/blob/master/MobaXterm-Keygen.py 2、也可以用我打包好的exe程序,不用安装python环境: https://pan.baidu.com/s/1jo85pQc_kfWhcYmZcc49CQ 提取码:ws10 3、源码:#/usr/bin/e…

Linux引导启动程序(boot)

概述 本章主要描述boot/目录中的三个汇编代码文件,见列表6-1所示。正如在前一章中提到的,这三个文件虽然都是汇编程序,但却使用了两种语法格式。bootsect.s和setup.s是实模式下运行的16位代码程序,采用近似于Intel的汇编语言语法并且需要使用Intel 8086汇编编译器和连接器as86和…

9、const修饰指针

*代表指针,这样有助于记忆和区别这三种