daimayuan 三回文序列(代码源)

简介: daimayuan 三回文序列(代码源)

实现方法:

1.先二维前缀将每个数字的前缀和保存,再保存他们前缀增加时候的位置(last数组维护)。

2.然后枚举从1~26的左边=右边长度(k 1 k1k1),然后找到他们前缀有k 1 k1k1x ( 范 围 1 − 26 ) x(范围1-26)x126,后缀有 k 1 k1k1x xx的下标,然后中间找最大k 2 k2k2长度,记录最大值即为答案,时间复杂度O ( m ∗ n ) O(m*n)O(mn).

3.详情看注解。

/*********************************************************************
    程序名:
    版权: Joecai
    作者: Joecai
    日期: 2022-04-11 10:39
    说明:
*********************************************************************/
#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
# define rep(i,be,en) for(int i=be;i<=en;i++)
# define pre(i,be,en) for(int i=be;i>=en;i--)
typedef pair<int, int> PII;
#define ll long long
#define endl "\n"
#define LOCAL
#define pb push_back
#define eb emplace_back
#define sp(i) setprecision(i)
const int N = 2e5 + 10, INF = 0x3f3f3f3f;
void solve()
{
  int n;
  cin >> n;
  vector<vector<int>>sum(27, vector<int>(n + 1, 0));//等于sum[26][n],求数字x的前缀和
  vector<vector<int>>last(27, vector<int>(n + 2, 0));//等于last[26][n] 保存i前缀和为j时的下标
  for (int i = 1; i <= n; i++)
  {
    int x;
    cin >> x;
    for (int j = 1; j <= 26; j++)
      sum[j][i] = sum[j][i - 1];//维护前缀和
    sum[x][i]++;
    last[x][sum[x][i]] = i;//更新前缀和对应的下标
  }
  for (int i = 1; i <= 26; i++)
  {
    last[i][sum[i][n] + 1] = last[i][sum[i][n]] + 1;//防止越界,设置一下
  }
  int ans = 0;
  for (int i = 1; i <= 26; i++)
  {
    for (int j = 0; j <= sum[i][n]; j++)
    {
      int l = last[i][j] + 1;
      int r = last[i][sum[i][n] - j + 1] - 1;
      if (l > r) break;
      for (int k = 1; k <= 26; k++)
      {
        int cnt = sum[k][r] - sum[k][l - 1];
        ans = max(ans, j * 2 + cnt);
      }
    }
  }
  cout << ans << endl;
}
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  //#ifdef LOCAL
  //freopen("data.in.txt","r",stdin);
  //freopen("data.out.txt","w",stdout);
  //#endif
  int __ = 1;
  cin >> __;
  while (__--)
  {
    solve();
  }
  return 0;
}


目录
相关文章
|
Linux 网络安全 数据库
CentOS7开启Firewalld防火墙日志记录获取被拦截的IP
CentOS7开启Firewalld防火墙日志记录获取被拦截的IP
2352 0
CentOS7开启Firewalld防火墙日志记录获取被拦截的IP
|
存储 监控 Cloud Native
云原生系列Go语言篇-并发 Part 2
既然已经讲解了Go为并发所提供的基础工具,我们就来学习一些并发的最佳实践和模式吧。
156 0
|
3月前
|
人工智能 自然语言处理 测试技术
从人工到AI驱动:天猫测试全流程自动化变革实践
天猫技术质量团队探索AI在测试全流程的落地应用,覆盖需求解析、用例生成、数据构造、执行验证等核心环节。通过AI+自然语言驱动,实现测试自动化、可溯化与可管理化,在用例生成、数据构造和执行校验中显著提效,推动测试体系从人工迈向AI全流程自动化,提升效率40%以上,用例覆盖超70%,并构建行业级知识资产沉淀平台。
从人工到AI驱动:天猫测试全流程自动化变革实践
|
4月前
|
人工智能 测试技术 调度
写用例写到怀疑人生?AI 智能测试平台帮你一键生成!
霍格沃兹测试开发学社推出AI智能测试用例生成功能,结合需求文档一键生成高质量测试用例,大幅提升效率,减少重复劳动。支持自定义提示词、多文档分析与批量管理,助力测试人员高效完成测试设计,释放更多时间投入核心分析工作。平台已开放内测,欢迎体验!
|
2月前
|
敏捷开发 人工智能 数据可视化
让AI替你写用例!Dify+RAG工作流,一键生成覆盖率达90%的测试方案
本文介绍如何利用Dify.ai与RAG技术构建智能测试用例生成工作流,通过接入需求文档、API接口等知识库,实现高覆盖率(超90%)的自动化用例生成,显著提升测试效率与质量,解放测试人力,助力敏捷开发。
|
10月前
|
人工智能 自然语言处理 Java
快速带你上手通义灵码 2.0,体验飞一般的感觉
通义灵码个人版为开发者免费提供智能编码能力,专业版限免期内开放更多功能。使用需先注册阿里云账号,支持JetBrains IDEs、Visual Studio Code等开发工具。以Visual Studio Code为例,安装插件并登录后即可体验其强大功能。通义灵码2.0在代码生成、需求理解及单元测试自动化等方面有显著提升,支持多语言和复杂场景,大幅提高开发效率。
235579 39
快速带你上手通义灵码 2.0,体验飞一般的感觉
|
缓存 数据库 数据安全/隐私保护
我绘制文章插图的三个神级工具
我绘制文章插图的三个神级工具
247 0
|
存储 JSON JavaScript
Node.js精进(7)——日志
Node.js精进(7)——日志
|
IDE Java 开发工具
码云/GitHub Fork代码仓并提交PR代码
背景:在企业开发过程中,都会有自己的代码仓管理,一般会有一个上游代码仓,然后自己fork下该项目,提交到自己下面的项目,并提交PR(或MR)进行合入请求。这里我以码云的代码仓库管理系统为例,演示如何提交代码到上游仓库。 于是有了这一个git代码提交规范,希望能帮助到你。
610 0
码云/GitHub Fork代码仓并提交PR代码
|
前端开发 JavaScript
Web前端开发笔记——第四章 JavaScript程序设计 第三节 数据类型
Web前端开发笔记——第四章 JavaScript程序设计 第三节 数据类型
Web前端开发笔记——第四章 JavaScript程序设计 第三节 数据类型

热门文章

最新文章