BZOJ4921「Lydsy1706月赛」互质序列

本文解析了BZOJ4921题目的算法解决方案,该题目要求在长度为n的数列中去掉非空的连续一段,并保证剩下数字不少于2,求所有合法方案中剩下数字的最大公约数总和。文章通过记录前后缀GCD,并利用log级别不同GCD数量的特性,使用map存储,提供了一种高效解法。

吐槽一下BZOJ没有C++11  题还是不难的

BZOJ 4921


题意

在长度为$ n$的数列中去掉非空的连续一段并保证剩下数字不少于$ 2$

求合法的所有方案中剩下数字的最大公约数的总和


$Solution$

记录一下前后缀$ gcd$

容易发现不同的$ gcd$的数量是$ log$级别的

为写起来方便用$ map$存即可


$ my \ code$

#include<bits/stdc++.h>
#define rt register int
#define ll long long
#define p 998244353
using namespace std;
int k,m,n,x,y,z,cnt,ans;
int qz[100010],hz[100010],a[100010];
map<int,int>s1,s2;
int main(){
    scanf("%d",&n);
    for(rt i=1;i<=n;i++)scanf("%d",&a[i]);
    qz[1]=a[1];for(rt i=2;i<=n;i++)qz[i]=__gcd(qz[i-1],a[i]);
    hz[n]=a[n];for(rt i=n-1;i>=1;i--)hz[i]=__gcd(hz[i+1],a[i]);
    ll ans=0;for(rt i=2;i<n;i++)ans+=qz[i]+hz[i];ans%=p;
    for(rt i=1;i<=n-2;i++)s1[qz[i]]++;
    for(rt i=n-2;i>=1;i--){
        s2[hz[i+2]]++;
        for(map<int,int>::iterator it=s2.begin();it!=s2.end();it++)
        (ans+=1ll*__gcd(qz[i],(*it).first)*(*it).second%p)%=p;
    }
    cout<<ans;
    return 0;
}

 

转载于:https://www.cnblogs.com/DreamlessDreams/p/10133336.html

<think>好的,用户想了解如何从零开始搭建乾坤(qiankun)框架。首先,我需要回忆一下qiankun的基本概念和用途。qiankun是一个微前端框架,基于single-spa,允许在同一个页面上集成多个独立的前端应用,比如Vue、React等,每个应用可以独立开发和部署。用户的需求是从零开始搭建,所以需要分步骤讲解主应用和子应用的配置。 先看用户提供的引用内容,引用[2]提到qiankun是基于single-spa的,能独立部署每个单页应用,新框架和旧应用可以共存。引用[5]给出了主应用配置的代码示例,比如registerMicroApps和start方法。引用[3]和[4]也涉及了具体的项目搭建步骤和注意事项。 接下来,我需要组织回答的结构,分步骤说明主应用和子应用的创建。主应用需要安装qiankun,配置路由,注册子应用,并启动。子应用则需要调整webpack配置,暴露生命周期钩子,处理路由等。同时,要注意跨域问题,子应用的publicPath设置,以及资源加载路径的问题。这些在引用[4]和[5]中都有提到。 可能用户是前端开发者,有一定的Vue或React基础,但对微前端架构不熟悉。需要详细说明每一步的操作,包括代码示例和配置文件的修改。比如,主应用使用Vue,子应用可以是React或其他框架。需要确保代码示例正确,特别是webpack的配置,因为这是子应用能正确运行的关键。 另外,用户可能遇到的问题包括子应用资源路径错误、跨域限制、静态资源加载失败等,需要在注意事项中提前说明。引用[4]提到代码中有注释和git地址,但用户这里没有给出,所以需要提供足够的细节帮助用户自己解决。 最后,生成相关问题需要考虑用户可能进一步的需求,比如部署、通信机制、样式隔离等,这些都是搭建微前端后的常见问题。需要确保问题相关且有引导性,帮助用户深入学习。 总结回答的结构应该是:简介、主应用搭建步骤、子应用配置步骤、注意事项、相关问题。每个步骤包含具体的代码示例和解释,引用相关的资料作为支持。同时,保持语言简洁明了,符合中文习惯,避免使用Markdown格式,但根据用户要求,数学公式需要使用$...$,不过在这个主题中可能用不上,但需留意。</think>### 从零搭建乾坤(qiankun)框架的步骤 #### 1. 主应用搭建 **步骤1:创建主应用** 使用 Vue 或 React 脚手架初始化项目(以 Vue 为例): ```bash vue create main-app cd main-app ``` **步骤2:安装 qiankun** 通过 npm 安装乾坤核心库: ```bash npm install qiankun --save ``` **步骤3:配置主应用路由** 在主应用中定义容器路由(引用自[^3]): ```javascript // src/router/index.js const routes = [ { path: '/app1*', component: () => import('@/views/Container.vue') } ]; ``` **步骤4:注册子应用** 在入口文件中配置子应用信息(引用自[^5]): ```javascript // main.js import { registerMicroApps, start } from 'qiankun'; registerMicroApps([ { name: 'app1', entry: '//localhost:8081', // 子应用启动地址 container: '#subapp-container', activeRule: '/app1' } ]); start(); ``` --- #### 2. 子应用配置(以 Vue 子应用为例) **步骤1:创建子应用** 初始化子应用并调整配置: ```bash vue create sub-app cd sub-app ``` **步骤2:修改 webpack 配置** 在 `vue.config.js` 中允许跨域访问和设置 `publicPath`(引用自[^4]): ```javascript // vue.config.js module.exports = { publicPath: '/subapp', devServer: { headers: { 'Access-Control-Allow-Origin': '*' } } }; ``` **步骤3:暴露生命周期钩子** 在子应用入口文件中导出乾坤要求的方法: ```javascript // main.js let instance = null; function render() { instance = new Vue({ router, render: h => h(App) }).$mount('#app'); } // 乾坤协议 export async function bootstrap() {} export async function mount() { render(); } export async function unmount() { instance.$destroy(); } ``` --- #### 3. 关键注意事项 1. **跨域问题** 子应用需设置 `Access-Control-Allow-Origin` 头,主应用与子应用域名/端口需配置跨域支持[^4]。 2. **静态资源路径** 子应用需通过 `publicPath` 动态设置资源路径,避免加载失败: ```javascript if (window.__POWERED_BY_QIANKUN__) { __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__; } ``` 3. **路由冲突** 主应用和子应用的路由规则需隔离,例如主应用使用 `/app1*` 匹配子应用路由[^3]。 --- #### 4. 运行验证 1. 启动主应用: ```bash cd main-app && npm run serve ``` 2. 启动子应用: ```bash cd sub-app && npm run serve ``` 访问 `http://localhost:8080/app1` 查看子应用是否正常加载。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值