笔试强训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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值