笔试强训day20

经此一役小红所向无敌

经过重重困难,对立和光终于来到魔王城,和最终的大魔王——小红进行决战。

已知小红的血量是 1099999999910^{999999999}10999999999 。
对立的攻击力是 aaa ,血量是 hhh 。
光的攻击力是 bbb ,血量是 kkk 。

每回合光先对小红发起攻击,然后对立对小红发起攻击,然后小红展开幻术,令光和对立同时互相攻击。
每次攻击后,受击者的血量会减掉攻击者的攻击力。
当光和对立其中一人死亡后,另一人会悲痛欲绝,对小红发出自己攻击力*10的伤害的大招,然后自杀。(若两人同时死亡,则两人都无法发出大招)

小红想知道,弱小的光和对立,她们能对自己造成多少点伤害?

输入描述:

一行 444 个正整数 aaa , hhh , bbb , kkk ,用空格隔开。


1≤a,b,h,k≤1091\leq a,b,h,k\leq1 0^91≤a,b,h,k≤109 

输出描述:

一个正整数,代表小红受到的伤害。
#include <iostream>
using namespace std;
typedef long long LL;
LL a, h, b, k;
int main()
{
	cin >> a >> h >> b >> k;

	LL ret = 0;
	// 1. 计算互砍多少回合
	LL n = min(h / b, k / a);
	ret += n * (a + b);

	// 2. 计算剩余⾎量
	h -= n * b;
	k -= n * a;

	// 3. 判断是否都还活着
	if (h > 0 && k > 0)
	{
		h -= b;
		k -= a;
		ret += a + b;
	}

	// 4. 判断是否会放⼤
	if (h > 0 || k > 0)
	{
		ret += 10 * (h > 0 ? a : b);
	}

	cout << ret << endl;

	return 0;
}

连续子数组最大和

描述

给定一个长度为 � n 的数组,数组中的数为整数。

请你选择一个非空连续子数组,使该子数组所有数之和尽可能大,子数组最小长度为1。求这个最大值。

输入描述:

第一行为一个正整数 � n ,代表数组的长度。 1≤�≤2∗1051≤n≤2∗105

第二行为 � n 个整数 ��a**i,用空格隔开,代表数组中的每一个数。 ∣��∣≤102∣a**i∣≤102

输出描述:

连续子数组的最大之和。

贪心

#include <chrono>
#include <iostream>
#include <climits>

using namespace std;
int n;
const int N = 2e5+10;
int a[N];

int main()
{
    int ans = INT_MIN;
    cin>>n;
    for(int i = 0;i<n;++i){
        cin>>a[i];
        ans = max(ans,a[i]);
    }
   int sum = 0;
    for(int i = 0;i<n;++i)
    {
        sum += a[i];
        if(sum<0){
            sum = 0;
        }
        if(sum)
        ans = max(sum,ans);
    }
    cout<<ans<<'\n';
    return 0;
}

动态规划

#include <iostream>
#include <climits>

using namespace std;
int n;
const int N = 2e5+10;
int a[N],dp[N];

int main()
{
    //dp[i]以i为结尾的所有子数组中,最大和是多少
    cin>>n;
    int ans = INT_MIN;
    for(int i = 1;i<=n;++i)
    {
        cin>>a[i];
        dp[i] = max(dp[i-1],0)+a[i];
        ans = max(ans,dp[i]);
    }
    cout<<ans;
    return 0;
}

非对称之美

链接:https://ac.nowcoder.com/acm/problem/214851
来源:牛客网

给出一个字符串,求最长非回文子字符串的长度

输入描述:

在一行中给出一个字符串 s,1≤∣s∣≤107s, 1 \le |s| \le 10^7s,1≤∣s∣≤107

输出描述:

一个整数
s = input()
n = len(s)
if s == s[0]*n:
    print(0)
else:
    print(n - 1 if s==s[::-1] else n)
<think>嗯,用户之前已经得到了一个四周的学习计划,现在他们提到有周六周日两天假期,每天有6到8小时的空闲时间,想要进一步缩短学习时间。这说明用户可能时间紧迫,比如春招临近,需要尽快掌握C++的笔试面试内容。用户之前的情况是会C语言,现在转学C++,所以需要利用已有的C基础来加速学习。 首先,我需要确定用户的主要需求是缩短总学习时长,同时保持学习效果,特别是针对笔试和面试的核心考点。用户可能希望在更短的时间内集中突破重点,而不是按部就班地学习所有内容。因此,需要调整原有的四周计划,压缩到更短的时间,比如两天的高度学习,但需要确保覆盖最关键的知识点。 接下来,分析用户的时间安排。两天每天6到8小时,总共有12到16小时的学习时间。原有的计划分为四周,每天两小时,共56小时。现在要在两天内完成,时间大大缩短,所以必须精选最高频和重要的内容,舍弃次要部分。 考虑到C++面试和笔试的重点通常包括:类和对象、继承与多态(尤其是虚函数表)、STL容器(如vector、map)、智能指针、以及现代C++特性如移动语义和右值引用。此外,内存管理和模板基础也是常见考点。需要将这些内容浓缩到两天内,同时结合实战练习,如LeetCode题目和模拟面试题。 可能的挑战是如何在有限的时间内高效覆盖这些内容,并且确保用户能够理解关键概念,而不仅仅是表面知识。需要设计一个紧凑的学习计划,每个时间段专注于一个主题,结合理论学习和动手实践,例如通过代码示例和即时练习来巩固知识点。 另外,用户已经会C语言,可以利用这一点加速理解C++的特性。例如,对比C的结构体和C++的类,C的函数指针和C++的虚函数等。这样可以减少学习时间,因为用户已经有相关的基础。 需要注意,两天的高度学习可能会让用户感到压力,因此学习计划需要合理分配时间,避免信息过载。每个学习模块应控制在1到2小时内,中间穿插练习和休息,保持学习效率。 最后,要确保用户能够在短时间内掌握足够应对笔试面试的知识,可能需要重点放在高频考点和常见面试题上,例如手写智能指针、虚函数表原理、STL容器的使用及底层实现等。同时,提供实战练习和错题复盘,帮助用户巩固所学内容,并在模拟面试中应用这些知识。</think>针对周末两天突击学习(每天6-8小时,总时长12-16小时),我为你设计**超浓缩实战方案**,聚焦笔试面试最高频核心考点,利用C语言基础快速突破: --- ### **Day 1:核心概念突破(8小时)** **🔥 上午(4小时)—— 生死时速班** 1. **类与对象速成(1.5h)** - 手撕代码:对比C结构体实现类(重点构造/析构函数) - 虚函数表手绘练(必须掌握!) - 多态实现:用C的函数指针模拟虚函数(理解底层) 2. **STL核武器(2h)** - vector底层扩容机制(笔试必考) - map/unordered_map红黑树与哈希实现差异 - 迭代器失效场景速记(附典型笔试题) 3. **智能指针生死战(0.5h)** - unique_ptr vs shared_ptr内存模型手绘 - 循环引用问题(weak_ptr急救包) **💻 下午(4小时)—— 代码实战营** ```markdown 14:00-15:30 高频题冲刺: - LeetCode 155(最小栈,考察类设计) - 手写vector核心接口(push_back/reserve) - 实现线程安全的单例模式(双重锁校验) 15:30-17:00 底层原理突破: - 用gdb查看虚函数表内存布局 - 通过汇编代码分析多态调用过程 - 对比malloc与new的内存分配差异 ``` --- ### **Day 2:面试直通车(8小时)** **💡 上午(4小时)—— 考点轰炸机** 1. **现代C++闪电战(2h)** - 移动语义:对比深浅拷贝手写String类 - 完美转发实战(std::forward应用场景) - constexpr编译期计算(面试加分项) 2. **模板元编程急救(1h)** - 手写泛型栈模板类(重点模板特化) - type_traits实战(enable_if技巧) 3. **内存管理死记硬背(1h)** - new/delete重载实现内存池(笔试高频) - 内存对齐规则速记(#pragma pack原理) **🚀 下午(4小时)—— 全真模拟战** ```markdown 14:00-16:00 真题绞杀: - 牛客网《C++工程师必考20题》限时刷 - 剑指Offer 07/35/36(树与链表专题) - 大厂高频题:对象池设计/环形缓冲区实现 16:00-18:00 面试模拟: - 白板编程:手写智能指针(面试官最爱) - 口述考点:STL线程安全问题(附标准答案模板) - 压力测试:虚函数表10连问攻防演练 ``` --- ### **生存指南** 1. **保命技巧**: - 遇到陌生概念时,立即用C语言实现类比(如用结构体+函数指针模拟类) - 所有代码示例必须手写三遍(类定义/智能指针/容器操作) 2. **急救包资源**: - 牛客网《C++面试急救手册》(高频考点汇总) - GitHub仓库:Cpp-Shortcut(精选代码模板) 3. **重点雷区**: ```c++ // 必须避免的死亡陷阱 vector<int> v; for(auto it=v.begin(); it!=v.end(); ){ if(*it == 1) v.erase(it++); // 迭代器失效! else ++it; } ``` 通过这个方案,你将能在两天内快速掌握80%以上的笔试面试高频考点。建议最后2小时重点复盘错题,并使用CLion调试器动态观察对象内存变化(这对理解虚函数机制有奇效)!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值