【LGR-262-Div.2】洛谷 1 月月赛 III 题解

news/2026/1/18 23:38:07/文章来源:https://www.cnblogs.com/BigSmall-En/p/19499482

LG14987 全等

给定 \(a,b,c,d\),问能否将这四个整数填入 \(2 \times 2\) 的矩阵中,使得每一行所有数之和都相等,且每一列所有数之和也都相等。

\(a,b,c,d\) 的情况一共排列方式只有 \(3\) 种,全部计算即可

a b  |  a b  |  a c
c d  |  d c  |  d b
int main(){int Test;scanf("%d",&Test);while(Test--){ll a,b,c,d;scanf("%lld%lld%lld%lld",&a,&b,&c,&d);if(a+b==c+d&&a+c==b+d)puts("Yes");else if(a+b==c+d&&a+d==b+c)puts("Yes");else if(a+c==d+b&&a+d==c+b)puts("Yes");else puts("No");}return 0;
}

LG14988 多边形

\(n\) 个木棍,第 \(i\) 个长度为 \(a_i\)\(n\leq 5\times 10^5\)

你需要对于 \(k=3,4,\cdots,n\),求出能否恰好选择 \(k\) 根木棍拼成一个面积严格大于零的多边形。

若干个木棍能拼成一个多边形的充要条件是:

最长的木棍长度小于其余所有木棍长度之和

于是先对 \(a\) 排序,然后依次考虑每根木棍最为长度最大值的情况,看看最少需要多少 比当前木棍短的木棍 才能使得他们的和大于当前木棍。

相当于求 \(a\) 前缀和 \(s\),对于每个考虑的当前最大木棍 \(a_i\) 找到最大的 \(l\),满足 \(s_{i-1}-s_{l-1}>a_i\),使用二分查找即可。则答案可以落在 \([i-l+1,i]\) 区间,然后求区间的并只需要差分再前缀和即可。

int n,tag[N];
ll a[N],s[N];
int main(){scanf("%d",&n);for(int i=1;i<=n;++i)scanf("%lld",&a[i]);sort(a+1,a+1+n);for(int i=1;i<=n;++i)s[i]=s[i-1]+a[i];for(int i=3;i<=n;++i){if(s[i-1]<=a[i])continue;int loc=lower_bound(s+1,s+1+n,s[i-1]-a[i])-s;++tag[i-loc+1];--tag[i+1];}for(int i=3;i<=n;++i){tag[i]+=tag[i-1];if(tag[i])printf("%d ",i);}puts("");return 0;
}

LG14989 传送

\(n\) 个星球排成一行,编号为 \(i\) 的星球大小为 \(p_i\)\(p_i\) 是一个排列),每个星球上有两个单向传送门:

第一个传送门连向左边第一个大小更大的星球,也就是说,编号为 \(i\) 的星球,连向编号为符合 \(j<i,p_j>p_i\) 中最大的 \(j\) 的星球,如果不存在,则连向自己。

第二个传送门连向右边第一个大小更大的星球,也就是说,编号为 \(i\) 的星球,连向编号为符合 \(j>i,p_j>p_i\) 中最小的 \(j\) 的星球,如果不存在,则连向自己。

\(q\) 个任务,每个任务都会选定若干个星球,并在每一个星球上放一个机器人,任务的目标是让所有机器人汇合在同一个星球上。

机器人可以通过星球上的传送门移动,每个机器人的移动次数和每个传送门的使用次数都没有限制。

显然每个机器人向上移动的时候,先移动到 \(p\) 较小的星球是更优的(因为还能再移动到 \(p\) 较大的星球)。这样两个方向的传送门就只需要保留连向 \(p\) 较小方向的一个。这就是一颗满足大根堆性质的笛卡尔树。

对于每个询问,这些机器人的最近公共祖先就是他们能最先汇合的点,然后答案就是这个最近公共祖先的深度。

typedef long long ll;
typedef pair<int,int>ttfa;
const int N=500005;
int n,q;
int p[N],stk[N],top,ls[N],rs[N];
vector<int>tar[N];
int fa[N][21],rt,dep[N],ind[N];
void dfs(int u,int f){fa[u][0]=f,dep[u]=dep[f]+1;for(int i=1;(1<<i)<=dep[u];++i)fa[u][i]=fa[fa[u][i-1]][i-1];for(auto v:tar[u]){dfs(v,u);}
}
inline int lca(int x,int y){if(dep[x]>dep[y])swap(x,y);int d=dep[y]-dep[x];for(int i=19;i>=0;--i)if((d>>i)&1)y=fa[y][i],d-=(1<<i);if(x==y)return x;for(int i=19;i>=0;--i){if(fa[x][i]!=fa[y][i])x=fa[x][i],y=fa[y][i];}return fa[x][0];
}
int main(){scanf("%d%d",&n,&q);for(int i=1;i<=n;++i)scanf("%d",&p[i]);stk[++top]=1;for(int i=2;i<=n;++i){while(top&&p[i]>p[stk[top]])--top;if(!top)ls[i]=stk[top+1];else ls[i]=rs[stk[top]],rs[stk[top]]=i;stk[++top]=i;}for(int i=1;i<=n;++i){if(ls[i])tar[i].push_back(ls[i]),++ind[ls[i]];if(rs[i])tar[i].push_back(rs[i]),++ind[rs[i]];}for(int i=1;i<=n;++i){if(!ind[i]){rt=i;break;}}dfs(rt,0);while(q--){int m,x,y;scanf("%d%d",&m,&x);for(int i=2;i<=m;++i){scanf("%d",&y);x=lca(x,y);}printf("%d\n",dep[x]);}return 0;
}

LG14990 马赛克

有一张 \(n\)\(m\) 列的黑白马赛克图片,设 \(c_{i,j}\) 为其第 \(i\) 行第 \(j\) 列的方格的颜色( \(0\) 为白色, \(1\) 为黑色)。定义其不美观度为符合以下条件的四元组 \((a,b,c,d)\) 的个数:

  • \(1 \leq a \leq b \leq n\)\(1\leq c \leq d \leq m\)

  • \(c_{a,c}=c_{b,d}\)\(c_{b,c}=c_{a,d}\)\(c_{a,c} \neq c_{a,d}\)

你希望通过一些操作减少这一张马赛克图片的不美观度:首先任意选择一些行和列,然后任意改变所选择行和列中方格的颜色。

你希望知道,对于每一种行和列选择方案,操作结束后不美观度的最小值。

为了避免过多的输出,假设你选择的行集合为 \(S\),列集合为 \(T\),设 \(f(S,T)\) 为最小的不美观度,令 \(w(i)\) 表示 \(f(S,T)=i\)\(S,T\) 个数。你只需要输出 \(\sum w(i)^k\)\(2^{64}\) 取模后的结果即可。

对于所有的测试数据,有 \(1\leq T \leq 3\)\(1 \leq n,m \leq 12\)\(1 \leq k \leq 100\)\(c_{i,j} \in \{0,1\}\)

介绍一种复杂度同样为 \(O(2^{n+m})\) 但与官解不同的做法。

首先对不完美度有贡献的四元组所对应四个位置的颜色只能为如下两种情况

0 1  |  1 0
1 0  |  0 1

故我们将所选择的行列集合中所有位置涂上相同的颜色,包含这些集合位置的四元组不会对答案有贡献。因此我们只需要计算选择集合外的子图中的不美观度。为了方便,我们定义 \(dp(S,T)\) 表示 \(a,b\in S,c,d\in T\) 且不美观的四元组的总数(这里的 \(S,T\) 是题面 \(S,T\) 的补集),同时也有 \(w(i)\) 表示 \(dp(S,T)=i\)\(S,T\) 个数。


\(S,T\) 可以用二进制数表示状态,记 \(num(S)\) 表示 \(S\) 中二进制位为 \(1\) 的个数。

显然当 \(num(S)<2\)\(num(T)<2\) 时,\(dp(S,T)=0\)

否则假设 \(i,j\)\(S\) 中不同且为 \(1\) 的两个二进制位,则有

\[dp(S,T)=dp(S-2^i,T)+dp(S-2^j,T)-dp(S-2^i-2^j,T)+g(i,j,T) \]

其中 \(g(i,j,T)\) 表示 \(a=i,b=j,c,d\in T\) 且不美观的四元组的总数。

\(i,j\) 的选取没有要求,可以预处理出每一个状态 \(S\) 的最高和最低为 \(1\) 的位置表示 \(i,j\)

\(S\) 从小到大枚举即可完成这个动态规划的过程。


现在考虑怎么预处理出 \(g(i,j,T)\),类似的假设 \(k,l\)\(T\) 中不同且为 \(1\) 的两个二进制位,有

\[g(i,j,T)=g(i,j,T-2^k)+g(i,j,T-2^l)-g(i,j,T-2^k-2^l)+v(i,j,k,l) \]

其中 \(v(i,j,k,l)\) 表示四元组 \((i,j,k,l)\) 是否不美观,不美观为 \(1\),否则为 \(0\)

这一步需要枚举 \(i,j\) 再从小到达枚举 \(T\) 计算,实际上完整的复杂度为 \(O(2^{n+m}+n^22^m)\)

具体代码如下,代码的变量定义与题解略有不同。

#include <bits/stdc++.h>using namespace std;typedef long long ll;
typedef unsigned long long ull;
const int N=13;int n,m,k;
int s[N][N],val[N][N][N][N],f[N][N][1<<N],dp[1<<N][1<<N];
int num[1<<N],lef[1<<N],rit[1<<N];ull bot[N*N*N*N];int main(){for(int i=1;i<(1<<12);++i){int cnt=0;lef[i]=12,rit[i]=0;for(int j=0;j<12;++j){if((i>>j)&1){++cnt;lef[i]=min(lef[i],j);rit[i]=max(rit[i],j);}}num[i]=cnt;}int Test=3;scanf("%d",&Test);while(Test--){scanf("%d%d%d",&n,&m,&k);for(int i=0;i<n;++i)for(int j=0;j<m;++j)scanf("%d",&s[i][j]);// n=12,m=12,k=100;// for(int i=1;i<=n;++i){// 	for(int j=1;j<=m;++j)// 		s[i][j]=rand()%2;// }for(int i=0;i<=n*m*n*m;++i){bot[i]=0;}for(int a=0;a<n;++a){for(int b=a+1;b<n;++b){for(int c=0;c<m;++c){for(int d=c+1;d<m;++d){if(s[a][c]==s[b][d]&&s[b][c]==s[a][d]&&s[a][c]!=s[a][d])val[a][b][c][d]=1;else val[a][b][c][d]=0;}}}}for(int a=0;a<n;++a){for(int b=a+1;b<n;++b){f[a][b][0]=0;for(int T=1;T<(1<<m);++T){if(num[T]<2)continue;int l=(1<<lef[T]),r=(1<<rit[T]);f[a][b][T]=f[a][b][T^l]+f[a][b][T^r]-f[a][b][T^l^r]+val[a][b][lef[T]][rit[T]];}}}for(int T=0;T<(1<<m);++T){if(num[T]<2){bot[0]+=(1<<n);continue;}for(int S=0;S<(1<<n);++S){if(num[S]<2){++bot[0];continue;}int l=1<<lef[S],r=1<<rit[S];dp[T][S]=dp[T][S^l]+dp[T][S^r]-dp[T][S^l^r]+f[lef[S]][rit[S]][T];++bot[dp[T][S]];}}ull ans=0;for(int i=0;i<=n*m*n*m;++i){if(bot[i]==0)continue;ull x=bot[i],y=1;for(int j=1;j<=k;++j)y=y*x;ans=ans+y;}printf("%llu\n",ans);}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026国产制动卡钳优质产品推荐榜全场景适配 - 改装小龙

2026国产制动卡钳优质产品推荐榜全场景适配2026国产制动卡钳优质产品推荐榜全场景适配 一、行业背景与筛选维度说明 据《2025中国汽车改装行业白皮书》数据显示,国内汽车改装市场规模已突破1800亿元,其中制动系统改装…

数据清洗:大数据领域的必备技能

数据清洗&#xff1a;大数据领域的必备技能 1. 引入与连接&#xff1a;数据世界的"清洁革命" “2.3亿美元的错误&#xff1a;一个小数点引发的灾难” 1999年&#xff0c;NASA的火星气候轨道器在进入火星大气层时意外解体。调查结果令人震惊&#xff1a;洛克希德马丁公…

致敬:国家有突出贡献电影艺术家、中华人民共和国电影电视艺术家大典入选者陶玉玲

国家有突出贡献电影艺术家、《中国电影电视艺术家辞典》首批入选者、中华影星、中国电影百年百位优秀演员、大众电影百花奖终身成就奖和中国电影表演艺术学会金凤凰奖终身成就奖获得者、《中华人民共和国电影电视艺术家大典》入选者陶玉玲女士1月15日晚在北京逝世&#xff0c;享…

提示工程架构师实操指南:Agentic AI在医疗健康领域从0到1落地全流程

提示工程架构师实操指南&#xff1a;Agentic AI在医疗健康领域从0到1落地全流程 标题选项 《医疗AI落地必修课&#xff1a;Agentic系统设计与提示工程实战》《从需求到部署&#xff1a;用Agentic AI构建智能医疗助手的全流程指南》《提示工程Agentic AI&#xff1a;医疗健康领域…

STM32单片机语音识别智能家居系统99X(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

STM32单片机语音识别智能家居系统99X产品功能描述&#xff1a; 本系统由STM32F103C8T6单片机核心板、1.44寸TFT彩屏、&#xff08;无线蓝牙/WIFI模块-可选&#xff09;、智能语音识别&#xff08;SNR6812&#xff09;电路、DHT11温湿度检测电路、光照采集电路、USB高亮灯、风扇…

Flash了解学习

虽然flash已经不再被支持,但还是有些游戏使用Flash,我目前接触到以前QQ空间的一些游戏,就是用Flash做的。当我研究这款 游戏时,我了解到了flash的一些知识,现在总结如下:1、一些浏览器里请求的swf文件,如果只是…

Storm资源调度策略:提升大数据处理集群效率

Storm资源调度策略&#xff1a;提升大数据处理集群效率 关键词&#xff1a;Storm、资源调度、大数据处理、集群效率、反亲和性调度、动态资源调整、拓扑结构 摘要&#xff1a;在大数据实时处理场景中&#xff0c;Storm作为经典的流计算框架&#xff0c;其资源调度策略直接影响集…

2026年真空防爆烘箱厂家实力推荐:专业定制工业级防爆烘箱,高效安全烘烤设备源头工厂精选 - 企业推荐官【官方】

2026年真空防爆烘箱厂家实力推荐:专业定制工业级防爆烘箱,高效安全烘烤设备源头工厂精选 在新能源、高端化工、航空航天及新材料等战略性新兴产业高速发展的背景下,工业生产对热处理工艺的安全性、精密性与可靠性提…

Qt UDP通信:缓冲区大小设置技巧

概要 // 设置接收缓冲区为 2MB udpSocket.setSocketOption(QAbstractSocket::ReceiveBufferSizeSocketOption, 2 * 1024 * 1024); QVariant rcvBuf udpSocket.socketOption(QAbstractSocket::ReceiveBufferSizeSocketOption); 1.Qt UDP通信&#xff1a;设置缓冲区大小技巧 …

sdkman同时存在多个jdk的方式

项目级自动切换(强烈推荐) 进入旧项目目录:cd legacy-project sdk use java 8.0.402-tem然后执行:sdk env init会生成一个:.sdkmanrc 内容类似:java=8.0.402-tem 以后你只要:cd legacy-project sdk env SDKMAN …

2026年10款免费降ai率工具实测:还有免费ai查重!从降ai到aigc免费降重,总有一款适合你

降ai这件事&#xff0c;现在绝对是每个写论文的人心里的“刺”。2025年了&#xff0c;查重系统升级贼快&#xff0c;稍微不注意&#xff0c;你的心血就会被判定为机器生成。市面上号称能免费降ai率的神器五花八门&#xff0c;但说实话&#xff0c;很多都是坑。 为了搞定论文降…

论文AIGC率高怎么降?2026最新10个免费降ai率工具测评(附3个免费降低ai率方法)

又到了一年一度被毕业论文支配的恐惧时刻&#xff0c;要我说今年比以往更刺激。以前是愁论文写不出来&#xff0c;现在是好不容易用AI辅助搞定了初稿&#xff0c;结果检测后一片刺眼的红&#xff0c;直接打回重做&#xff0c;功夫全白费&#xff01; 现在学校对论文AIGC基本是…

英特尔掌门陈立武力荐极摩客,国产迷你主机凭什么?

CES 2026&#xff0c;Intel正式推出代号为“Panther Lake”的全新酷睿Ultra 3系列处理器。作为Intel首款采用18A先进制程工艺的消费级产品&#xff0c;该系列被视为企业重塑市场竞争力的关键之作。桌面AI超算领跑者极摩客&#xff08;GMKtec&#xff09;携第二代旗舰产品EVO-T2…

救命神器!10款一键生成论文工具测评:研究生开题报告全攻略

救命神器&#xff01;10款一键生成论文工具测评&#xff1a;研究生开题报告全攻略 学术写作新选择&#xff1a;2026年10款一键生成论文工具深度测评 在科研日益数字化的今天&#xff0c;研究生群体面临的研究任务愈发繁重&#xff0c;从开题报告到论文撰写&#xff0c;每一步都…

论文AIGC率高怎么降?2026最新10个免费降ai率工具测评(附不花一分钱降ai率技巧)

又到了一年一度被毕业论文支配的恐惧时刻&#xff0c;要我说今年比以往更刺激。以前是愁论文写不出来&#xff0c;现在是好不容易用AI辅助搞定了初稿&#xff0c;结果检测后一片刺眼的红&#xff0c;直接打回重做&#xff0c;功夫全白费&#xff01; 现在学校对论文AIGC基本是…

亲测好用8个AI论文写作软件,继续教育学生轻松搞定毕业论文!

亲测好用8个AI论文写作软件&#xff0c;继续教育学生轻松搞定毕业论文&#xff01; AI 工具如何成为论文写作的得力助手 在当前的学术环境中&#xff0c;越来越多的学生和科研工作者开始依赖 AI 工具来提升论文写作的效率。尤其是在继续教育领域&#xff0c;许多学生需要兼顾工…

12种智能写作工具测评:数学建模论文高效重现与专业格式优化指南

还在为论文写作头痛&#xff1f;特别是数学建模的优秀论文复现与排版&#xff0c;时间紧、任务重&#xff0c;AI工具能帮上大忙吗&#xff1f;今天&#xff0c;我们评测10款热门AI论文写作工具&#xff0c;帮你精准筛选最适合的助手。 aibiye&#xff1a;专注于语法润色与结构优…

12款AI辅助论文工具测评:数学建模论文高效复现与格式精细调整方案

还在为论文写作头痛&#xff1f;特别是数学建模的优秀论文复现与排版&#xff0c;时间紧、任务重&#xff0c;AI工具能帮上大忙吗&#xff1f;今天&#xff0c;我们评测10款热门AI论文写作工具&#xff0c;帮你精准筛选最适合的助手。 aibiye&#xff1a;专注于语法润色与结构优…

论文AIGC率高怎么降?2026最新10个免费降ai率工具测评(亲测降至5%以下!附方法)

又到了一年一度被毕业论文支配的恐惧时刻&#xff0c;要我说今年比以往更刺激。以前是愁论文写不出来&#xff0c;现在是好不容易用AI辅助搞定了初稿&#xff0c;结果检测后一片刺眼的红&#xff0c;直接打回重做&#xff0c;功夫全白费&#xff01; 现在学校对论文AIGC基本是…