当前位置: 首页 > news >正文

CF1970E3 Trails (Hard)

Codeforces

对于 Easy 部分的做法:

很容易想到统计下来每个点的位置,枚举到达的点,然后进行转移统计即可。

时间复杂度 \(O(m^2n)\)

由于个人习惯,代码中的 \(n\)\(m\) 与原题目不同。

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
int n,m,s[100005],l[100005],t[2][100005];
signed main(){cin>>n>>m;for(int i=1;i<=n;i++)cin>>s[i];for(int i=1;i<=n;i++)cin>>l[i];t[0][1]=1;int cnt=0;for(int i=1;i<=m;i++){cnt^=1;for(int j=1;j<=n;j++)t[cnt][j]=0;for(int j=1;j<=n;j++){for(int k=1;k<=n;k++){t[cnt][k]+=((t[cnt^1][j]*s[j])%mod*s[k])%mod;t[cnt][k]%=mod;t[cnt][k]+=((t[cnt^1][j]*s[j])%mod*l[k])%mod;t[cnt][k]%=mod;t[cnt][k]+=((t[cnt^1][j]*l[j])%mod*s[k])%mod;t[cnt][k]%=mod;}}}int sum=0;for(int i=1;i<=n;i++)sum=(sum+t[cnt][i])%mod;cout<<sum;return 0;
}

对于 Medium 部分的做法:

我们不难发现上一步转移形式很固定,甚至正好是乘上某数再加起来,而且正好每次更新同时更新了所有值。

那么我们很容易想到用矩阵优化。

直接模版把上一步的内容放到矩阵中,快速幂即可。

由于个人习惯,代码中的 \(n\)\(m\) 与原题目不同。

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
int n,m,s[100005],l[100005],t[2][100005];
struct MT{int n,m,c[105][105];MT(){n=m=0;memset(c,0,sizeof(c));}MT friend operator*(MT a,MT b){MT c;c.n=a.n,c.m=b.m;for(int i=1;i<=a.n;i++){for(int j=1;j<=b.m;j++){for(int k=1;k<=a.m;k++){c.c[i][j]+=(a.c[i][k]*b.c[k][j])%mod;c.c[i][j]%=mod;}}}return c;}
}base,be;
void ksm(MT a,int b){while(b){if(b&1)be=be*a;a=a*a;b>>=1;}
}
signed main(){cin>>n>>m;for(int i=1;i<=n;i++)cin>>s[i];for(int i=1;i<=n;i++)cin>>l[i];be.n=1,be.m=n;be.c[1][1]=1;base.n=base.m=n;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){base.c[i][j]=((s[i]*s[j]%mod+s[i]*l[j]%mod)%mod+l[i]*s[j]%mod)%mod;}}ksm(base,m);int sum=0;for(int i=1;i<=n;i++)sum=(sum+be.c[1][i])%mod;cout<<sum;return 0;
}

对于 Hard 部分的做法:

这里应该才是最难的一步,可以直接将绿题变成紫题。

我们发现矩阵里如果存下所有点的数字,那么矩阵乘法做一次就超时了。

但是这 \(n\) 又非常大,也不好直接推导数学做法。

这时候我们想到在第一个点出来以后,我们走到湖中间上时去哪里只受到前面走了什么路的影响。

那么此时有多少种可能的做法就固定了。

走到下一个屋子,还要再回来,那么此时的点也确定了。

我们将这两步放到一起,从湖中间出发再走回来,在矩阵中记录上次走长路和短路的总方案数,这样就可以用矩阵快速求解了。

我们只需要先走到中间,再矩阵求方案数,再枚举回来的点,就可以得到答案了。

关于矩阵的具体推算可以看代码。

由于个人习惯,代码中的 \(n\)\(m\) 与原题目不同。

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
int n,m,s[100005],l[100005];
struct MT{int c[5][5],n,m;MT(){n=m=0;memset(c,0,sizeof(c));}MT friend operator*(MT a,MT b){MT c;c.n=a.n,c.m=b.m;for(int i=1;i<=a.n;i++){for(int j=1;j<=b.m;j++){for(int k=1;k<=a.m;k++)c.c[i][j]=(c.c[i][j]+(a.c[i][k]*b.c[k][j])%mod)%mod;}}return c;}
}base,be;
void ksm(MT a,int b){while(b){if(b&1)be=be*a;a=a*a;b>>=1;}
}
signed main(){cin>>n>>m;for(int i=1;i<=n;i++)cin>>s[i];for(int i=1;i<=n;i++)cin>>l[i];be.n=1,be.m=2;be.c[1][1]=s[1],be.c[1][2]=l[1];base.n=base.m=2;int sum=0;for(int i=1;i<=n;i++)sum=(sum+((l[i]*s[i])%mod+(s[i]*s[i])%mod)%mod)%mod;base.c[1][1]=sum;sum=0;for(int i=1;i<=n;i++)sum=(sum+(s[i]*s[i])%mod)%mod;base.c[2][1]=sum;sum=0;for(int i=1;i<=n;i++)sum=(sum+((l[i]*s[i])%mod+(l[i]*l[i])%mod)%mod)%mod;base.c[1][2]=sum;sum=0;for(int i=1;i<=n;i++)sum=(sum+(s[i]*l[i])%mod)%mod;base.c[2][2]=sum;ksm(base,m-1);sum=0;for(int i=1;i<=n;i++){sum+=(s[i]*be.c[1][1])%mod;sum%=mod;sum+=(l[i]*be.c[1][1])%mod;sum%=mod;sum+=(s[i]*be.c[1][2])%mod;sum%=mod;}cout<<sum;return 0;
}
/*
s->s
s l s
s s s
l->s
l s s
s->l
s l l
s s l
l->l
l s l
*/
http://www.rkmt.cn/news/75780.html

相关文章:

  • 双线性四边形等参单元程序(MATLAB实现)
  • P6706 [COCI 2010/2011 #7] KUGLICE
  • AT_arc179_d [ARC179D] Portable Gate
  • P3576 [POI 2014] MRO-Ant colony
  • flink 1.20 物化表(Materialized Tables) - 详解
  • 大模型算法学习
  • Linux——网络命令和常用服务 - 指南
  • P11580 [CCC2020] Escape Room
  • 2025最新绿色低碳工厂建设五大服务商/厂家推荐!工业智能化升级权威指南,助力企业实现双碳目标与高效生产
  • P6000 [CEOI2016] match
  • 汽车智能座舱软件、技术、分类介绍
  • 『NAS』在群晖部署图表绘制工具-Draw.io
  • PowerShell TOTP 身份验证器
  • linux 中gzip、bzip2、xz压缩、解压缩
  • Java方法
  • 【Java EE进阶 --- SpringBoot】统一特性处理
  • 2025液体钙权威品牌推荐,首选inne液体钙
  • 2025 年 12 月数粒机厂家权威推荐榜:覆盖防爆/高速/高精度/智能/视觉全自动等新型设备,制药食品农业电子多行业定制化解决方案深度解析
  • 儿童营养选对不踩坑!德国 inne以硬核品质展现品牌价值
  • 2025年12月四面弹面料厂家权威推荐榜:尼龙/涤纶/TR消光等八大品类,揭秘高弹力与舒适度的科技织物奥秘
  • 2025 年 12 月真空自耗电弧炉厂家权威推荐榜:涵盖2.5t/4t/7t真空熔炼炉型,尖端电极自耗技术深度解析与高效选购指南
  • Springboot智慧旅游管理系统6w63eon8(软件+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 【EF Core】“DB First”方案下用编程方式生成数据库模型代码
  • 面向AI时代的操作系统:openEuler在WSL环境下的高效开发实践
  • 2025 最新机器视觉检测服务商 / 厂家 TOP5 评测!智能检测赋能制造升级,权威榜单助力企业选型,智慧工厂设计、建设及管理解决方案
  • 2025年中国五大铝氧化着色生产企业推荐,看哪家工艺水平高
  • 2025年12月中国GEO服务商综合推荐分析:摘星AI引领全球
  • 揭秘WAAP:现代Web应用与API保护的四大核心安全支柱
  • 深入解析:从阿里云大模型服务平台百炼看AI应用集成与实践
  • 2025年中国气力输送厂五大推荐,看哪家技术实力强