9.11毒秋招(已改编)-太难了!!!

💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历

👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸

✨ 笔试合集传送们 -> 🧷学长刷题笔记

🍒 本专栏已收集 140+ 套题 🍄 题面描述等均已改编,如果和你实际看到的题面描述不一样请理解,做法和题目本质基本不变。

🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力 💞

alt

🍥 本次的T3有点困难,暂时不会正确的做法

1️⃣ 正则表达式+快速幂

2️⃣ 试除法求约数

3️⃣ 这题有点困难,暂时不会,太菜了wwww,有 AC 了的小伙伴可以教教😭

tips 正解是贪心+二分答案+数据结构,第一时间没想到正确的贪心,感谢牛友提供的思路!!!

🪙 01.多项式系数计算器

问题描述

K小姐是一位热爱代数的高中生。最近,她在研究多项式时遇到了一个有趣的问题。她有一个由若干个一次多项式因式相乘组成的表达式,每个因式的形式都是 ,其中 是一个非负整数。K小姐想知道,当这个表达式完全展开后, 的一次项系数是多少。

由于结果可能很大,K小姐只需要知道系数对 取模后的结果。你能帮助K小姐设计一个多项式系数计算器来解决这个问题吗?

输入格式

输入一行,包含一个字符串,表示K小姐的多项式表达式。字符串长度为

输出格式

输出一个整数,表示展开后 的一次项系数对 取模的结果。

样例输入

(x-1)(x+5)

样例输出

4

样例输入

(x-1)(x+2)(x+3)

样例输出

1

数据范围

  • 每个因式中的常数项 满足

题解

正则表达式+快速幂

多项式展开性质

对于形如 的多项式,展开后 的一次项系数等于: ,写成另一种形式,,其中

乘法逆元

在模运算中,除法可以通过乘法逆元实现。

对于质数模数 的乘法逆元 满足:可以通过费马小定理计算:

算法实现

a) 使用正则表达式提取所有常数项 。 b) 计算所有 的乘积 ,同时对 取模。 c) 对每个 ,计算 ,使用乘法逆元实现除法。 d) 将所有结果相加并对 取模,得到最终答案。

参考代码

  • Python
import re

def cal(expr):
    # 使用正则表达式提取常数项
    pattern = r'\(x([+-]\d+)\)'
    matches = re.findall(pattern, expr)
    
    # 将提取的常数项转换为整数
    numbers = [int(match) for match in matches]
    return numbers

mod = 10007

def inv(x):
    # 计算乘法逆元
    return pow(x, mod - 2, mod)

# 读取输入
s = cal(input())

ans = 1
for val in s:
    # 计算所有常数项的乘积
    ans *= val
    ans %= mod

res = 0
for val in s:
    # 计算最终结果
    res += ans * inv(val) 
    res %= mod

print(res % mod)

🪷 02.古董花瓶的共同特征

问题描述

K小姐是一位古董收藏家,她最近获得了四件珍贵的古代花瓶。这些花瓶来自不同的朝代,但K小姐注意到它们可能有一些共同的特征。每个花瓶都有一个特征值,K小姐想知道这四个花瓶是否存在一个大于1的共同特征因子。如果存在,她想找出最小的那个;如果不存在,她会认为这些花瓶之间没有特殊联系。

输入格式

第一行输入一个正整数 ,表示测试数据组数。

接下来 行,每行输入四个正整数 ,分别表示四个花瓶的特征值。

输出格式

输出 行,每行一个整数,表示四个花瓶的最小共同特征因子(大于1)。如果不存在这样的因子,输出

样例输入

2
2 3 5 7
4 8 16 32

样例输出

-1
2

数据范围

题解

试除法求约数

最大公约数做多了,最小公约数 ()来了你还会吗?

对最小的数求出他的所有约数,然后依次判断是否可以被成为其他所有数的公约数即可

时间复杂度: + 排序复杂度(可以不用)

参考代码

  • Python
import sys
import math

def find_min_common_factor(nums):
    # 找出最小值
    min_val = min(nums)
    factors = []
    
    # 计算因数
    for i in range(1, int(math.sqrt(min_val)) + 1):
        if min_val % i == 0:
            factors.append(i)
            if i != min_val // i:
                factors.append(min_val // i)
    
    # 排序因数
    factors.sort()
    
    # 检查公因数
    for factor in factors[1:]:  # 跳过1
        if all(num % factor == 0 for num in nums):
            return factor
    
    return -1

# 读取输入
T = int(sys.stdin.readline())
for _ in range(T):
    a, b, c, d = map(int, sys.stdin.readline().split())
    print(find_min_common_factor([a, b, c, d]))
  • Java
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int T = scanner.nextInt();
        
        for (int t = 0; t < T; t++) {
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            int c = scanner.nextInt();
            int d = scanner.nextInt();
            System.out.println(findMinCommonFactor(new int[]{a, b, c, d}));
        }
    }
    
    public static int findMinCommonFactor(int[] nums) {
        // 找出

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

学长刷题笔记 文章被收录于专栏

这里收集了超全的刷题笔记,欢迎大家的订阅,会持续跟新的

全部评论
T3貌似有一个别的做法,稍等我会了就跟新!!
1 回复 分享
发布于 09-11 16:29 江苏
怎么订阅呀
点赞 回复 分享
发布于 11-15 14:02 上海

相关推荐

评论
1
2
分享
牛客网
牛客企业服务