当前位置: 首页 > news >正文

freee Programming Contest 2023(AtCoder Beginner Contest 310)

文章目录

  • A - Order Something Else(模拟)
  • B - Strictly Superior(模拟)
  • C - Reversible(模拟)
  • D - Peaceful Teams(DFS+状压)
  • E - NAND repeatedly(普通dp)
  • F - Make 10 Again(状态压缩+概率dp)
  • G - Takahashi And Pass-The-Ball Game(倍增/内向基环树)

A - Order Something Else(模拟)

题意:两种方式购买饮料,一种是直接购买,一种是使用优惠券购买,使用优惠券购买,但是必须买一个小菜。

思路:模拟。

代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 3005;
void solve() {int n, p, q;cin >> n >> p >> q;int mn = 0x3f3f3f3f;for (int i = 0; i < n; i++) {int x;cin >> x;mn = min(mn, x);}cout << min(p, q + mn) << '\n';
}
int main() {ios::sync_with_stdio(false);cin.tie(0);int T = 1;// cin >> T;while (T--) {solve();}return 0;
}

B - Strictly Superior(模拟)

题意:有n个产品,第i个产品价格为pi,有ci个功能,问是否有严格更优的产品。定义严格更优的产品优以下特征:

  • P i ⩾ P j P_i\geqslant{P_j} PiPj
  • 第j个含有第i个所有功能
  • 第j个价格严格更少,或者功能严格更多。

思路:模拟。

代码:

int mark[105][105];
int p[105], c[105];
void solve() {int n, m;cin >> n >> m;for (int i = 1; i <= n; i++) {cin >> p[i] >> c[i];for (int j = 0; j < c[i]; j++) {int x;cin >> x;mark[i][x] = 1;}}for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {if (i == j || p[i] < p[j]) continue;int flag = 1;for (int k = 0; k <= m; k++) {if (mark[i][k] > mark[j][k]) {flag = 0;break;}}if (!flag) continue;if (p[i] > p[j] || c[j] > c[i]) {cout << "Yes\n";return;}}}cout << "No\n";
}

C - Reversible(模拟)

题意:完全相同和恰好相反的字符串是相同的,求出这里所有不同的字符串。

思路:正向和方向取字典序最小放入集合中即可。

拓展:如果是要求循环同构条件下本质不同的字符串,可以使用最小表示法,或者后缀数组来实现求出字典序最小的位置,放入集合中即可,均可以实现线性复杂度找到最小字典序位置。

代码:

void solve() {int n;cin >> n;set<string> st;for (int i = 0; i < n; i++) {string s;cin >> s;string t = s;reverse(s.begin(), s.end());st.insert(min(s, t));}cout << st.size() << '\n';
}

D - Peaceful Teams(DFS+状压)

题意:有n个队员,但是其中m对不和睦的关系,现在要想划分成t个队伍,求出所有合法的不同的划分。

思路:暴力,这里的n最大为10,划分成t组,朴素暴力的时间复杂度是 O ( n t ) O(n^t) O(nt) 1e10数量级,无法承受。利用状态压缩,用一个数来代表一个小队,然后判断当前人是加入已有小队还是另外创建小队分类dfs,这样时间复杂度降到 O ( n ! ) O(n!) O(n!) 10!只有3,628,800。

理念:考虑划分可能有些困难,可以用动态规划的思想,就是考虑前i个的时候有哪些划分,例如,只有一个人的时候,就只能自成一队,当前i个人组成了dp[i]种划分时,此时再加入一个人,他可以选择加入现有的队,或者自成一队,这两者是互斥的。

注意:一定要预先分配内存块(reserve),否则,递归的时候,扩容的话可能会转移vector,导致上一个递归内存帧的迭代器失效。

代码:

int mask[15];
vector<int> teams;
//dfs遍历所有可能的划分情况
//now是单调递增的,根据动态规划的思想,考虑加入现有队伍或者自成一队的情况
//对于前面i种所有本质不同的划分,插入一个新的now,对于不同划分之间仍然保持本质不同。
//对于同一划分,不同插入位置也本质不同,因此这样是完备的。
int dfs(int now) {if (now == n + 1) {return teams.size() == t;}int ans = 0;for (int& team : teams) {//auto&!if (!(team & mask[now])) {team |= 1 << now;ans += dfs(now + 1);team ^= 1 << now;}}if (teams.size() < t) {teams.push_back(1 << now);ans += dfs(now + 1);teams.pop_back();}return ans;
}
void solve() {cin >> n >> t >> m;teams.reserve(t);for (int i = 0; i < m; i++) {int x, y;cin >> x >> y;mask[y] |= 1 << x;//都是拿大的去找小的}cout << dfs(1) << '\n';
}

E - NAND repeatedly(普通dp)

题意:给出一个01序列,求所有的非合取连续子段和。

思路:dp即可,dp表示所有以i结尾的非零后缀数,如果这位是0,那么,此处的贡献是i-1(注意这个运算,0的话任意后缀均可,除了单个零);如果是1,此处是1(独立一个数,最小的后缀)+(i-1) - dp(i-1)(表示以i-1为结尾所有为0的后缀,全部后缀减去非零后缀)。
d p i = { 1 + i − 1 − d p i − 1 s i 为 1 i − 1 s i 为 0 dp_i=\left\{ \begin{matrix} 1 + i-1-dp_{i-1}~~~~s_i为1\\ i-1~~~~s_i为0 \end{matrix} \right. dpi={1+i1dpi1    si1i1    si0

void solve() {int n;cin >> n;string s;cin >> s;int last = 0, cnt = 0;long long ans = 0;for (auto x : s) {if (x == '0') {ans += cnt;last = cnt;} else {last = 1 + cnt - last;ans += last;}cnt++;}cout << ans << '\n';
}

拓展:如果是求一个序列所有的连续子段异或和,这些数是int范围内,那么我们可以拆成32位,统计各位的贡献次数。普通异或的情况下。最后加权求和即可。
d p i = { 1 + i − 1 − d p i − 1 s i 为 1 d p i − 1 s i 为 0 dp_i=\left\{ \begin{matrix} 1 + i-1-dp_{i-1}~~~~s_i为1\\ dp_{i-1}~~~~s_i为0 \end{matrix} \right. dpi={1+i1dpi1    si1dpi1    si0

F - Make 10 Again(状态压缩+概率dp)

题意:给定N个骰子,每个骰子有Ai个面,问同时抛出这些骰子有多大的概率得到10

前言:如何设计状态?不同的概率对应有情况的不同划分,把诸多的骰子组合完整地划分成若干情况,使得这些情况的概率方便计算,方便推演是我们的目标。当然,我们可以将最后N个骰子的情况,简单地划分成两种情况,这些骰子能组成10的和这些骰子不能组成10的,但是这样划分太过粗糙,每种情况都有诸多的子情况,比较难以计算,不方便递推,尽管这样同样是合法的——这两种情况互不包含,并且涵盖了所有的情况。这里,我们可以把最后骰子的情况,划分成这些骰子能够组成的所有数的集合,这样有一个优异的性能,我们可以通过先前的集合和当前骰子的情况,推算该骰子所能转移到的所有能够抵达的状态,如果我们不选择这个集合,我们可以有原先的集合S都可以取到, 有 1 A i 概率 , T = { x ∈ S ∣ x + j ( j ∈ [ 1 , A i ] ] ) } 有\frac{1}{A_i}概率,T=\{x\in S\;|\;x+j(j\in[1,A_i]])\} Ai1概率,T={xSx+j(j[1,Ai]])},那么当前概率下可以抵达的状态便是 S ∪ T S\cup T ST,对于当前骰子等概率的各种情况,我们都能转移到前i+1个骰子的各种状态,更进一步,我们可以不考虑大于10的部分,我们于是将原先所有的情况,按照能够组成0~10这11个数的情况划分成2^11类型,这些类型完全涵盖了所有骰子状态,并且这些情况不会互相重叠。当我们考虑玩当前所有集合,所有骰子的情况,我们就能完整且不遗漏地得到得到当前所有骰子的所有状态的概率

思路: d p [ N ] [ m a s k ] dp[N][mask] dp[N][mask]表示,考虑前N个骰子的情况,够组合成这个mask集合的概率。

边界
d p [ 0 ] [ S ] = { 0 i f S ≠ { 0 } 1 i f S = { 0 } dp[0][S]=\left\{ \begin{array}{l} 0\quad if\;S\neq \{0\}\\ 1\quad if\;S=\{0\}\\ \end{array} \right. dp[0][S]={0ifS={0}1ifS={0}

转移
∀ i , S , j ∈ [ 1 , A i ] , d p [ i ] [ S ] → d p [ i + 1 ] [ S ∪ T ] 其中 T = { x ∈ S ∣ x + j ( j ∈ [ 1 , A i ] ] ) } \forall i,S, j\in{[1,A_i]},dp[i][S]\rightarrow dp[i+1][S\cup T]其中T=\{x\in S\;|\;x+j(j\in[1,A_i]])\} i,S,j[1,Ai],dp[i][S]dp[i+1][ST]其中T={xSx+j(j[1,Ai]])}

答案
∑ 10 ∈ S d p [ N ] [ S ] \sum_{10\in S}dp[N][S] 10Sdp[N][S]
时间复杂度
O ( 10 N 2 11 ) O(10N2^{11}) O(10N211)
约4e6

ll po(ll rad, ll idx) {ll res = 1;while (idx) {if (idx & 1) res = res * rad % mod;idx >>= 1;rad = rad * rad % mod; }return res;
}int mask = (1 << 11) - 1;
ll f[105][1 << 11];void solve() {f[0][1] = 1;int n;cin >> n;for (int i = 1; i <= n; i++) {int x;cin >> x;ll inv = po(x, mod - 2);for (int j = 1; j <= min(x, 10); j++) {for (int k = 0; k <= mask; k++) {int u = (k | (k << j)) & mask;f[i][u] = (f[i][u] + f[i - 1][k] * inv % mod) % mod;}}if (x > 10) {//取并了等于没有取,统一处理for (int k = 0; k <= mask; k++) {f[i][k] = (f[i][k] + f[i - 1][k] * inv % mod * (x - 10) % mod) % mod;}}}ll ans = 0;for (int i = 0; i <= mask; i++) {if (i & (1 << 10)) {ans = (ans + f[n][i]) % mod;}}cout << ans << '\n';
}

G - Takahashi And Pass-The-Ball Game(倍增/内向基环树)

题意:这里有 N N N个高桥君(这是Atcoder的社长),第 i i i个高桥君一个整数 A i A_i Ai B i B_i Bi个球。给定一个 K K K,等概率地选择 x , x ∈ [ 1 , K ] x,x\in[1,K] x,x[1,K],之后他们互相传球,第 i i i个高桥君,把球传给第 A i A_i Ai个高桥君,注意,他们是同时传球的,传 x x x次。求出每个高桥君手里的球的数量的期望。

思路:这里是倍增的方法。等概率 [ 1 , K ] [1,K] [1,K],我们最后答案是 ∑ i = 1 K 1 K f ( i ) \sum_{i=1}^K\frac{1}{K}{f(i)} i=1KK1f(i) f ( x ) f(x) f(x)表示 x x x次时,某个高桥君在手上的球的数目的。求期望,我们首先,可以求出 1 1 1 K K K的时候,各个高桥君手里球的数目,然后除以 K K K即可。

如何计算呢?

img

上图是传三次球的情况,我们最终的答案是后三排的和数组,因为不能传零次。如果是偶数排,我们可以把两排并作一排,我们可以传一次球累加得到绿色的第一排和第二排的和,也就是右侧蓝色的第一排,显然我们不能同样地算出蓝色第二排,因为 K K K非常大,我们要用快速幂的思想,蓝色第二排,也就是绿色第三排,绿色第四排的和,注意看,绿色第三排的球来自绿色第一排传两次的球,绿色第四排的球来自绿色第二排传两次的球,如果我们把绿色第一排和绿色第二排作为一个整体,那么相当于,这个整体连传两次球到绿色第三排和绿色第四排的整体,我们对传球关系进行迭代运算,可以得到右侧蓝色两排传直球的关系,经过这样的操作,总排数便减少了一半。传球有平行关系!

代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int mod = 998244353;ll po(ll rad, ll idx) {ll res = 1;rad %= mod;//炸long long!!!while (idx) {if (idx & 1) res = res * rad % mod;idx >>= 1;rad = rad * rad % mod; }return res;
}void solve() {int n;ll k;cin >> n >> k;vector<ll> A(n), B(n);vector<ll> ans(n);for (int i = 0; i < n; i++) {cin >> A[i];A[i]--;}for (int i = 0; i < n; i++) {cin >> B[i];ans[i] = mod - B[i];//减去第一排}ll inv = po(k, mod - 2);k++;//k+1排while (k) {if (k & 1) {//取走一排for (int i = 0; i < n; i++) {ans[i] = (ans[i] + B[i]) % mod;}//传一次球vector<ll> tmp(n);for (int i = 0; i < n; i++) {tmp[A[i]] = (tmp[A[i]] + B[i]) % mod;}B = tmp;}//两排并一排vector<ll> tmp(n);//传一次球for (int i = 0; i < n; i++) {tmp[A[i]] = (tmp[A[i]] + B[i]) % mod;}for (int i = 0; i < n; i++) {B[i] = (B[i] + tmp[i]) % mod;}//关系迭代vector<ll> AA(n);for (int i = 0; i < n; i++) {AA[i] = A[A[i]];} A = AA;k >>= 1;}for (int i = 0; i < n; i++) {cout << ans[i] * inv % mod << " \n"[i == n - 1];}
}

相关文章:

freee Programming Contest 2023(AtCoder Beginner Contest 310)

文章目录 A - Order Something Else&#xff08;模拟&#xff09;B - Strictly Superior&#xff08;模拟&#xff09;C - Reversible&#xff08;模拟&#xff09;D - Peaceful Teams(DFS状压)E - NAND repeatedly(普通dp)F - Make 10 Again&#xff08;状态压缩概率dp&#x…...

恒运资本:概念股是什么意思

概念股是指在特定的经济布景、方针环境、职业远景或社会热点等方面具有某种特别的发展远景和投资价值的股票。在投资者心目中&#xff0c;概念股的危险较大&#xff0c;可是或许带来高于商场平均水平的收益率。那么&#xff0c;概念股到底是什么意思&#xff1f;在本文中&#…...

十九、状态模式

一、什么是状态模式 状态&#xff08;State&#xff09;模式的定义&#xff1a;对有状态的对象&#xff0c;把复杂的“判断逻辑”提取到不同的状态对象中&#xff0c;允许状态对象在其内部状态发生改变时改变其行为。 状态模式包含以下主要角色&#xff1a; 环境类&#xff08…...

MySQL用navicat工具对表进行筛选查找

这个操作其实很简单&#xff0c;但是对于没操作的人来说&#xff0c;就是不会呀。所以小编出这一个详细图解&#xff0c;希望能够帮助到大家。话不多说看图。 第一步&#xff1a; 点进一张表&#xff0c;点击筛选。 第二步&#xff1a; 点击添加 第三步&#xff1a; 选择要…...

音视频 ffplay简单过滤器

视频旋转 ffplay -i test.mp4 -vf transpose1视频反转 ffplay test.mp4 -vf hflip ffplay test.mp4 -vf vflip视频旋转和反转 ffplay test.mp4 -vf hflip,transpose1音频变速播放 ffplay -i test.mp4 -af atempo2视频变速播放 ffplay -i test.mp4 -vf setptsPTS/2音视频同…...

索引 事务 存储引擎

################索引##################### 一、索引的概念 ●索引是一个排序的列表&#xff0c;在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址&#xff08;类似于C语言的链表通过指针指向数据记录的内存地址&#xff09;。 ●使用索引后可以不用扫描全表来…...

MySQL— 基础语法大全及操作演示!!!(事务)

MySQL—— 基础语法大全及操作演示&#xff08;事务&#xff09; 六、事务6.1 事务简介6.2 事务操作6.2.1 未控制事务6.2.2 控制事务一6.2.3 控制事务二 6.3 事务四大特性6.4 并发事务问题6.5 事务隔离级别 MySQL— 基础语法大全及操作演示&#xff01;&#xff01;&#xff01…...

xsschallenge1~13通关详细教程

文章目录 XSS 挑战靶场通关level1level2level3level4level5level6level7level8level9level10level11level12level13 XSS 挑战靶场通关 level1 通过观察发现这个用户信息可以修改 那么我们直接输入攻击代码 <script>alert(/wuhu/)</script>弹框如下&#xff1a; …...

考生作弊行为分析算法

考生作弊行为分析系统利用pythonyolo系列网络模型算法框架&#xff0c;考生作弊行为分析算法利用图像处理和智能算法对考生的行为进行分析和识别&#xff0c;经过算法服务器的复杂计算和逻辑判断&#xff0c;算法将根据考生行为的特征和规律&#xff0c;判定是否存在作弊行为。…...

Python 操作 Redis 数据库介绍

Redis 作为常用的 NoSql 数据库&#xff0c;主要用于缓存数据&#xff0c;提高数据读取效率&#xff0c;那在 Python 中应该如果连接和操作 Redis 呢&#xff1f;今天就为大概简单介绍下&#xff0c;在 Python 中操作 Redis 常用命令。 安装 redis 首先还是需要先安装 redis …...

十年JAVA搬砖路——软件工程概述

软件工程是一门关注软件开发过程的学科&#xff0c;它涉及到软件的设计、开发、测试、部署和维护等方面。软件工程的目标是通过系统化的方法和工具&#xff0c;以确保软件项目能够按时、按预算和按要求完成。 • 软件工程的7个基本概念&#xff1a; 软件生命周期&#xff1a;软…...

前后端项目部署上线详细笔记

部署 参考文章&#xff1a;如何部署网站&#xff1f;来比比谁的方法多 - 哔哩哔哩大家好&#xff0c;我是鱼皮&#xff0c;不知道朋友们有没有试着部署过自己开发的网站呢&#xff1f;其实部署网站非常简单&#xff0c;而且有非常多的花样。这篇文章就给大家分享几种主流的前端…...

Android 蓝牙开发( 二 )

前言 上一篇文章给大家分享了Android蓝牙的基础知识和基础用法&#xff0c;不过上一篇都是一些零散碎片化的程序&#xff0c;这一篇给大家分享Android蓝牙开发实战项目的初步使用 效果演示 : Android蓝牙搜索&#xff0c;配对&#xff0c;连接&#xff0c;通信 Android蓝牙实…...

C#调用barTender打印标签示例

使用的电脑需要先安装BarTender 我封装成一个类 using System; using System.Windows.Forms;namespace FT_Tools {public class SysContext{public static BarTender.Application btapp new BarTender.Application();public static BarTender.Format btFormat;public void Q…...

Spring——Spring读取文件

文章目录 1.通过 value 读取比较简单的配置信息2.通过ConfigurationProperties读取并与 bean 绑定3.通过ConfigurationProperties读取并校验4. PropertySource 读取指定 properties 文件5.题外话:Spring加载配置文件的优先级 很多时候我们需要将一些常用的配置信息比如阿里云os…...

这是一条求助贴(postman测试的时候一直是404)

看到这个问题是404的时候总感觉不该求助大家&#xff0c;404多常见一看就是简单的路径问题&#xff0c;我的好像不是&#xff0c;我把我的问题奉上。 首先我先给出我的url http://10.3.22.195:8080/escloud/rest/escloud_contentws/permissionStatistics/jc-haojl/sz 这是我…...

信号完整性分析基础知识之有损传输线、上升时间衰减和材料特性(四):有损传输线建模

传输线中信号衰减的两个损耗过程是通过信号和返回路径导体的串联电阻以及通过有损耗介电材料的分流电阻。这两个电阻器的电阻都与频率相关。 值得注意的是&#xff0c;理想电阻器的电阻随频率恒定。我们已经证明&#xff0c;在理想的有损传输线中&#xff0c;用于描述损耗的两个…...

elk日志收集系统

目录 前言 一、概述 二、案例 &#xff08;一&#xff09;、环境配置 安装node1与node2节点的elasticsearch node1的elasticsearch-head插件 &#xff08;二&#xff09;、node1服务器安装logstash 测试1&#xff1a; 标准输入与输出 测试2&#xff1a;使用rubydebug解…...

perl 语言中 AUTOLOAD 的用法

这里的 AUTOLOAD可以理解为自动加载。具体来说就是&#xff0c;在正常情况下&#xff0c;我们不能调用一个尚未定义的函数&#xff08;子例程&#xff09;。不过&#xff0c;如果在未定义函数的包中有一个名为 AUTOLOAD的函数&#xff0c;那么对未定义函数的调用都会路由至这个…...

服务器放在香港好用吗?

​  相较于国内服务器&#xff0c;将网站托管在香港服务器上最直观的好处是备案层面上的。香港服务器上的网站无需备案&#xff0c;因此更无备案时限&#xff0c;购买之后即可使用。 带宽优势 香港服务器的带宽一般分为香港本地带宽和国际带宽、直连中国骨干网 CN2三种。香港…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...