关于Chatgpt非会员版的一些测试

1.背景

首先我个人会写一些算法题,今晚正是如此。因为我将一道简单的问题复杂化(当然我也知道这道题不难)处于强迫症我就是要推导出来代码为什么可以这么写。。。在推导过程中我想象不到正确思想,故询问了gpt非会员版(登陆到期),正好想要对比一下与其它模型的代码分析水平。结果可想,我会在这里写文章!

2.题目

Problem - A - Codeforces

<aside> 💡

简单div2A,即正确答案是最大值-最小值,起初我认为会用到gcd,结果发现用不到,但是为什么最大值-最小值就是答案,我问了gpt让其分析问题并生成代码。

</aside>

<aside> 💡

问题理解

卡米尔卡有 (n) 只羊,每只羊有一个独特的美丽等级。卡米尔卡可以给所有羊添加一个固定的草束数 (d),然后她将选择两个羊,计算它们的美丽等级之和的最大公约数(gcd)。

目标:找到 (d) 使得两个羊的美丽等级的最大公约数最大。

关键点

  • 如果卡米尔卡选择 (d) 个草束,并将每只羊的美丽等级增加 (d),那么对于两只羊 (i) 和 (j),它们的美丽等级分别为 (a_i + d) 和 (a_j + d),最终计算的是 ( \gcd(a_i + d, a_j + d) )。
  • 由于 (\gcd(a_i + d, a_j + d)) = (\gcd(a_i - a_j, a_j + d)),问题的本质就是要找到美丽等级的差的最大公约数。

核心观察

  • 目标是找到最大值 (d),使得 ( \gcd(a_i + d, a_j + d) ) 最大化。
  • 关键在于美丽等级的差值,因此我们需要计算所有美丽等级之间差值的最大公约数。

更清晰的思路

  1. 排序:首先对美丽等级进行排序。
  2. 计算相邻元素的差:计算所有相邻元素之间的差值。
  3. 最大公约数:所有相邻元素之间的差值的最大公约数就是我们的答案。

为什么计算差的最大公约数?

  • 假设最小美丽值为 (a_{\min}),所有羊的美丽等级加上 (d = -a_{\min}) 后都会形成新的美丽等级,使得最小的美丽等级变为 0,其他的美丽等级与其差值就是相邻元素的差。
  • 我们计算所有相邻元素的差值的最大公约数,实际上就是想找到能够同时影响所有差值的最大公约数。

修正后的代码

#include <bits/stdc++.h>using namespace std;
#define int long long

int gcd(int a, int b) {
    return b ? gcd(b, a % b) : a;
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int t;
    cin >> t;
    while (t--) {
        int n;
        cin >> n;
        vector<int> a(n);
        for (int i = 0; i < n; i++) cin >> a[i];

        // 排序
        sort(a.begin(), a.end());

        // 计算所有相邻元素的差的最大公约数
        int g = 0;
        for (int i = 1; i < n; i++) {
            g = gcd(g, a[i] - a[i - 1]);
        }

        // 输出最大愉悦值
        cout << g << '\n';
    }

    return 0;
}

关键步骤解释

  1. 排序:先将美丽等级排序,因为相邻元素之间的差更容易计算。
  2. 计算差值的最大公约数:通过遍历每一对相邻元素,计算它们之间的差值的最大公约数。
  3. 输出结果:最大公约数就是两个美丽等级的最大愉悦值。

代码分析

  • 时间复杂度
    • 排序需要 (O(n \log n))。
    • 遍历计算差的最大公约数需要 (O(n))。
    • 总的时间复杂度是 (O(n \log n)),适合 (n \leq 100)。
  • 空间复杂度:需要存储美丽等级的数组,所以是 (O(n))。

示例分析

输入:

4
2
1 3
5
5 4 3 2 1
3
5 6 7
3
1 11 10

解析:

  1. 第一个测试用例
    • 羊的美丽等级:1, 3
    • 排序后:1, 3
    • 差值:3 - 1 = 2
    • 最大公约数为 2。
  2. 第二个测试用例
    • 羊的美丽等级:5, 4, 3, 2, 1
    • 排序后:1, 2, 3, 4, 5
    • 差值:2 - 1 = 1, 3 - 2 = 1, 4 - 3 = 1, 5 - 4 = 1
    • 最大公约数为 1。
  3. 第三个测试用例
    • 羊的美丽等级:5, 6, 7
    • 排序后:5, 6, 7
    • 差值:6 - 5 = 1, 7 - 6 = 1
    • 最大公约数为 1。
  4. 第四个测试用例
    • 羊的美丽等级:1, 11, 10
    • 排序后:1, 10, 11
    • 差值:10 - 1 = 9, 11 - 10 = 1
    • 最大公约数为 1。

总结

  • 本题的关键是 差值的最大公约数,而不仅仅是最大值和最小值的差。 </aside>

此上错误的回答!!!

以上可以对比我写的正确代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
 
const int N = 110;
int t;
 
 
signed main() 
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
 
    cin>>t;
    while(t--)
    {
    	int n;
        cin >> n;
        vector<int> a(n);
        for (int i = 0; i <n; i++) cin >> a[i]; 
 
        sort(a.begin(), a.end());
        cout << a.back() - a.front() << endl;
 
    }
    return 0;
}

相反我问了deepseek和(Grok)也就是目前最火的三个模型。

DeepSeek

整整一大段分析,细节的我不想去阅读,最后的代码更是简洁且正确。

3.为什么要对比非会员版

首先对于deep seek和Grok是不需要会员就可以用到最新的版本模型,R1和Grok3都是非常出色的大语言模型,由于Grok今晚服务器可能有些问题,导致不太稳定,故没有去对比,但最近的代码分析都是用Grok去做的,我认为他的思考更加详细有条理(对比gpt非会员),当然plus/pro版的gpt我认为还是目前最好的语言模型。问题就是非会员的解题能力的欠缺。毕竟如果不是团队购买plus/pro,价格还是有些昂贵(20刀)甚至pro200刀/month,当然能团队买那更加合适,用较便宜价格拿最好模型何乐而不为呢。

希望在之后会加强基础版的能力,这会是使用量的损失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值