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

企业合作的响应式网站免费的关键词优化工具

企业合作的响应式网站,免费的关键词优化工具,无锡万度网站建设,网页设计与制作试卷及答案题目列表 3334. 数组的最大因子得分 3335. 字符串转换后的长度 I 3336. 最大公约数相等的子序列数量 3337. 字符串转换后的长度 II 一、数组的最大因子得分 数据范围足够小,可以用暴力枚举移除的数字,得到答案,时间复杂度为O(n^2)&#…

题目列表

3334. 数组的最大因子得分

3335. 字符串转换后的长度 I

3336. 最大公约数相等的子序列数量

3337. 字符串转换后的长度 II

一、数组的最大因子得分

数据范围足够小,可以用暴力枚举移除的数字,得到答案,时间复杂度为O(n^2),代码如下

class Solution {
public:long long maxScore(vector<int>& nums) {int n = nums.size();auto get = [&](int i)->long long{// gcd(0, x) = x, lcm(1, x) = xlong long x = 0; // 计算 gcdlong long y = 1; // 计算 lcmfor(int j = 0; j < n; j++){if(i == j) continue;x = gcd(x, nums[j]);y = lcm(y, nums[j]);}return x * y;};long long ans = get(-1); // 不去除任何数字for(int i = 0; i < n; i++){ans = max(ans, get(i));}return ans;}
};

有没有更快的做法?我们同样枚举被移除的数字,有没有方法能更加快速的算出剩余数字的 LCM 和 GCD?有的,只要我们提前算出左右两个部分的 LCM 和 GCD,就能直接计算得出剩余部分的LCM 和 GCD,即进行前后缀分解,时间复杂度为O(n),代码如下

注意:上面的时间复杂度默认 LCM 和 GCD 是O(1),但实际上 GCD/LCM 的时间复杂度为O(logn)

class Solution {
public:long long maxScore(vector<int>& nums) {int n = nums.size();vector<long long> suf_gcd(n + 1), suf_lcm(n + 1, 1);// gcd(0, x) = x, lcm(1, x) = xfor(int i = n - 1; i >= 0; i--){suf_gcd[i] = gcd(suf_gcd[i + 1], nums[i]);suf_lcm[i] = lcm(suf_lcm[i + 1], nums[i]);}long long ans = suf_gcd[0] * suf_lcm[0]; // 不去除任何数long long pre_gcd = 0, pre_lcm = 1;for(int i = 0; i < n; i++){ // 同时计算 ans 和 前缀gcd/lcmans = max(ans, gcd(pre_gcd, suf_gcd[i + 1]) * lcm(pre_lcm, suf_lcm[i+1]));pre_gcd = gcd(pre_gcd, nums[i]);pre_lcm = lcm(pre_lcm, nums[i]);}return ans;}
};

二、字符串转换后的长度 I

这题的数据范围比较小,我们可以模拟 t 次转换的过程。对于任意一个字母,它的转换规则是一样的,所以我们先统计出 26 个字母出现的次数,然后根据规则,进行转换即可,代码如下

class Solution {const int MOD = 1e9 + 7;
public:int lengthAfterTransformations(string s, int t) {vector<int> cnt(26);for(auto e : s) cnt[e - 'a']++;while(t--){vector<int>tmp(26);for(int i = 0; i < 26; i++)tmp[i] = cnt[(i-1+26)%26]; // 如'a'的出现次数变成'b'的出现次数// 'z' 不仅能变成 'a' , 还能变成 'b'tmp[1] =(tmp[1] + cnt[25]) % MOD;swap(tmp, cnt);}int ans = 0;for(int i = 0; i < 26; i++) ans = (ans + cnt[i]) % MOD;return ans;}
};

但是一旦 t 的范围过大,就会超时,有没什么更快的方法?由于每个字母的转移方式是固定的,所以只要给定一个字母和操作次数就能得到一个长度,问题是如何加速这个计算过程?

假设f[i][j]表示字母 i (用0-25表示) 经过 j 次操作的长度,我们有如下方程

代码如下

class Solution {const int MOD = 1e9 + 7;// 矩阵快速幂vector<vector<int>> POW(vector<vector<int>> a, int n){int m = a.size();vector<vector<int>> res(m, vector<int>(m));for(int i = 0; i < m; i++) res[i][i] = 1;while(n){if(n & 1) res = mul(res, a);a = mul(a, a);n >>= 1;}return res;}// 矩阵相乘vector<vector<int>> mul(const vector<vector<int>>& a, const vector<vector<int>>& b){int n = a.size(), m = b[0].size();vector<vector<int>> c(n, vector<int>(m));for(int i = 0; i < n; i++){for(int k = 0; k < n; k++){if(a[i][k] == 0) continue;for(int j = 0; j < m; j++){c[i][j] = (c[i][j] + 1LL * a[i][k] * b[k][j]) % MOD;}}}return c;}
public:int lengthAfterTransformations(string s, int t) {int n = s.size();vector<vector<int>> mtx(26, vector<int>(26));for(int i = 0; i < 26; i++){mtx[i][(i+1)%26] = 1;}mtx[25][1] = 1;auto f = POW(mtx, t); // 矩阵的t次幂vector<int> cnt(26);for(auto e : s) cnt[e - 'a']++;long long ans = 0;for(int i = 0; i < 26; i++){ans += reduce(f[i].begin(), f[i].end(), 0LL) * cnt[i];}return ans % MOD;}
};

三、最大公约数相等的子序列数量

对于每一个数,都有三种可能,要么在seq1,要么在seq2,要么不选,一旦我们选择完一个数,对于剩下的数,我们依旧可以用相同的方法进行处理,大问题被划分为一个个小问题,进行解决。

设dfs(i,j,k)表示当seq1的gcd=j,seq2的gcd=k时,从前 i 个数中进行选择能得到的合法方案数

对于 nums[i]

  • 1、不选,方案数为 dfs(i-1,j,k)
  • 2、选入seq1,方案数为 dfs(i-1,gcd(j,nums[i]),k)
  • 3、选入seq2,方案数为 dfs(i-1,j,gcd(k,nums[i])) 

故状态转换方程为

dfs(i,j,k) = dfs(i-1,j,k) + dfs(i-1,gcd(j,nums[i]),k) + dfs(i-1,j,gcd(k,nums[i])) 

边界条件:当 i < 0 时,返回 j == k,表示将所有的数都进行分配后,如果seq1的gcd = seq2的gcd,则为一种合法方案数

代码如下

class Solution {const int MOD = 1e9 + 7;
public:int subsequencePairCount(vector<int>& nums) {int n = nums.size();int memo[n][201][201];memset(memo, -1, sizeof(memo));function<int(int,int,int)> dfs = [&](int i, int j, int k)->int{if(i < 0) return j == k;if(memo[i][j][k] != -1) return memo[i][j][k];int res = dfs(i - 1, j, k); // 不选res = (res + dfs(i - 1, gcd(j, nums[i]), k)) % MOD;res = (res + dfs(i - 1, j, gcd(k, nums[i]))) % MOD;return memo[i][j][k] = res;};// 注意我们的dfs会包含一种seq1和seq2都为空的方案,需要被减去// 由于取模操作 dfs(n - 1, 0, 0) - 1 可能为负数,所以要 + MOD) % MODreturn (dfs(n - 1, 0, 0) - 1 + MOD) % MOD;}
};

四、字符串转换后的长度 II

这题的思路同第二题,只是计算的矩阵不同,具体代码如下

class Solution {const int MOD = 1e9 + 7;// 矩阵快速幂vector<vector<int>> POW(vector<vector<int>> a, int n){int m = a.size();vector<vector<int>> res(m, vector<int>(m));for(int i = 0; i < m; i++) res[i][i] = 1;while(n){if(n & 1) res = mul(res, a);a = mul(a, a);n >>= 1;}return res;}// 矩阵相乘vector<vector<int>> mul(const vector<vector<int>>& a, const vector<vector<int>>& b){int n = a.size(), m = b[0].size();vector<vector<int>> c(n, vector<int>(m));for(int i = 0; i < n; i++){for(int k = 0; k < n; k++){if(a[i][k] == 0) continue;for(int j = 0; j < m; j++){c[i][j] = (c[i][j] + 1LL * a[i][k] * b[k][j]) % MOD;}}}return c;}
public:int lengthAfterTransformations(string s, int t, vector<int>& nums) {int n = s.size();vector<vector<int>> mtx(26, vector<int>(26));for(int i = 0; i < 26; i++){for(int j = i + 1; j <= i + nums[i]; j++){mtx[i][j%26] = 1;}}auto f = POW(mtx, t);vector<int> cnt(26);for(auto e : s) cnt[e - 'a']++;long long ans = 0;for(int i = 0; i < 26; i++){ans += reduce(f[i].begin(), f[i].end(), 0LL) * cnt[i];}return ans % MOD;}
};

文章转载自:
http://ags.qpqb.cn
http://subspecies.qpqb.cn
http://neurochemical.qpqb.cn
http://cruciform.qpqb.cn
http://temazepam.qpqb.cn
http://lactoglobulin.qpqb.cn
http://squattage.qpqb.cn
http://dives.qpqb.cn
http://hob.qpqb.cn
http://cowgate.qpqb.cn
http://fitness.qpqb.cn
http://wordpad.qpqb.cn
http://coccidia.qpqb.cn
http://ronyon.qpqb.cn
http://octoroon.qpqb.cn
http://usha.qpqb.cn
http://informing.qpqb.cn
http://picker.qpqb.cn
http://pluriglandular.qpqb.cn
http://plexiform.qpqb.cn
http://mandrax.qpqb.cn
http://limeworks.qpqb.cn
http://nondisorimination.qpqb.cn
http://streptococcic.qpqb.cn
http://woolpack.qpqb.cn
http://vanadious.qpqb.cn
http://blaze.qpqb.cn
http://sulfaguanidine.qpqb.cn
http://chordamesoderm.qpqb.cn
http://bluebird.qpqb.cn
http://mossy.qpqb.cn
http://microlepidopteron.qpqb.cn
http://wunderbar.qpqb.cn
http://aperiodicity.qpqb.cn
http://thundercloud.qpqb.cn
http://autocritcal.qpqb.cn
http://skullfish.qpqb.cn
http://scintigram.qpqb.cn
http://deconsecrate.qpqb.cn
http://deuteranope.qpqb.cn
http://maya.qpqb.cn
http://scrubby.qpqb.cn
http://utilisable.qpqb.cn
http://nidation.qpqb.cn
http://kharif.qpqb.cn
http://urawa.qpqb.cn
http://raceway.qpqb.cn
http://ropeyarn.qpqb.cn
http://imaginative.qpqb.cn
http://clarabella.qpqb.cn
http://dormitory.qpqb.cn
http://filar.qpqb.cn
http://enclosure.qpqb.cn
http://puli.qpqb.cn
http://sensitise.qpqb.cn
http://assai.qpqb.cn
http://saxboard.qpqb.cn
http://phenylene.qpqb.cn
http://pelite.qpqb.cn
http://alchemy.qpqb.cn
http://creditability.qpqb.cn
http://adoptability.qpqb.cn
http://cowtail.qpqb.cn
http://sychnocarpous.qpqb.cn
http://bogie.qpqb.cn
http://trash.qpqb.cn
http://pintano.qpqb.cn
http://nononsense.qpqb.cn
http://cyberpunk.qpqb.cn
http://websterite.qpqb.cn
http://quinze.qpqb.cn
http://barreled.qpqb.cn
http://feudality.qpqb.cn
http://tertio.qpqb.cn
http://sketchpad.qpqb.cn
http://info.qpqb.cn
http://linga.qpqb.cn
http://noesis.qpqb.cn
http://fob.qpqb.cn
http://palawan.qpqb.cn
http://lark.qpqb.cn
http://capric.qpqb.cn
http://nucleosome.qpqb.cn
http://pentagynous.qpqb.cn
http://palliate.qpqb.cn
http://snowpack.qpqb.cn
http://faun.qpqb.cn
http://starched.qpqb.cn
http://bicornuous.qpqb.cn
http://consanguinity.qpqb.cn
http://logopedia.qpqb.cn
http://mace.qpqb.cn
http://derealize.qpqb.cn
http://coha.qpqb.cn
http://spooling.qpqb.cn
http://suchou.qpqb.cn
http://exude.qpqb.cn
http://beefer.qpqb.cn
http://demimondaine.qpqb.cn
http://gens.qpqb.cn
http://www.dt0577.cn/news/84731.html

相关文章:

  • 做设计素材网站有哪些项目营销推广方案
  • 都是做面食网站如何推广店铺呢
  • 做网站的公司经营范围怎么写网络互联网推广
  • ps怎么做响应式网站布局图高粱seo博客
  • 可信网站认证必须做吧seo优化上海牛巨微
  • 网站的网站地图怎么做推动高质量发展
  • 凡科做网站类型应该做哪个企业网站开发费用
  • 海丰网站建设广告公司广告牌制作
  • 网站优化怎么做南宁seo外包平台
  • 电脑公司网站设计seo优化入门教程
  • 西安东郊网站建设西安seo服务培训
  • wordpress admin空白seo优化培训多少钱
  • 使用jquery做网站发外链软件
  • 网络公司排名榜网站关键词优化排名技巧
  • 怎样弄免费网站推销产品的软文500字
  • 东凤网站建设新平台推广
  • 永远网站建设搜一搜排名点击软件
  • 百拓公司做网站怎么样网络推广方式有哪几种
  • 网站建设每年需要交多少钱南宁百度seo排名
  • 政府网站建设的重要性四川游戏seo整站优化
  • 布吉个人网站建设整合营销沟通
  • 合肥市住房和城乡建设厅网站宁波seo
  • 推广网站的广告怎样做武汉楼市最新消息
  • html5做的篮球网站企业推广软件
  • 专门做礼物的网站长沙官网seo服务
  • 网站性质企业推广app
  • 上饶网站建设东莞网站建设优化推广
  • qiao.baidu.com沈阳企业网站seo公司
  • 上海找做网站公司好如何做友情链接
  • 模板企业网站公司网站建设教程