基础数学问题

news2024/11/17 18:21:30

目录

P1143 进制转换

P1100 高低位交换

P1866 编号

P3913 车的攻击

P3383 【模板】线性筛素数

P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题

P1572 计算分数

P4057 [Code+#1] 晨跑

P2651 添加括号III

 P2660 zzc 种田

P1403 [AHOI2005] 约数研究

 P1469 找筷子

P1246 编码

P2926 [USACO08DEC] Patting Heads S

P1835 素数密度

P1414 又是毕业季II


P1143 进制转换

inline void solve()
{
    int n, m;
    string s;
    cin >> n >> s >> m;
    int sum = 0, k = 0;
    // 将n进制转换为10进制
    for (int i = 0; i < s.size(); i++)
    {
        if (s[i] < 'A')
        {
            k = (s[i] - '0') * pow(n, s.size() - i - 1);
            sum += k;
        }
        else
        {
            k = (s[i] - 'A' + 10) * pow(n, s.size() - i - 1);
            sum += k;
        }
    }
    // 将10进制转换为m进制
    vector<int> A;
    while (sum > 0)
    {
        A.pb(sum % m);
        sum /= m;
    }
    for (int i = A.size() - 1; i >= 0; i--)
    {
        if (A[i] < 10)
            cout << A[i];
        else
            printf("%c", A[i] - 10 + 'A'); // 注意要用%c
    }
}

P1100 高低位交换

inline void solve()
{
    unsigned int n;  //范围是2^32,signed是2^31
    cin >> n;
    cout << (n >> 16) + (n << 16);
}

P1866 编号

const int mod = 1e9 + 7;
int a[51];

inline void solve()
{
    int n;
    LL s = 1;
    cin >> n;
    ff(i, n) cin >> a[i];
    sort(a + 1, a + n + 1);
    ff(i, n)
    {
        s *= (a[i] - i + 1);
        s %= mod;
    }
    cout << s;
}

P3913 车的攻击

第一点:在unique之前必须保证去重数组有序,也就是得sort一下。
第二点:unique并不会生成一个新的数组,而是将原数组多余的部分“移”到了数组之后,同时unique本身还会返回一个指针,指向去重之后的最后一位。

利用c++可以指针相加减的特点,我们可以通过 unique-数组指针 来知道去重之后数组的“大小”

const int N = 1e6 + 10;
LL a[N], b[N];
LL n, k;
inline void solve()
{
    scanf("%lld%lld", &n, &k);

    f(i, k) scanf("%lld%lld", &a[i], &b[i]);
    // cin >> a[i] >> b[i];
    sort(a, a + k);
    sort(b, b + k);
    LL x = unique(a, a + k) - a;
    LL y = unique(b, b + k) - b;
    printf("%lld", n * n - (n - x) * (n - y));
}

P3383 【模板】线性筛素数

const int N = 1e8 + 10;
int primes[N], cnt;
bool st[N];
void get_primes(int n)
{
    for (int i = 2; i <= n; i++)
    {
        if (!st[i])
        {
            primes[++cnt] = i; // i如果是质数,就加到数组中
        }

        for (int j = 1; primes[j] <= n / i; j++) // 从小到大枚举所有质数
        {
            st[primes[j] * i] = true; // 把当前的质数和i的乘积筛掉
            if (i % primes[j] == 0)
                break; // 成立时,primes[j]一定是i的最小质因子,primes[j]也一定是primes[j]*i的最小质因子;不成立时,primes[j]一定小于i的所有质因子,primes[j]也一定是primes[j]*i的最小质因子
        }
    }
}
inline void solve()
{
    int n, m;
    cin >> n >> m;
    get_primes(n);
    while (m--)
    {
        int x;
        cin >> x;
        cout << primes[x] << endl;
    }
}

P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题

两个数的积等于它们最大公约数和它们最小公倍数的积。公式表示为 a×b=gcd(a,b)×lcm(a,b)

const int N = 1e6 + 10;
LL m, n, ans;
inline void solve()
{
    cin >> m >> n;
    if (m == n)
        ans--;
    n *= m;
    for (LL i = 1; i <= sqrt(n); i++)
    {
        if (n % i == 0 && __gcd(i, n / i) == m)
            ans += 2;
    }
    cout << ans;
}

P1572 计算分数

int a, b, c, d;
int ans1, ans2;

inline void solve()
{
    scanf("%d/%d", &a, &b);
    while ((scanf("%d/%d", &c, &d)) != EOF)
    {
        int gcd = __gcd(b, d);
        int lcm = b * d / gcd;
        ans2 = lcm;
        ans1 = a * (lcm / b) + c * (lcm / d);
        a = ans1 / (__gcd(ans1, ans2));
        b = ans2 / (__gcd(ans1, ans2));
    }
    ans1 = a;
    ans2 = b;
    if (ans2 < 0)
    {
        ans1 =- ans1;
        ans2 =- ans2;
    }
    if (ans2 == 1)
        printf("%d\n", ans1);
       
    else
        printf("%d/%d\n", ans1, ans2);
}

P4057 [Code+#1] 晨跑

inline void solve()
{
    LL a, b, c;
    cin >> a >> b >> c;
    cout << a * b * c / __gcd(b, c) / __gcd(a, b * c / __gcd(b, c));
}

P2651 添加括号III

a1肯定是分子,a2肯定是分母

a1/(a2/a3/a4/...)=a1a3a4.../a2,所以我们只要确认a1a3a4.../a2是否是整数。

如果进行约分,知道a2能被约分成1,那么就是整数。

const int N = 1e4 + 10;
int a[N];
inline void solve()
{
    int n;
    cin >> n;
    cin >> a[1] >> a[2];
    a[2] /= __gcd(a[1], a[2]);
    for (int i = 3; i <= n; i++)
    {
        cin >> a[i];
        a[2] /= __gcd(a[i], a[2]);
    }
    if (a[2] == 1)
        cout << "Yes" << endl;
    else
        cout << "No" << endl;
}

 P2660 zzc 种田

inline void solve()
{
    LL x, y;
    cin >> x >> y;
    LL ans = 0;
    while (x && y)
    {
        swap(x, y); // x是长,y是宽
        ans += 4 * y * (x / y);
        x %= y;
    }
    cout << ans << endl;
}

P1403 [AHOI2005] 约数研究

[1,n]里约数有i的个数是⌊n/i​⌋下取整

约数表如下所示

inline void solve()
{
    int n;
    cin >> n;
    LL ans = 0;
    ff(i, n)
    {
        ans += n / i;
    }
    cout << ans;
}

优化: 很多⌊n/i​⌋下取整都是一样的,i跳到⌊n/j​⌋=⌊n/i​⌋+1的位置

inline void solve()
{
    int n, ans = 0;
    cin >> n;
    for (int i = 1; i <= n;)
    {
        int j = n / (n / i);
        ans += (n / i) * (j - i + 1);
        i = j + 1;
    }
    cout << ans;
}

 P1469 找筷子

const int N = 1e7 + 10;
int a[N], b[N];
set<int> s;
inline void solve()
{
    int n;
    cin >> n;
    ff(i, n)
    {
        cin >> a[i];
        b[a[i]]++;
        s.insert(a[i]);
    }

    for (auto i : s)
    {
        if (b[i] % 2 != 0)
        {
            cout << i << endl;
            break;
        }
    }
}

空间限制为 4 Mb的时候,开一个10^7的数组就MLE了。

 异或运算

异或的两个小小的性质:

  1. k 个相同的数的异或和,当 k 为奇数时,结果是这个数本身,否则结果是 0。
  2. 任何数与 0 的异或值是它本身。

inline void solve()
{
    int n;
    cin >> n;
    int ans = 0;
    ff(i, n)
    {
        int x;
        cin >> x;
        ans ^= x;
    }
    cout << ans;
}

P1246 编码

模拟:

inline void solve()
{
    string s;
    cin >> s;
    int sl = s.size();
    int a[8];
    for (int i = 0; i < sl; i++)
        a[i] = s[sl - i - 1] - 'a' + 1;
    int t = 0;
    int b[8] = {0};
    while (++t)
    {

        b[0]++;
        int k = 0;
        for (int i = 0; i < 8; i++)
        {
            if (b[i] > 26 - i)
            {
                k++;
                b[i + 1]++;
            }
            else
                break;
        }
        for (int i = k - 1; i >= 0; i--)
        {
            b[i] = b[i + 1] + 1;
        }
        int flag = 0;
        for (int i = 0; i < sl; i++)
        {
            if (a[i] != b[i])
            {
                flag = 1;
                break;
            }
        }
        if (flag == 0)
        {
            cout << t << endl;
            break;
        }

        if (b[6])
        {
            cout << "0" << endl;
            break;
        }
    }
}

打表:

map<string, int> m;
int ans = 1;
void qwe(int res, char c, string s)
{
    if (res == 0)
    {
        m[s] = ans;
        ans++;
        return;
    }
    if (c == 'z' + 1)
        return;
    for (int i = 0; c + i <= 'z' - (res - 1); i++) // 要求不重复
    {
        qwe(res - 1, char(c + i) + 1, string(s + char(c + i)));
    }
}
inline void solve()
{
    qwe(1, 'a', "");
    qwe(2, 'a', "");
    qwe(3, 'a', "");
    qwe(4, 'a', "");
    qwe(5, 'a', "");
    qwe(6, 'a', "");
    string s;
    cin >> s;
    cout << m[s];
}

P2926 [USACO08DEC] Patting Heads S

const int N = 1e6 + 10;
int a[N], b[N], cnt[N];
inline void solve()
{
    int n;
    cin >> n;
    int maxn = 0;
    ff(i, n)
    {
        cin >> a[i];
        b[a[i]]++; // 存a[i]出现的次数
        maxn = max(maxn, a[i]);
    }
    ff(i, maxn)
    {
        if (b[i] == 0)
            continue;
        for (int j = 1; i * j <= maxn; j++)
            cnt[i * j] += b[i]; // 枚举i的倍数,同j+=i;cnt[j]+=b[i];
    }
    ff(i, n) cout << cnt[a[i]] - 1 << endl; // 不能拍自己
}

P1835 素数密度

// 欧拉筛
const int N = 1e5 + 10;
int primes[N], cnt; // primes[]存储所有素数
bool st[N];         // st[x]存储x是否被筛掉
void get_primes(int n)
{
    for (int i = 2; i <= n; i++)
    {
        if (!st[i])
            primes[cnt++] = i;
        for (int j = 0; primes[j] * i <= n; j++)
        {
            st[primes[j] * i] = true;
            if (i % primes[j] == 0)
                break;
        }
    }
}
// 区间范围,因为我们无法完全映射所有的区间,只能采用类似于偏移的办法对某段区间整体偏移L进行描述。
// 否则空间上的限制就先达到了,无法用计算机模拟了。
const int M = 10000010;
int a[M]; // 记录偏移后的数据是不是合数,1:合数;0:质数。a[i]表示L+i是不是合数, 有一个偏移量L
inline void solve()
{
    // 筛出50000之内的所有质数
    get_primes(50000); // R开根号的极限也小于50000
    // 问:为啥要开LL,开INT不行吗?
    // 答:不行,因为下面的运算中可能存在加法,如果是极限的整数,再加一下就会爆INT。
    LL L, R;
    cin >> L >> R;
    // 特判,防止第11个测试点WA掉。
    if (L == 1)
        L = 2;

    // 遍历已知的质数列表
    for (int i = 0; i < cnt; i++)
    {
        // start:找到开始筛的数字
        // 【大于L,并且是p的倍数,最小整数是多少?】
        LL start = max(2ll, (L - 1) / primes[i] + 1) * primes[i];
        // 成倍的质数筛出掉
        for (LL j = start; j <= R; j += primes[i])
            a[j - L] = 1; // 标识为质数
    }

    // 结果
    int ans = 0;
    for (LL i = L; i <= R; i++)
        if (!a[i - L])
            ans++;
    cout << ans << endl;
}

P1414 又是毕业季II

const int N = 1e6 + 10;
int cnt[N]; // c[i]表示i作为因子的次数
inline void solve()
{
    int n;
    cin >> n;
    int t = 0;
    ff(i, n)
    {
        int x;
        cin >> x;
        t = max(t, x); // 记录目前最大能力值
        for (int i = 1; i <= sqrt(x); i++)
        {
            if (x % i == 0) // 有约数
            {
                cnt[i]++; // i作为因子的次数++
                if (x != i * i)
                    cnt[x / i]++; // 如果不是平方,x/i也是因子;如果x是i的平方只记录i作为一次因子
            }
        }
    }
    int x = t;
    ff(i, n)
    {
        while (cnt[x] < i) // cnt[x]>=i时停止
            x--;
        cout << x << endl;
    }
}

 

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

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

相关文章

未来网络的选择:100G光模块与400G光模块的对比

随着互联网的快速发展和数据传输需求的不断增长&#xff0c;光通信技术在网络领域中扮演着至关重要的角色。光模块是光通信系统中的核心组件之一&#xff0c;而100G光模块和400G光模块是目前应用广泛的两种主要类型。本文将对这两种光模块进行详细的区别对比。 一、传输速率 …

亿级短视频,如何架构?

说在前面 在尼恩的&#xff08;50&#xff09;读者社群中&#xff0c;经常指导大家面试架构&#xff0c;拿高端offer。 前几天&#xff0c;指导一个年薪100W小伙伴&#xff0c;拿到字节面试邀请。 遇到一个 非常、非常高频的一个面试题&#xff0c;但是很不好回答&#xff0…

Python3的print用法

目录 一&#xff1a;print语法 二&#xff1a;print结尾参数end用法 三&#xff1a;print分隔符参数sep用法 四&#xff1a;print固定宽度字符输出 一&#xff1a;print语法 print(*objects, sep , end\n, filesys.stdout, flushFalse) 参数解释&#xff1a; &q…

薅羊毛!Dify升级并可领400万token额度;YC 23夏季营创业团队清单;开源版妙鸭及原理揭秘;清华大模型课程 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; YC 2023年夏季营入选160创业团队&#xff0c;其中6成是AI方向 YC 2023年夏令营有160创业团队入选&#xff0c;遵从了其一贯的价值主张…

Spring AOP简单介绍

什么是AOP 面向切面编程(Aspect-Oriented Programming)是一种编程范式&#xff0c;旨在通过将横切关注点与主要业务逻辑分离&#xff0c;提供一种更好的代码组织和模块化的方式。 AOP的思想是将这些横切关注点从主要业务逻辑中抽离出来&#xff0c;形成一个独立的模块&#x…

【教程】navicat配合HTTP通道远程连接SQLite数据库

前言 &#x1f34a;缘由 好奇的我想查看服务器上宝塔面板的SQLite数据库 久别一月&#xff0c;特来水文。起因是我看到服务器上搭建的宝塔面板&#xff0c;好奇其中使用的SQLite数据库&#xff0c;想用navicat远程连接看一下&#xff0c;奈何不会玩&#xff0c;特来写一篇文…

java语言B/S架构云HIS医院信息系统源码【springboot】

医院云HIS全称为基于云计算的医疗卫生信息系统( Cloud- Based Healthcare Information System)&#xff0c;是运用云计算、大数据、物联网等新兴信息技术&#xff0c;按照现代医疗卫生管理要求&#xff0c;在一定区域范围内以数字化形式提供医疗卫生行业数据收集、存储、传递、…

使用async/await并不会执行接下来的代码,原因及解决办法

我的错误代码如下&#xff1a; async mounted() {await this.get_table_header()console.log(finish) }get_table_header(click) {const params {project_id: this.projectId,version_id: this.versionId}return new Promise((resolve, reject) > {get_table_header_setti…

基于STM32标准库智能风扇设计

目录 一&#xff0c;前言 二&#xff0c;系统方案选择 三&#xff0c;实体展示 工程分类 四&#xff0c;相关代码 PWM.c PWM.h AD.c AD.h 电机驱动程序 舵机驱动 一&#xff0c;前言 当今生活中&#xff0c;风扇已成为人们解暑的重要工具&#xff0c;然而使用风扇缓解…

一文读懂结构型模式----组合模式!

一、组合模式 1.组合模式的概述 1.1 组合模式是什么 组合模式是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象&#xff0c;用来表示部分以及整体层次。 三要素&#xff1a; 根节点(root)&#xff1a;在一棵非空的树中只有一个根节点&#xff0…

【深度学习-图像识别】使用fastai对Caltech101数据集进行图像多分类(50行以内的代码就可达到很高准确率)

文章目录 前言fastai介绍数据集介绍 一、环境准备二、数据集处理1.数据目录结构2.导入依赖项2.读入数据3.模型构建3.1 寻找合适的学习率3.2 模型调优 4.模型保存与应用 总结人工智能-图像识别 系列文章目录 前言 fastai介绍 fastai 是一个深度学习库&#xff0c;它为从业人员…

PyTorch学习笔记(十五)——完整的模型训练套路

以 CIFAR10 数据集为例&#xff0c;分类问题&#xff08;10分类&#xff09; model.py import torch from torch import nn# 搭建神经网络 class MyNN(nn.Module):def __init__(self):super(MyNN, self).__init__()self.model nn.Sequential(nn.Conv2d(3, 32, 5, 1, 2),nn.Ma…

C语言:深度学习知识储备

目录 数据类型 每种类型的大小是多少呢&#xff1f; 变量 变量的命名&#xff1a; 变量的分类&#xff1a; 变量的作用域和生命周期 作用域&#xff1a; 生命周期&#xff1a; 常量 字符串转义字符注释 字符串&#xff1a; 转义字符 操作符&#xff1a; 算术操作符…

nginx反向代理、负载均衡

修改nginx.conf的配置 upstream nginx_boot{# 30s内检查心跳发送两次包&#xff0c;未回复就代表该机器宕机&#xff0c;请求分发权重比为1:2server 192.168.87.143 weight100 max_fails2 fail_timeout30s; server 192.168.87.1 weight200 max_fails2 fail_timeout30s;# 这里的…

【流程引擎】--Camunda基础及sprringboot简单集成Camunda

目录 一、前言二、Camunda基本介绍2.1、camunda基础--符号表示2.2、camunda基础--网关表示2.3、camunda基础--事件表示 三、springboot集成Camunda四、后续 一、前言 目前市场上有常见的流程引擎&#xff1a;JBPM、Activiti、Camunda、Flowable、CompileFlow。它们的发展史如下…

TR 已经释放 task未释放的问题

货铺QQ群号&#xff1a;834508274 微信群不能扫码进了&#xff0c;可以加我微信SAPliumeng拉进群&#xff0c;申请时请提供您哪个模块顾问&#xff0c;否则是一律不通过的。 进群统一修改群名片&#xff0c;例如BJ_ABAP_森林木。群内禁止发广告及其他一切无关链接&#xff0c;小…

16-案例-记账单

功能需求: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head> &l…

224、仿真-基于51单片机音乐播放器流水灯控制Proteus仿真设计(程序+Proteus仿真+原理图+程序流程图+元器件清单+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、原理图 五、程序源码 资料包括&#xff1a; 需要完整的资料可以点击下面的名片加下我&#xff0c;找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选…

C++音乐播放系统

C音乐播放系统 音乐的好处c发出声音乐谱与赫兹对照把歌打到c上 学习c的同学们都知道&#xff0c;c是一个一本正经的编程语言&#xff0c;因该没有人用它来做游戏、做病毒、做…做…做音乐播放系统吧&#xff01;&#xff01; 音乐的好处 提升情绪&#xff1a;音乐能够影响我们…

【C++进阶】继承、多态的详解(多态篇)

【C进阶】继承、多态的详解&#xff08;多态篇&#xff09; 目录 【C进阶】继承、多态的详解&#xff08;多态篇&#xff09;多态的概念多态的定义及实现多态的构成条件&#xff08;重点&#xff09;虚函数虚函数的重写&#xff08;覆盖、一种接口继承&#xff09;C11 override…