2024 ICPC香港站 H.Mah-jong

server/2025/2/25 11:16:33/

这题的过题数竟然能算成金牌题,雀实很有思维量,这是浙大很爱出的一类麻将题,曾经在CCPC2023桂林站里也出现过,那道题是防AK题,也是那场里需要用到少见的斯坦纳树😱

现场赛的时候看到这道题目第一感觉是扫描线,结合了一下过题人数更加确定了,实际上根据这个权值大小是感觉可以卡常的一道题,我来讲解一下~:

给你一个序列,问其中包含多少种麻将子序列,即这个子序列中包含Chow结构和Pong结构,Chow结构是{x,x+1,x+2},Pong结构是{x,x,x},那么第一感觉解决所有子序列的计数问题我们想到的就是扫描线或者双指针这两种解法。

但是这道题目基本可以排除扫描线,扫什么玩意呢?

因此只能从这个麻将的本质入手,我们很容易发现对于三个一样的“Chow”结构,也就是{x,x+1,x+2}{x,x+1,x+2}{x,x+1,x+2}可以变换成三个不一样的“Pong”结构,也就是{x,x,x}{x+1,x+1,x+1}{x+2,x+2,x+2}

所以根据这样的性质,我们可以知道,一个麻将序列中,可视化的Chow结构相同的x不会超过2个,然后所有的Chow的x取值只会在[1,6]之间,那么关于所有不同的麻将序列中的Chow的种类不超过3^6个。

所以我们枚举Chow的序列一种729个,然后我们使用双指针寻找出大序列中包含某个种类的子序列的个数,容易推出解决这样一个问题是可以进行双指针算法的,这里直接给出题解的原话:

那么直接上代码了:

#include<bits/stdc++.h>
#define Alex std::ios::sync_with_stdio(false),std::cin.tie(0),std::cout.tie(0);
#define int long long
#define double long double
#define L(i,a,b) for(int i = a;i <= b;i++)
#define R(i,a,b) for(int i = a;i >= b;i--)const int QAQ = 0;
const int mod = 1e9 + 7;
const int P = 998244353;
const double eps = 1e-10;
const double pi = std::acos(-1.0);//using namespace std;inline void Fre()
{int liujiahui = 142857;freopen("circles.in","r",stdin);freopen("circles.out","w",stdout);
}inline int qpow(int x,int y)
{int res = 1;while(y){if(y & 1) res = (res * x) % mod;x = (x * x) % mod;y >>= 1;}return res;
}inline int Inv(int x)
{return qpow(x,mod - 2);
}inline int Sign(double x)
{if(-eps < x && x < eps) return 0;return x < 0 ? -1 : 1;
}int n,a[200005],tong[200005][10];
int f[500005],g[500005],h[500005];signed main()
{
//	Fre();Alex;int _;_ = 1;std::cin>>_;while(_--){std::cin>>n;for(int i = 1;i <= n;i++) std::cin>>a[i];for(int i = 0;i <= n;i++)for(int j = 1;j <= 8;j++) tong[i][j] = 0;for(int i = 1;i <= n;i++){for(int j = 1;j <= 8;j++) tong[i][j] = tong[i - 1][j];tong[i][a[i]] = tong[i - 1][a[i]] + 1;}for(int i = 0;i <= n;i++) f[i] = 0;for(int i = 1;i <= n;i++){int s = 0;for(int j = 1;j <= 8;j++) s = s * 3 + tong[i][j] % 3;f[i] = s;}int ans = 0;for(int bit = 0;bit < 729;bit++){int g[10] = {0,0,0,0,0,0,0,0,0,0};int t = bit;for(int i = 1;i <= 6;i++){int x = t % 3;t = t / 3;g[i] = g[i] + x;g[i + 1] = g[i + 1] + x;g[i + 2] = g[i + 2] + x;}for(int i = 0;i <= n;i++) h[f[i]]++;int l = 0;for(int i = 1;i <= n;i++){while(l <= i) h[f[l++]]--;int s = 0;for(int j = 1;j <= 8;j++){while(l <= n && tong[l][j] < tong[i - 1][j] + g[j]){h[f[l++]]--;}s = s * 3 + (tong[i - 1][j] + g[j]) % 3;}if(l > n) break;ans = ans + h[s];}}std::cout<<ans<<'\n';}return QAQ;
}


http://www.ppmy.cn/server/170541.html

相关文章

苍穹外卖中的模块总结

本文总结苍穹外卖项目中可复用的通用设计 sky-common constant存放常量类&#xff0c;包括消息常量&#xff0c;状态常量 context是上下文对象&#xff0c;封装了threadlocal package com.sky.context;public class BaseContext {public static ThreadLocal<Long> thre…

前端兼容处理接口返回的文件流或json数据

参考文档&#xff1a;JavaScript | MDN 参考链接&#xff1a;Blob格式转json格式&#xff0c;拿到后端返回的json数据_blob转json-CSDN博客 参考链接&#xff1a;https://juejin.cn/post/7117939029567340557 场景&#xff1a;导入上传文件&#xff0c;导入成功&#xff0c;…

podman加速器配置,harbor镜像仓库部署

Docker加速器 registries加速器 [rootlocalhost ~]# cat /etc/redhat-release CentOS Stream release 8 [rootlocalhost ~]# cd /etc/containers/ [rootlocalhost containers]# ls certs.d policy.json registries.conf.d storage.conf oci registries.conf re…

计算机网络————(一)HTTP讲解

基础内容分类 从TCP/IP协议栈为依托&#xff0c;由上至下、从应用层到基础设施介绍协议。 1.应用层&#xff1a; HTTP/1.1 Websocket HTTP/2.0 2.应用层的安全基础设施 LTS/SSL 3.传输层 TCP 4.网络层及数据链路层 IP层和以太网 HTTP协议 网络页面形成基本 流程&#xff1a…

基于eBPF的全栈可观测性系统:重新定义云原生环境诊断范式

引言&#xff1a;突破传统APM的性能桎梏 某头部电商平台采用eBPF重构可观测体系后&#xff0c;生产环境指标采集性能提升327倍&#xff1a;百万QPS场景下传统代理模式CPU占用达63%&#xff0c;而eBPF直采方案仅消耗0.9%内核资源。核心业务的全链路追踪时延从900μs降至18μs&a…

深度学习pytorch之19种优化算法(optimizer)解析

提示&#xff1a;有谬误请指正 摘要 本博客详细介绍了多种常见的深度学习优化算法&#xff0c;包括经典的LBFGS 、Rprop 、Adagrad、RMSprop 、Adadelta 、ASGD 、Adamax、Adam、AdamW、NAdam、RAdam以及SparseAdam等&#xff0c;通过对这些算法的公式和参数说明进行详细解析…

【漫话机器学习系列】101.特征选择法之Lasso(Lasso For Feature Selection)

Lasso 特征选择法详解 1. Lasso 回归简介 Lasso&#xff08;Least Absolute Shrinkage and Selection Operator&#xff0c;最小绝对收缩和选择算子&#xff09;是一种基于 L1 范数正则化的线性回归方法。它不仅能够提高模型的泛化能力&#xff0c;还可以自动进行特征选择&am…

PostgreSQL数据库之pg_dump使用

目录 前言 1. 基础用法 1.1 备份整个数据库到 SQL 文件 2. 备份选项 2.1 仅备份结构&#xff08;不包含数据&#xff09; 2.2 仅备份数据&#xff08;不包含表结构&#xff09; 2.3 备份特定表 2.4 排除特定表 2.5 备份为自定义格式&#xff08;支持压缩和快速恢复&am…