算法竞赛入门【码蹄集进阶塔335题】(MT2281-2285)

news2024/11/28 19:23:28

算法竞赛入门【码蹄集进阶塔335题】(MT2281-2285)


文章目录

  • 算法竞赛入门【码蹄集进阶塔335题】(MT2281-2285)
  • 前言
      • 为什么突然想学算法了?
      • 为什么选择码蹄集作为刷题软件?
  • 目录
    • 1. MT2281 另一种模
    • 2. MT2282 小码哥的认可
    • 3. MT2283 整数的逆
    • 4. MT2284 行列式
    • 5. MT2285 矩阵乘法
    • 结语


前言

在这里插入图片描述

为什么突然想学算法了?

> 用较为“官方”的语言讲,是因为算法对计算机科学的所有分支都非常重要。 在绝大多数的计算机科学分支领域中,要想完成任何实质性的工作,理解算法的基础知识并掌握与算法密切相关的数据结构知识是必不可少的。
> 但从实际而言,是因为当下快到了考研和找工作的年纪(ಥ_ಥ),无论走哪一条路,都不免需要一些相对丰富的算法知识,是故,便产生了一个暑假速成算法的计划,可能对于像我这种算法竞赛小白而言,几乎很难,但我仍然还是想尝试一下,毕竟,梦想还是要有的,万一实现了呢?~( ̄▽ ̄~)~

在这里插入图片描述


为什么选择码蹄集作为刷题软件?

码蹄集,是在全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC) 指导下建设的,其依托全国各大名校计算机系和清华大学出版社等单位的强大资源,旨在为计算机学习爱好者提供全面和权威的计算机习题。
在这里插入图片描述


目录

1. MT2281 另一种模

(1)题目描述
给定正整数n,k和n个正整数 c1, C2,…" ,Cn。如果对于任意正整数x,可以通过mod c的值推出a mod k的值则输出Yes否则输出No

格式

输入格式: 第一行n, k,第二行为数列c
.
输出格式: 输出Yes或者No

样例1

输入:
4 5
2 3 5 12
.
输出格式: Yes

备注:

n, k,c[i] ≤1e6 。

(2)参考代码

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int maxn = 100010;
int n, k, num = 1;
int prime[maxn];
int main() {
    cin >> n >> k;
    vector<int> c(n+1);
    map<int, int> M;
    for(int i = 1; i <= n; i++)
        cin >> c[i];
    prime[1] = 2;  
    int hhh = k;
    for(int i = 2; i <= hhh; i++) {
        if(k < i) break;
        if(k % i == 0) {
            int ttt = true;
            for(int j = 1; j <= num; j++)
              if(i % prime[j] == 0 && i != prime[j]) {
                  ttt = false;
                  break;
              }
            if(!ttt) continue;
            prime[++num] = i;
            int temp = i;
            while(k % temp == 0) temp *= i;
            temp /= i;
            k /= temp;
            bool t = false;
            for(int j = 1; j <= n; j++) {
                if(c[j] % temp == 0) {
                    t = true;
                    break;
                }
            }
            if(!t) {
                printf("No");
                return 0;
            }
        }
    }
    printf("Yes");
    return 0;
}

2. MT2282 小码哥的认可

(1)题目描述
定义一个正整数α,它有p(az)个约数;如果这个数满足对于任意的i,属于0<i<a,有p(z)> p(i),那么它就受到小码哥的认可;比如840就是被小码哥认可的数。

现在给你一个N,求小于等于N的最大的小码哥的认可数。

格式

输入格式: 一个数N(1≤N≤2,000,000,000) 。
.
输出格式: 表示小于等于N的最大的小码哥的认可数。

样例1

输入: 1000
.
输出: 840

备注:

提示(1<N ≤ 2,000,000,000) .

(2)参考代码


'''
一个数值的约束个数等于其分解质因数之后,每个质因子上 "次幂加1" 的乘积,2*10……9以内的数值约数个数1600个左右,因此按照
约数个数给数值分类,显然每一类中的最小值才可能是候选的解,因此可以对2~1600的数做因数分解,每个值代表月数个数每个因子对
应一个质因子次幂,显然这个因子序列应该要非降序,第1个因子数值 = 质因子2的次幂+1,第2个因子数值 = 质因子3次幂+1 ......
DFS递归分解 2~1600,就可以得到每一类中的最小值,再用这些候选答案组成一个序列,进行升序排序,然后逐个验证是否满足要求,
最终实际的出来的候选序列长度只有70, 在这70个数值中二分找答案即可
也可以打表
'''
# -*- coding: utf-8 -*-
import time
from typing import List, Tuple
from collections import deque, Counter
from queue import PriorityQueue
import math
from functools import lru_cache
#from sortedcontainers import SortedDict, SortedSet
import random
import copy
import sys
sys.setrecursionlimit(99999999)
# 质数表
P = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
all_vals = {1 : 1}
# 将数值分解成非降序的约数乘积形式,每个约束大于等于2
def devide(arr:List, val, orig):
    if val == 1:
        ans = 1
        n = len(arr)
        for i in range(len(arr)):
            ans *= P[i] ** (arr[n-1-i]-1)
        if ans <= 2000000000:
            if orig not in all_vals:
                all_vals[orig] = ans
            else:
                all_vals[orig] = min(ans, all_vals[orig])
        return
    min_v = arr[-1] if len(arr) > 0 else -1
    for d in range(2, val+1):
        if val % d == 0 and d >= min_v:
            arr.append(d)
            devide(arr, val // d, orig)
            arr.pop(-1)
def main():
    # # 枚举约数个数,2*10^9以内的数值约数最多1600个左右,这里上界设置成1700
    for i in range(2, 1701):
        devide([], i, i)
    #print(all_vals)
    vals = [(v, k) for k, v in all_vals.items()]
    vals.sort()
    mx = -1
    buf = []
    for a, b in vals:
        if b > mx:
            buf.append(a)
        mx = max(mx, b)

    N = int(input())
    ans = None
    l, r = 0, len(buf)-1
    while l <= r:
        mid = (l + r) >> 1
        if buf[mid] <= N:
            ans = buf[mid]; l = mid + 1
        else:
            r = mid - 1
    print(ans)
if __name__ == '__main__':
    main();

3. MT2283 整数的逆

(1)题目描述
定义p = 1000000007,给定一个正整数n,求一个小于p的正整数,使得n * Z在模p意义下为1,即存在正整数k,使得n * 优 = k* p+1


格式

输入格式: 一个正整数n 。
.
输出格式: 输出一行一个整数α表示答案。

样例1

输入格式: 500000004
.
输出格式: 2

备注:

其中:1≤n ≤1,000,000,000 。

(2)参考代码

MOD = 10**9 + 7
def pow_mod(a, k, p):
    ans = 1
    pow_val = a % p
    while k != 0:
        if k & 1 != 0:
            ans = (ans * pow_val) % p
        pow_val = (pow_val ** 2) % p
        k >>= 1
    return ans
def rev_meta(b, p):
    return pow_mod(b, p-2, p)
def main():
    n = int(input())
    print(rev_meta(n, MOD))
if __name__ == '__main__':
    main();

4. MT2284 行列式

(1)题目描述
给出矩阵,求其行列式。


格式

输入格式:
第一行输入T表示数据组数。
对于每组数据,第一行输入n表示边长。接下来n行,每行输入n个整数,代表矩阵的元素。
.
输出格式: 对于每组数据,输出矩阵的行列式,答案请对0z1f1f1f1f取模。

样例1:

输入
3
3
1 -2 -1
0 3 2
3 1 -1
3
0 3 2
1 -2 -1
3 1 -1
4
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
.
输出
522133271
8
0

(2)参考代码

#include <cmath>
#include <cstdio>
#include <iostream>
using namespace std;
typedef long long  lld;
lld a[15][15];
int sign;
lld N, MOD = 0x1f1f1f1f;
void solved()
{
    lld ans = 1;
    for (int i = 0; i < N; i++) //当前行
    {
        for (int j = i + 1; j < N; j++) 
        {
            int x = i, y = j;
            while (a[y][i]) //利用gcd的方法,不停地进行辗转相除
            {
                lld t = a[x][i] / a[y][i];
                for (int k = i; k < N; k++)
                    a[x][k] = (a[x][k] - a[y][k] * t) % MOD;
                swap(x, y);
            }
            if (x != i) //奇数次交换,则D=-D'整行交换
            {
                for (int k = 0; k < N; k++)
                    swap(a[i][k], a[x][k]);
                sign ^= 1;
            }
        }
        if (a[i][i] == 0) //斜对角中有一个0,则结果为0
        {
            cout << 0 << endl;
            return;
        }
        else
            ans = ans * a[i][i] % MOD;
    }
    if (sign != 0)
        ans *= -1;
    if (ans < 0)
        ans += MOD;
    printf("%lld\n", ans);
}
int main()
{
    int t;
    scanf("%d", &t);
    while (t--)
    {
        sign = 0;
        scanf("%lld", &N);
        for (int i = 0; i < N; i++)
            for (int j = 0; j < N; j++)
                scanf("%lld", &a[i][j]);
        solved();
    }
    return 0;
}

5. MT2285 矩阵乘法

(1)题目描述


格式

输入格式:

.
输出格式:

样例1

输入格式:
4 3 4
1 2 3
4 -5 6
7 8 9
-3 2 1
4 5 6 7
8 6 9 7
0 0 1 0
.
输出格式:
20 17 27 21
-24 -10 -15 -7
92 83 123 105
4 -3 1 -7

备注:

其中: 1≤m ≤le8,1 ≤n ≤1e10

(2)参考代码

#include<bits/stdc++.h> 
/*
思路:不越狱的状态好计算所以:越狱数=总的状态数-不越狱的状态数
其中 总的状态数为:m^n
    不越狱的状态数: m*(m-1)^(n-1) :只有第一个可以选择m个宗教,其他的只能选和前一个不同的宗教所以是m-1种情况
这里计算用了快速幂的方法。
*/
using namespace std;
long long p=1007;
long long qpow(long long x, long long y){
    if(y==0)
        return 1;
    if(y%2==1){
        return qpow(x, y - 1) * x % p;
    }else{
        long long t = qpow(x, y/2) % p;
        return t*t % p;
    }
}
int main( )
{
    long long m,n;
    cin>>m>>n;
    long long ans = qpow(m,n)-(m*qpow(m-1,n-1)%p);
    cout<<(ans+p)%p<<endl;//注意需要+p之后再取 %p,防止有负数
    return 0;
}

结语

感谢大家一直以来的不断支持与鼓励,码题集题库中的进阶塔350题正在逐步更新,之后会逐步跟进星耀,王者的题,尽请期待!!!
同时,也希望这些题能帮助到大家,一起进步,祝愿每一个算法道路上的“苦行僧”们,都能够历经磨难,终成正果,既然选择了这条路,走到了这里,中途放弃,岂不是太过可惜?

另附中国计算机学会的杰出会员、常务理事轩哥博士的B站视频讲解链接https://space.bilibili.com/518554541/?spm_id_from=333.999.0.0,供大家更好的进行学习与刷题~( ̄▽ ̄~)~

愿你的结局,配得上你一路的颠沛流离。

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

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

相关文章

安卓版微信8.0.31内测版出炉:安装包变小,功能变多!

人是社会性生物&#xff0c;建立依恋、经营亲密关系是人的本能&#xff0c;只不过到了网络时代之后&#xff0c;用户进行交流的方式几乎都变成了微信等社交软件。 不仅可以让用户很便捷的和朋友进行沟通&#xff0c;并且在上班办公的时候&#xff0c;也是可以轻松传输文件等&a…

C++ · 手把手教你写一个扫雷小游戏

Hello&#xff0c;大家好&#xff0c;我是余同学。这两个月真是太忙了&#xff0c;无暇给大家更新文章… 暑假不是写了个扫雷小游戏吗(Link)&#xff1f;考虑到很多同学对代码没有透彻的理解&#xff0c;那么&#xff0c;这篇文章&#xff0c;我们来详细分析一下代码. 我们分…

【图像处理OpenCV(C++版)】——初学OpenCV

前言&#xff1a; &#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义&#xff0c;适用于平时学习、工作快…

百数低代码开发平台助力生产管理:制造管理系统

随着全球经济化与信息化&#xff0c;制造企业的生产管理系统的建立对于制造业企业的信息化以及生产的智能化具有重要的意义&#xff0c;同时也是促进现代工业进步和发展的基础条件之一。我国制造业属于传统行业&#xff0c;凭借生产规模大且劳动力资源丰富在全世界拥有着一定地…

[附源码]计算机毕业设计springboot旅游度假村管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Android 反编译入门(基于 Mac)

1 反编译基础 1.1 什么是反编译 定义&#xff1a;反编译就是将可执行程序转换为某种形式的高级编程语言的过程。 1.2 APK 文件的构成 首先&#xff0c;我们通过一张图来看看 APK 的整体组成&#xff1a; 可以看到&#xff0c;APK 主要由六个部分组成&#xff1a; Dex 文件…

什么值得一个头条?从世界杯看“头条”正确打开方式

“足球皇帝”贝肯鲍尔曾说&#xff1a;“在绿茵场上滚动的不是足球&#xff0c;而是黄金。” 卡塔尔世界杯不仅是球迷的盛宴&#xff0c;也是品牌的盛宴。绿茵场广告屏上&#xff0c;众多品牌纷纷现身。还有部分中国企业通过签约球队和球星等形式露面世界杯&#xff0c;共同挖…

【附源码】计算机毕业设计JAVA紫陶文化传播与学习交流网站

【附源码】计算机毕业设计JAVA紫陶文化传播与学习交流网站 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a;…

熤星传媒文化:抖音怎么切换到旧版本?

抖音现在也在不断地更新版本&#xff0c;但是很多小伙伴可能想知道一些新版本的功能&#xff0c;就随着了、系统去升级了&#xff0c;但是用着用着发现自己更喜欢旧版本的&#xff0c;那么抖音店铺又怎么去做店铺带货呢&#xff1f;跟着熤星传媒小编来一起看看吧&#xff01; 帐…

OWASP top10 的介绍

​ OWASP top10 的介绍 2021年版TOP 10产生三个新类别&#xff0c;且进行了一些整合 ​​ A01&#xff1a;失效的访问控制 ​ 从第五位上升称为Web应用程序安全风险最严重的类别&#xff0c;常见的CWE包括&#xff1a;将敏感信息泄露给未经授权的参与者、通过发送的数据泄…

07 CSS04

目标&#xff1a; 1、结构伪类选择器 2、伪元素 3、标准流 4、浮动 5、清除浮动 6、&#xff08;拓展&#xff09;BFC介绍 一、结构伪类选择器 1、作用与优势 作用&#xff1a;根据元素在HTML中的结构关系查找元素 优势&#xff1a;减少对于HTML中类的依赖&#xff0c;有…

[附源码]计算机毕业设计springboot家庭整理服务管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【MySQL】 MySQL亿级数据、主从架构,Sharding分片

数据库Mysql 内容管理MySQL填充亿级数据Insert into select存储过程loop insertLoadfile 导入CVS文件MySQL基准测试&#xff1a; sysbench、mysqlslapsysbenchmysqlslapSQL优化分页查询优化慢SQL日志工具mysqldumpslowMySQL主从复制MySQL主从复制 knowledgeMySQL二进制日志log_…

APS生产计划排产降低企业的生产运营成本

企业运营成本是企业管理的关键&#xff0c;也是企业加强管理&#xff0c;提高企业效益的重要途径&#xff0c;在多数企业的发展中&#xff0c;如何更有效地控制企业运营成本将显得极为突出和十分重要。 APS生产计划排产可以从“设备、物料、人力”三方面降低企业的运营成本&…

基于Go语言的网盘开发(GloudDisk)

&#xff08;记录一下自己做项目的过程&#xff09; 基于go-zero实现的简易的网盘系统&#xff0c;如果有小伙伴对这个项目感兴趣&#xff0c;可以去网上搜索一些资料。这里推荐一下我学习的来源&#xff1a;【项目实战】基于Go-zero、Xorm的网盘系统_哔哩哔哩_bilibili 确定…

AutoCAD Electrical 2022—项目中新建、添加、删除图纸

右键点击项目—选择新建图纸&#xff1b; 点击快捷图标&#xff0c;新建图形&#xff1b; 弹出对话框&#xff0c;在名称中输入图纸名称&#xff1b; 模板为图框的样式&#xff0c;位置代号&#xff0c;图纸保存的位置&#xff1b; 其他根据需要填写&#xff1b; 填写完点击…

JavaScript -- 02. 变量和数据类型

文章目录变量和数据类型1 数值(Number)1.1 普通数值1.2 其他进制的数字2 大整数&#xff08;BigInt&#xff09;3 字符串(String)3.1 基础表示3.2 转义字符3.3 模板字符串4 布尔值(Boolean)5 空值(Null)6 未定义&#xff08;Undefined&#xff09;7 符号&#xff08;Symbol&…

6-2 装载问题(分支限界)

6-2 装载问题&#xff08;分支限界&#xff09; 一、问题描述 有一批共个集装箱要装上2艘载重量分别为C1和C2的轮船&#xff0c;其中集装箱i的重量为Wi&#xff0c;且 采用下面的策略可得到最优装载方案&#xff1a; (1)将第一艘轮船尽可能装满; (2)将剩余集装箱装上第二艘轮…

基于rsync daemon 实现 sersync——sersync实现实时数据同步

1 sersync 介绍 sersync类似于inotify&#xff0c;同样用于监控&#xff0c;但它克服了inotify的缺点. inotify最大的不足是会产生重复事件&#xff0c;或者同一个目录下多个文件的操作会产生多个事件&#xff0c;例如&#xff0c;当监控目录中有5个文件时&#xff0c;删除目录…

[附源码]计算机毕业设计springboot考试系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…