算法刷题day19

目录

  • 引言
  • 一、因数平方和
  • 二、爬树的甲壳虫
  • 三、改变数组元素

引言

这几道题主要都是考察数学,如果数学学的不好,推不出来公式,或者是你的数学思维不好都是做不出来的,所以说数学真的很重要,不过其实能考的数学也就那几个,无非就是很多而已,把常见的题型会了就行了,加油!


一、因数平方和

标签:数学、贡献法、整数划分

思路:如果是单一求每一个 f ( x ) f(x) f(x) 那么即使每一个是 O ( l o g N ) O(logN) O(logN)的时间复杂度,那么也要 O ( N l o g N ) O(NlogN) O(NlogN),而 n < = 1 0 9 n<=10^9 n<=109明显已经超时了,所以可以换一种思路。用贡献法,那么每个约数 i i i 对结果的贡献应该是 ∑ i = 1 n n i ⋅ i 2 \sum_{i=1}^{n} \frac{n}{i}\cdot i^2 i=1nini2 ,而最多只可能有 2 n 2\sqrt{n} 2n 个不同的约数,而这个可以用整数划分来做,把每一个 n i \frac{n}{i} in相等的数划分到一块,这样就可以根据平方和公式来 i 2 i^2 i2了,然后可以用二分或者公式求出 n y = x \frac{n}{y}=x yn=x的最大的y,也就是 n x \frac{n}{x} xn ,最后处理一下 S n S_n Sn 即可,可用逆元或者__int128来处理。 平方和公式: S n = n ⋅ ( n + 1 ) ⋅ ( 2 n + 1 ) 6 平方和公式:S_n = \frac{n\cdot(n+1)\cdot(2n+1)}{6} 平方和公式:Sn=6n(n+1)(2n+1)

题目描述:

记 f(x) 为 x 的所有因数(约数)的平方的和。例如:f(12)=12+22+32+42+62+122。定义 g(n)=∑i=1nf(i)。给定 n,求 g(n) 除以 109+7 的余数。输入格式
输入一行包含一个正整数 n。输出格式
输出一个整数表示答案 g(n) 除以 109+7 的余数。数据范围
对于 20% 的评测用例,n≤105。
对于 30% 的评测用例,n≤107。
对于所有评测用例,1≤n≤109。输入样例:
100000
输出样例:
680584257

示例代码一:__int128写法 (1e38)

#include <iostream>
#include <algorithm>using namespace std;typedef long long LL;const int MOD = 1e9+7;int n;LL calc(int n)
{return n * (__int128)(n + 1) * (2 * n + 1) / 6 % MOD;
}int main()
{cin >> n;LL res = 0;for(int i = 1; i <= n;){int x = n / i, y = n / x;res = (res + (calc(y) - calc(i-1)) * x) % MOD;i = y + 1;}cout << (res + MOD) % MOD << endl;return 0;
}

示例代码二:逆元写法

#include <iostream>
#include <algorithm>using namespace std;typedef long long LL;const int MOD = 1e9+7;int n;//这样求也可以,前提是6与MOD是互质的
// LL qmi(LL a, LL k, int p)
// {
//     LL res = 1;
//     while(k)
//     {
//         if(k & 1) res = res * a % p;
//         k >>= 1;
//         a = a * a % p;
//     }//     return res;
// }// LL calc(int n)
// {
//     return n * (n + 1ll) % MOD * (2 * n + 1) % MOD * qmi(6,MOD-2,MOD) % MOD;
// }LL calc(int n)
{return n * (n + 1ll) % MOD * (2 * n + 1) % MOD * 166666668 % MOD;
}int main()
{//逆元就是除上一个数取模和乘上一个数取模的结果一样// for(int i = 1; ; ++i)// {//     if(i * 6 % MOD == 1)//     {//         cout << i << endl;//         return 0;//     }// }cin >> n;LL res = 0;for(int i = 1; i <= n;){int x = n / i, y = n / x;res = (res + (calc(y) - calc(i-1)) * x) % MOD;i = y + 1;}cout << (res + MOD) % MOD << endl;return 0;
}

二、爬树的甲壳虫

标签:数学、概率论、数学期望、逆元、快速幂

思路:这道题就是推公式,公式就不推了,说一下最后的结论: r e s = ( r e s + 1 ) ∗ y ∗ ( y − x ) − 1 res = (res+1) * y * (y-x)^{-1} res=(res+1)y(yx)1

题目描述:

示例代码:

#include <cstdio>
#include <iostream>using namespace std;typedef long long LL;const int MOD = 998244353;int n;LL qmi(LL a, LL k, int p)
{LL res = 1;while(k){if(k & 1) res = res * a % p;k >>= 1;a = a * a % p;}return res;
}int main()
{scanf("%d", &n);LL res = 0;while(n--){int x, y;scanf("%d%d", &x, &y);res = (res + 1) * y % MOD * qmi(y-x, MOD-2, MOD) % MOD;}cout << res << endl;return 0;
}

三、改变数组元素

标签:差分

思路:这道题用暴力做的话就能过 8 / 10 8/10 8/10 的样子,然后再细看这道题就是对一段下标操作,如果操作过就是 1 1 1 ,没有操作过就是 0 0 0 ,那么可以用差分的思想,对于操作过的一段,可以直接加一,代表操作的次数,最后如果操作的次数不是 0 0 0 ,那么就输出 1 1 1 就行了。

题目描述:

给定一个空数组 V 和一个整数数组 a1,a2,,an。现在要对数组 V 进行 n 次操作。第 i 次操作的具体流程如下:从数组 V 尾部插入整数 0。
将位于数组 V 末尾的 ai 个元素都变为 1(已经是 1 的不予理会)。
注意:
ai 可能为 0,即不做任何改变。
ai 可能大于目前数组 V 所包含的元素个数,此时视为将数组内所有元素变为 1。
请你输出所有操作完成后的数组 V。输入格式
第一行包含整数 T,表示共有 T 组测试数据。
每组数据第一行包含整数 n。
第二行包含 n 个整数 a1,a2,,an。输出格式
每组数据输出一行结果,表示所有操作完成后的数组 V,数组内元素之间用空格隔开。数据范围
1≤T≤20000,1≤n≤2×105,0≤ai≤n,保证一个测试点内所有 n 的和不超过 2×105。输入样例:
3
6
0 3 0 0 1 3
10
0 0 0 1 0 5 0 0 0 2
3
0 0 0
输出样例:
1 1 0 1 1 1
0 1 1 1 1 1 0 0 1 1
0 0 0

示例代码:

#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2e5+10;int T, n;
int b[N];void insert(int l, int r)
{b[l]++, b[r+1]--;
}int main()
{ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);cin >> T;while(T--){cin >> n;memset(b, 0, sizeof b);for(int i = 1; i <= n; ++i){int t;cin >> t;if(t == 0) continue;else if(t > i) {insert(1, i);}else{insert(i-t+1,i);}}for(int i = 1; i <= n; ++i) {b[i] += b[i-1];if(b[i]) cout << 1 << " ";else cout << 0 << " ";}cout << endl;}return 0;
}

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

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

相关文章

手撕LRU缓存——LinkedHashMap简易源码

题目链接&#xff1a;https://leetcode.cn/problems/lru-cache/description/?envTypestudy-plan-v2&envIdtop-100-liked 原理非常简单&#xff0c;一个双端链表配上一个hash表。 首先我们要知道什么是LRU就是最小使用淘汰。怎么淘汰&#xff0c;链表尾部就是最不常用的直接…

Google大模型Bard更名Gemini,现在实力如何?(VS gpt系列)

名人说&#xff1a;一花独放不是春&#xff0c;百花齐放花满园。——《增广贤文》 作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、简要介绍1、Gemini是什么&#xff1f;2、主要特点3、Gemini的版本4、应用潜力5、…

zookeeper启动报错

启动zookeeper报错 从报错中可以看到 Invalid config, exiting abnormally 意思是&#xff1a;配置无效&#xff0c;异常退出 在往上看是没有zoo.cof这个配置文件 2024-02-27 14:47:03,285 [myid:] - ERROR [main:o.a.z.s.q.QuorumPeerMain99] - Invalid config, exiting…

基于AMDGPU-ROCm的深度学习环境搭建

在风起云涌的AI江湖&#xff0c;NVIDIA凭借其CUDA生态和优秀的硬件大杀四方&#xff0c;立下赫赫战功&#xff0c;而另一家公司AMD也不甘示弱&#xff0c;带着他的生态解决方案ROCm开始了与不世出的NVIDA的正面硬钢&#xff0c;"ROCm is the answer to CUDA", AMD官网…

2月29日,每日信息差

&#x1f396; 素材来源官方媒体/网络新闻 &#x1f384; 小米汽车门店开建&#xff0c;首批销售网点至少六十家 &#x1f30d; 中国民航局&#xff1a;到2035年我国将建成航空运输强国 &#x1f30b; 中国石化&#xff1a;已累计建成充电站超6000座 &#x1f381; ofo 被强制执…

前端监控及搭建前端监控

前端监控怎么做&#xff1f; 前端也需要监控&#xff1f;技术人不可忽视的前端监控最全指南 一.前端监控的目的 为什么要进行前端监控&#xff1f; 是一种用于捕获&#xff0c;分析和报告网站或应用程序中存在异常&#xff0c;错误和性能问题的方法。通过监控&#xff0c;…

java界面代码

package day02;import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;public class lei4j extends JFrame implements ActionListener {//创建文本框JTextField tiaomu new JTextField(40);//创建密码文本框JPasswordField JK ne…

Java——数组的定义与使用

目录 一.数组的基本概念 1.什么是数组 2.数组的创建及初始化 3.数组的使用 二.数组是引用类型 1.初始JVM的内存分布 2.基本类型变量与引用类型变量的区别 3.再谈引用变量 4.认识 null 三.数组的应用场景 1.保存数据 2.作为函数的参数 2.1参数传基本数据类型 2.…

centos8安装xrdp

centos8安装xrdp 1、安装桌面服务2、关闭selinux3、安装xrdp4、创建root用户4.1 创建普通用户4.2 更改为超级用户 5、连接 xrdp是可以提供远程桌面服务&#xff0c;让linux系统也可以像windows一样&#xff0c;进行远程连接 1、安装桌面服务 Linux服务器没有安装桌面环境。如…

学习vue3第二节(使用vite 创建vue3项目)

使用vite 创建vue3项目 node 安装请移步 node官网&#xff1a; https://nodejs.p2hp.com/ node 版本控制 请移步 nvm官网&#xff1a;https://nvm.uihtm.com/ vite 生成vue项目完整版 请移步 vite官网&#xff1a;https://cn.vitejs.dev/ 1、使用 npm 或者 yarn 创建vue3 项目…

nwjs做自动化测试

分别是2个常用的自动化测试化框架 GitHub - nwutils/nw-selenium-javascript-example: An example of end-to-end testing with Selenium for NW.js apps via JavaScript GitHub - nwutils/nw-puppeteer-example: An example of using NW.js via Puppeteer. 看习惯使用哪个&…

Vue3使用jsx和render函数动态插入组件和元素

定义弹框组件&#xff08;只实现功能&#xff0c;不管样式&#xff09; import {render} from vue export function SingPop(content,handler) {const div document.createElement(div);let pop <div><div>{content}</div><div><button onClick{…

AI场景文件系统全景对比分析

针对AI场景下的文件系统&#xff0c;我们可以考虑几种常见的解决方案&#xff0c;如传统的网络附属存储&#xff08;NAS&#xff09;、高性能并行文件系统&#xff08;如Lustre和IBM Spectrum Scale&#xff09;&#xff0c;以及Hammerspace的Hyperscale NAS。下面是对这几种文…

NXP实战笔记(十一):32K3xx基于RTD-SDK在S32DS上配置DFLASH、MemAcc、Fee

目录 1、概述 2、RTD-SDK配置之Cache_Ip 3、RTD-SDK配置之Mem_43_InFls 4、RTD-SDK配置之MemAcc 5、RTD-SDK配置之Fee 6、代码示例 1、概述 S32K3目前安装的RTD普遍使用的是R22-11版本的AUTOSAR规范&#xff0c;作为一直使用AUTOSAR4.2.2的程序员来讲&#xff0c;属实迭代…

东方博宜 1511. 数字之和为13的整数

东方博宜 1511. 数字之和为13的整数 #include<iostream> using namespace std; int main() {int n ;cin >> n ;int cnt 0 ;for(int i 1 ; i < n ; i){int sum 0 ;int y ;y i ;while(true){sum y%10;y y / 10 ;if(y0)break; }if(sum 13)cnt 1 ; }cout…

leetcode-70. 爬楼梯

题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示…

QT之QSharedMemory共享内存

QSharedMemory是qt提供对共享内存操作的类&#xff0c;主要用来对内存卡写数据和读数据。 常用api: 1、void QSharedMemory::setKey(const QString &key) 为共享内存设置键值。如何当前的内存共享对象已经链接到底层的共享内存段&#xff08;isAttached&#xff09;&…

脚手架工程使用ElementUI

在终端中执行以下指令 npm install --save element-ui 在终端中显示added 9 packages in 10s 说明安装完成 在工程的main.js中 导入并使用ElementUI: import ElementUI from element-ui import element-ui/lib/theme-chalk/index.css Vue.use(ElementUI) 可以在*.vue页面中…

91、在推理流程中加载动态库中的Infer函数

注:建议在 new_version_with_notes 目录下尝试本节内容,有更为丰富的细节输出。 在上一节将生成的代码编译成一个动态链接库之后,接下来需要加载动态链接库中写好的推理入口函数,完成推理。 在生成的代码中,在 codegen 目录下,有一个 codegen.cc 文件,里面是一个 Infe…

二、TensorFlow结构分析(2)

目录 1、会话 1.1 __init__(target,graphNone,configNone) 1.2 会话的run() 1.3 feed操作 TF数据流图图与TensorBoard会话张量变量OP高级API 1、会话 1.1 __init__(target,graphNone,configNone) def session_demo():# 会话的演示# Tensorflow实现加法运算a_t tf.constan…