笔试强训10.17

//法一:中点扩散

//法二:动态规划

//法三:hash+二分

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int N=1e6+10;
const int base=131;
ull hr[2*N],hl[2*N],p[2*N];//超过ull自动取余
char s[N*2];
ull get_hash(ull h[],int l,int r)//获取某段长度字符串的hash值
{
    return h[r]-h[l-1]*p[r-l+1];
}
int main()
{
    int t=1;
    while(scanf("%s",s+1),strcmp(s+1,"END"))
    {
        int res=0;
        int n=strlen(s+1);
        for(int i=2*n;i>0;i-=2)
        {
            s[i]=s[i/2];
            s[i-1]='z'+1;//添加#(未出现字符)
        }
        n*=2,p[0]=1;
        for(int i=1,j=n;i<=n;i++,j--)
        {
            hl[i]=hl[i-1]*base+s[i]-'a'+1;//处理hash值
            hr[i]=hr[i-1]*base+s[j]-'a'+1;
            p[i]=p[i-1]*base;
        }
        for(int i=1;i<n;i++)
        {
            int l=0,r=min(i-1,n-i),mid;//二分寻找以str[i]为中心的最长回文子串的长度
            while(r>l)
            {
                mid=l+r+1>>1;
                if(get_hash(hl,i-mid,i-1)==get_hash(hr,n-(mid+i)+1,n-(i+1)+1))
                    l=mid;
                else r=mid-1;
            }
            if(s[i-l]=='z'+1)
               res=max(res,l);
            else res=max(res,l+1);
        }
        printf("Case %d: %d\n",t++,res);
    }
    return 0;
}

//法四:Manacher算法

Manacher算法详解 - BT-7274 - 博客园 (cnblogs.com)

#include<bits/stdc++.h>
using namespace std;
int manacher(string str)
{
    if(!str.length()) return 0;
    int l=(int)(str.length()*2+1);
    char *s=new char[l];//记录回文子串
    int *p=new int[l];//记录每个位置最大回文半径
    int r,c,index,mx;
    r=c=-1;
    index=mx=0;
    for(int i=0;i<l;i++) s[i]=i&1?str[index++]:'#';
    for(int i=0;i<l;i++)
    {
        p[i]=r>i?min(r - i, p[2 * c - i]):1;
        while(i+p[i]<l&&i-p[i]>-1)
        {
            if(s[i+p[i]]==s[i-p[i]]) p[i]++;
            else break;
        }
        if(i+p[i]>r) 
        {
            r=i+p[i];
            c=i;
        }
        mx=max(mx,p[i]);
    }
    delete[] s;
	delete[] p;
    return mx-1;
    
}
int main()
{
    string str;
    cin>>str;
    cout<<manacher(str)<<endl;
    return 0;
}

用双层循环会超时,所以改用动态规划的思想。(核心是通过一次遍历找出符合条件的最大值和最小值,一次循环保证卖一定在买后面)。

#include <iostream>
using namespace std;
int p[1000010];
int dp[1000010];
int main() {
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        int m;
        scanf("%d",&m);
        p[i]=m;
    }
    int min=p[0];
    dp[0]=0;
    for(int i=1;i<n;i++)
    {
        if(p[i]<min)
            min=p[i];
        dp[i]=max(dp[i-1],p[i]-min);
    }
    cout<<dp[n-1]<<endl;
}
// 64 位输出请用 printf("%lld")

#include<iostream>
using namespace std;
int ans = 0;//记录路径条数
int n, m, x, y;
bool index[24][24] = { 0 };//将所有坐标初始化为0(在递归时0是有作用的)
void dfs(int x, int y)
{
	if (x == n && y == m)
	{
		ans++;
		return;
	}
	if (index[x][y] == 1 || x > n || y > m)
	{
		return;
	}
	dfs(x + 1, y);//下
	dfs(x, y + 1);//右
}
int main()
{
	cin >> n >> m >> x >> y;//B点和马的坐标
	x += 2, y += 2, n += 2, m += 2;//这一步很重要,因为下面index最小为x-2,若保持没有负数加2即可
	index[x][y] = 1;
	index[x - 2][y - 1] = 1;
	index[x - 2][y + 1] = 1;
	index[x + 2][y - 1] = 1;
	index[x + 2][y + 1] = 1;
	index[x - 1][y + 2] = 1;
	index[x - 1][y - 2] = 1;
	index[x + 1][y + 2] = 1;
	index[x + 1][y - 2] = 1;//标记马以及初始坐标
	dfs(2,2);//原点平移到(2,2)
	cout << ans;
	return 0;
}

#include<iostream>
using namespace std;
int n, m, x, y;
bool index[24][24] = { 0 };//将所有坐标初始化为0(在递归时0是有作用的)
long long int f[24][24] = {0};
int main()
{
	cin >> n >> m >> x >> y;//B点和马的坐标
	x += 2, y += 2, n += 2, m += 2;//这一步很重要,因为下面index最小为x-2,若保持没有负数加2即可
	index[x][y] = 1;
	index[x - 2][y - 1] = 1;
	index[x - 2][y + 1] = 1;
	index[x + 2][y - 1] = 1;
	index[x + 2][y + 1] = 1;
	index[x - 1][y + 2] = 1;
	index[x - 1][y - 2] = 1;
	index[x + 1][y + 2] = 1;
	index[x + 1][y - 2] = 1;//标记马以及初始坐标
	f[2][2] = 1;
	for (int x = 2; x <= n; x++)
	{
		for (int y = 2; y <= m; y++)
		{
			if (index[x][y] == 1 || x == 2 && y == 2)continue;
				f[x][y] = f[x - 1][y] + f[x][y - 1];
		}
	}
	cout << f[n][m];
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何优化批处理策略,最大限度地“压榨”GPU性能

新手数据科学家和机器学习工程师常常会问一个关键问题&#xff1a;如何判断他们的深度学习训练过程是否在正常运行&#xff1f;在本文中&#xff0c;我们将学习如何诊断和优化深度学习的性能问题&#xff0c;不论是在单台机器还是多台机器上进行训练。通过这些方法&#xff0c;…

uniapp onPageScroll

子组件有onPageScroll, 首页也要引入onPageScroll, eg: 主页面 sell/detail/index 《子组件》 <script setup> 引入onPageScroll </script> 组件&#xff1a; 引入onPageScroll 别人的比较

阿里 C++面试,算法题没做出来,,,

我本人是非科班学 C 后端和嵌入式的。在我面试的过程中&#xff0c;竟然得到了阿里​ C 研发工程师的面试机会。因为&#xff0c;阿里主要是用 Java 比较多&#xff0c;C 的岗位比较少​&#xff0c;所以感觉这个机会还是挺难得的。 阿里 C 研发工程师面试考了我一道类似于快速…

五个必备的高清无水印视频素材库推荐

做抖音、短视频创作的朋友都知道&#xff0c;优质的素材往往决定了作品能否获得更多关注。如果你还不知道在哪里下载高清无水印的视频素材&#xff0c;不用担心&#xff01;今天为你推荐5个高品质的视频素材库&#xff0c;助你轻松创作出爆款视频。 蛙学网 是国内领先的视频素材…

Windows 11 24H2版本有哪些新功能_Windows 11 24H2十四大新功能介绍

距离上次发布的23H2版本已经过去了一年时间&#xff0c;现在&#xff0c;Win 11的24H2版本终于等到了&#xff0c;微软已经全面公开发布Win11 24H2版本&#xff0c;版本号为26100.1742&#xff0c;此次官宣的版本包括了消费者版、商业版、LTSC 2024版等&#xff0c;各种语言版本…

选择合适的SSL证书

随着我们在线业务的增长&#xff0c;确保网站安全变得越来越重要。对于许多人来说&#xff0c;保护网站安全的想法似乎令人望而生畏&#xff0c;尤其是在有各种SSL证书可用的情况下。您可能想知道哪一个最适合您的业务需求或如何浏览这些选项。 除了SSL证书之外&#xff0c;使…

IIC协议解析

文章目录 1 IIC理解1.1 IIC简述1.2 IIC协议优缺点1.3 传输速度 2 IIC数据格式3 数据时序3.1 写时序3.2 读时序 参考链接 1 IIC理解 1.1 IIC简述 IIC全称Inter Integrated Circuit&#xff0c;即集成电路总线。是由Philips半导体公司于八十年代初设计出的一种两线式串行总线协议…

雷达手势识别技术

1、IR-UWB 手势识别方案 该任务可以分为数据采集&#xff0c;雷达数据处理&#xff0c;识别分类三个部分。 1.1 UWB Radar 数据处理 首先采集慢时间快时间维数据&#xff1a; 然后仍然是Clutter removal filter&#xff1a; 之后正则化转化为灰度图像&#xff1a; 使用matlab f…

springboot+大数据+基于大数据的电脑硬件推荐系统【内含源码+文档+部署教程】

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ &#x1f345;由于篇幅限制&#xff0c;想要获取完整文章或者源码&#xff0c;或者代做&am…

虚幻闪烁灯光材质

创建一个材质 材质域改成光照函数 , Time让材质动起来 参数B用来控制速度 , Sine 让灯光闪烁 , Frac 增加了闪烁细节 把材质放到灯光材质上 效果还是挺不错的! 可以用于一些恐怖游戏~

Redis和Jedis的区别

目录 含义与用途 Jedis案例 总结 含义与用途 Redis&#xff1a; 概念&#xff1a;Redis是一个基于内存的键值存储数据库&#xff0c;支持丰富的数据结构。比如&#xff1a;字符串功能&#xff1a;除了基础的数据存储&#xff0c;Redis还提供了丰富的高级功能。如持久化&…

Python第七八次作业

1.输入一个大于0的正整数n&#xff0c;如果n 1 ,则返回1&#xff0c; 如果n是偶数&#xff0c;则返回 n // 2 &#xff0c;如果n是奇数&#xff0c;则返回 3n 1&#xff0c;将所有的返回值存放到一个列表中&#xff0c;注意&#xff1a;n是第一个元素&#xff0c;其他的元素根…

entity,pojo,vo,dto 详解

在Java项目中&#xff0c;包名通常用于组织代码&#xff0c;使其更加清晰和易于维护。entity、pojo、vo和dto是常见的包名&#xff0c;它们各自有不同的含义和用途。下面将详细解释这些包名的含义&#xff0c;并提供一个示例&#xff0c;帮助你更好地理解它们在项目中的应用。 …

DAPLINK 之 RTT 输出日志

文章目录 前言1 安装 SEGGER RTT2 OpenOCD 下的 rtt2.1 调试环境2.2 输出日志 3 关于日志中的文件名参考 前言 1&#xff09;RTT&#xff08;Real Time Transfer&#xff0c;实时传输&#xff09;&#xff1a;SEGGER 的 Real Time Transfer (RTT) 是一种经过验证的技术&#x…

mysql查看和修改默认配置

1.查看最大连接数 SELECT max_connections; 或者 SHOW VARIABLES LIKE max_connections;2.查看当前连接的客户端 SHOW PROCESSLIST;2.临时设置最大连接数 SET GLOBAL max_connections 500;3.临时设置连接客户端交互超时时间 SET GLOBAL interactive_timeout 1800;4.永久生…

3.3 Thymeleaf语法

文章目录 引言Thymeleaf标签显示标签链接地址标签条件判断标签元素遍历标签 Thymeleaf表达式变量表达式选择变量表达式消息表达式链接表达式 Thymeleaf内置对象上下文对象上下文变量上下文区域请求对象响应对象会话对象日期对象 实战演练创建控制器创建模板页面 结语 引言 Thy…

【Python爬虫】看电影还在用VIP?一个python代码让你实现电影自由!附源码

今日主题 如何用Python解析vip电影。 什么是vip电影&#xff1f; 这些vip电影啊&#xff0c;想要观看的话&#xff0c;必须充值会员&#xff0c;否则没法看。 比如这个&#xff1a; 这些vip电影解析后呢&#xff1f; 不需要会员&#xff0c;不需要登录&#xff0c;可以直接…

4、.Net 快速开发框架:DncZeus - 开源项目研究文章

DncZeus 是一个基于 ASP.NET Core 和 Vue.js 的前后端分离的通用后台管理系统框架&#xff0c;其愿景是成为一个易于使用且功能丰富的 .NET Core 通用后台权限管理模板系统基础框架。项目名称 "DncZeus" 由 "Dnc"(.NET Core 的缩写)和 "Zeus"(古…

STMicroelectronics 意法半导体芯片选型表

意法半导体作为全球知名的半导体厂商&#xff0c;其产品广泛应用于各个领域&#xff0c;从消费电子到工业控制&#xff0c;从汽车电子到通信设备&#xff0c;都能看到意法半导体芯片的身影。在电子硬件设计领域&#xff0c;芯片的选型至关重要。亿配芯城&#xff08;ICgoodFind…

SpringBoot+MyBatis+MySQL项目基础搭建

一、新建项目 1.1 新建springboot项目 新建项目 选择SpringBoot&#xff0c;填写基本信息&#xff0c;主要是JDK版本和项目构建方式&#xff0c;此处以JDK17和Maven举例。 1.2 引入依赖 选择SpringBoot版本&#xff0c;勾选Lombok&#xff0c;Spring Web&#xff0c;MyBa…