首页 > 其他分享 >XDOJ 730 一元稀疏多项式的简单计算器 (Copilot 辅助代码)

XDOJ 730 一元稀疏多项式的简单计算器 (Copilot 辅助代码)

时间:2024-12-30 17:56:29浏览次数:3  
标签:map res mp1 XDOJ 730 second mp2 Copilot first

标题  

一元稀疏多项式计算器

时间限制

2S

内存限制

10000 Kb

问题描述

设计一个一元稀疏多项式的简单计算器,要求能进行加减运算。

问题输入

每组数据有3行构成,第1行为3个正整数n,m,t, n表示第一个多项式的项数,m表示第二个多项式的项数,t表示运算类型,0为加法,1为减法,每组数据的第2行包含2n个整数,每两个整数分别表示第一个多项式每一项的系数和指数;第3行包含2m个整数,每两个整数分别表示第二个多项式每一项的系数和指数。输入每一项按指数从低到高的顺序排列。

问题输出

在一行上以多项式形式输出结果,指数按从低到高的顺序

输入样例

6 3 0

1 0 1 1 -3 2 1 3 1 4 1 5

-1 3 -2 4 1 5

输出样例

1+x-3x^2-x^4+2x^5

1.本题是 Felix 第一次用 vscode 自动代码补全写的代码,可以说 Copilot 真的很好用,定义一个变量, if 一下, 所有代码都提示出来了;

2.80 分的原因可能是没有考虑最终相减为 0 的情况

3.注意迭代器不能在遍历时 erase 删除

// 2024/12/30 OK with the help of Copilot
#include <bits/stdc++.h>

using namespace std;

int n, m, t;
map<int, int> mp1, mp2;

map<int, int> Addition(map<int, int> mp1, map<int, int> mp2)
{
    map<int, int> res;
    for (auto it = mp1.begin(); it != mp1.end(); it ++) {
        res[it->first] = it->second;
    }
    for (auto it = mp2.begin(); it != mp2.end(); it ++) {
        if (res.find(it->first) != res.end()) {
            res[it->first] += it->second;
        } else {
            res[it->first] = it->second;
        }
    }
    return res;
}

map<int, int> Subtraction(map<int, int> mp1, map<int, int> mp2)
{
    map<int, int> res;
    for (auto it = mp1.begin(); it != mp1.end(); it ++) {
        res[it->first] = it->second;
    }
    for (auto it = mp2.begin(); it != mp2.end(); it ++) {
        if (res.find(it->first) != res.end()) {
            res[it->first] -= it->second;
        } else {
            res[it->first] = -it->second;
        }
    }
    return res;
}

int main()
{
    cin >> n >> m >> t;
    for (int i = 1; i <= n; i ++) {
        int a, b;
        cin >> a >> b;
        mp1[b] = a;
    }
    for (int i = 1; i <= m; i ++) {
        int a, b;
        cin >> a >> b;
        mp2[b] = a;
    }
    map<int, int> res;
    if (!t) {
        res = Addition(mp1, mp2);
    } else {
        res = Subtraction(mp1, mp2);
    }
    int f = 0;
    for (auto it = res.begin(); it != res.end(); it ++) {
        if (it->second != 0) {
            f = 1;
            break;
        }
    }
    if (!f) {
        cout << "0";
        return 0;
    }
    int flag = 0;
    for (auto it = res.begin(); it != res.end(); it ++) {
        if (it->second == 0) {
            continue;
        }
        if (flag == 0 && it->second < 0) {
            cout << "-";
        } else if (flag != 0 && it->second > 0) {
            cout << "+";
        }
        if (it->first == 0) {
            cout << it->second;
        } else if (it->first == 1) {
            if (it->second == 1) {
                cout << "x";
            } else if (it->second == -1) {
                cout << "-x";
            } else {
                cout << it->second << "x";
            }
        } else {
            if (it->second == 1) {
                cout << "x^" << it->first;
            } else if (it->second == -1) {
                cout << "-x^" << it->first;
            } else {
                cout << it->second << "x^" << it->first;
            }
        }
        flag = 1;
    }
    return 0;
}
#include <bits/stdc++.h>

using namespace std;

int n, m, t;
map<int, int> mp1, mp2;

map<int, int> Addition(map<int, int> mp1, map<int, int> mp2)
{
    map<int, int> res;
    for (auto it = mp1.begin(); it != mp1.end(); it ++) {
        res[it->first] = it->second;
    }
    for (auto it = mp2.begin(); it != mp2.end(); it ++) {
        if (res.find(it->first) != res.end()) {
            res[it->first] += it->second;
        } else {
            res[it->first] = it->second;
        }
    }
    return res;
}

map<int, int> Subtraction(map<int, int> mp1, map<int, int> mp2)
{
    map<int, int> res;
    for (auto it = mp1.begin(); it != mp1.end(); it ++) {
        res[it->first] = it->second;
    }
    for (auto it = mp2.begin(); it != mp2.end(); it ++) {
        if (res.find(it->first) != res.end()) {
            res[it->first] -= it->second;
        } else {
            res[it->first] = -it->second;
        }
    }
    return res;
}

int main()
{
    cin >> n >> m >> t;
    for (int i = 1; i <= n; i ++) {
        int a, b;
        cin >> a >> b;
        mp1[b] = a;
    }
    for (int i = 1; i <= m; i ++) {
        int a, b;
        cin >> a >> b;
        mp2[b] = a;
    }
    map<int, int> res;
    if (!t) {
        res = Addition(mp1, mp2);
    } else {
        res = Subtraction(mp1, mp2);
    }
    int f = 0;
    for (auto it = res.begin(); it != res.end(); it ++) {
        if (it->second != 0) {
            f = 1;
            break;
        }
    }
    if (!f) {
        cout << "0";
        return 0;
    }
    int flag = 0;
    for (auto it = res.begin(); it != res.end(); it ++) {
        if (it->second == 0) {
            continue;
        }
        if (flag == 0 && it->second < 0) {
            cout << "-";
        } else if (flag != 0 && it->second > 0) {
            cout << "+";
        }
        if (it->first == 0) {
            cout << it->second;
        } else if (it->first == 1) {
            if (it->second == 1) {
                cout << "x";
            } else if (it->second == -1) {
                cout << "-x";
            } else {
                cout << it->second << "x";
            }
        } else {
            if (it->second == 1) {
                cout << "x^" << it->first;
            } else if (it->second == -1) {
                cout << "-x^" << it->first;
            } else {
                cout << it->second << "x^" << it->first;
            }
        }
        flag = 1;
    }
    return 0;
}

 

标签:map,res,mp1,XDOJ,730,second,mp2,Copilot,first
From: https://blog.csdn.net/2301_79398241/article/details/144831329

相关文章

  • Windows10 64环境下用Qt5.12.12自带的mingw730_64构建编译OpenCV4.1.0时cmake-3.20.6
    一、环境条件说明:操作系统:Windows1064环境编译工具:用Qt5.12.12自带的mingw730_64构建构建对象:编译OpenCV4.1.0的Release64位和Debug64位动态链接库构建工具:CMake中的参数配置二、cmake-3.20.6中的参数配置1、按照下图配置好OpenCV4.1.0的源代码目录和构建编译输出目录,然......
  • free version GitHub Copilot All In One
    freeversionGitHubCopilotAllInOneAI编程编码助手GitHubCopilotfreeResponsesarelimitedto2,000codecompletionsand50chatmessagespermonth.https://github.com/settings/copilotGitHubCopilotProhttps://github.com/github-copilot/signup/copi......
  • xdoj-指针类别 题目及参考答案
    目录写在前面220题目参考答案231题目参考答案232题目参考答案233题目参考答案235题目参考答案236题目参考答案237题目参考答案470题目参考答案536题目参考答案561题目参考答案660题目参考答案661题目参考答案662题目参考答案663题......
  • GitHub Copilot 免费了,程序员的福音到了
    最近,GitHub宣布了一个让全球开发者都兴奋的消息:GitHubCopilot现在可以免费使用了! 没错,就是那个曾经需要每月10美元订阅费的AI编程助手,现在终于向所有人开放了免费版本。这对于个人开发者、初学者和小型团队来说,绝对是个大好消息!不但支持GPT还支持ClaudeGPT4oCl......
  • P7302 [NOI1998] 免费的馅饼
    P7302[NOI1998]免费的馅饼题目描述SERKOI最新推出了一种叫做“免费馅饼”的游戏:游戏在一个舞台上进行。舞台的宽度为\(w\)格(从左到右依次用\(1\)到\(w\)编号),游戏者占一格。开始时游戏者可以站在舞台的任意位置,手里拿着一个托盘。下图为天幕的高度为\(4\)格时某一个时......
  • xdoj 数字个数统计
    1-3数字个数统计3时间限制:1S题目描述:输入两个三位正整数A和B,在区间[A,B]之间,或在区间[B,A]之间,完成统计任务:3的倍数数字个数、4的倍数数字个数和5的倍数且不是2的倍数的数字个数,并求出各统计数字两两之间余数的最大值(提示:注意求余时被除数和除数的顺序)。输......
  • xdoj 数字个数统计
    1-2数字个数统计2时间限制:1S题目描述:一个正整数n(1<n<1000),在区间[n,n2](含端点)内统计奇数个数、偶数个数、能被4整除且不能被3整除的数字个数,并求出各统计数字两两之和的最大值。输入说明:输入一行,包含一个正整数n,范围为1<n<1000,输出说明:输出两行,第一行包含......
  • xdoj-666 M型升序排序
    题目/*题目:M形升序排序问题描述编写数程序对一个包含M×N个数据的一维数列,按照M字形升序排列任务。要求与说明:1.)按照M×N矩阵形式排序的M字形,正整数M、N分别表示矩阵的行数和列数。2.)矩阵各个元素均为10以内的个位正整数。输入格式第一行输入正整数M、N(......
  • copilot入门
    目录GitHubCopilot是一个人工智能编程助手,它可以在你编写代码时提供代码补全和建议。以下是一些使用GitHubCopilot的基本方法:安装:GitHubCopilot通常作为VisualStudioCode(VSCode)的扩展提供。你需要安装VSCode并从市场中添加Copilot扩展。确保你有一个......
  • 好消息,在 Visual Studio 中可以免费使用 GitHub Copilot 了!
    前言今天大姚给大家分享一个好消息,GitHubCopilot可以免费使用了!在此之前若开发者要使用GitHubCopilot需要付费订阅,每月订阅费用起步价为10美元,而经过验证的学生、教师和开源项目维护者则可以申请免费使用。今天咱们一起来看看在VisualStudio使用GitHubCopilot......