PAT 甲级测试题目 -- 1009 Product of Polynomials

题目链接
这题占个坑吧。。。我用了两种思路,一种将保存结果的数组初始化为 0,把乘积加上去,顺便记录下最后一个指数的值。用两次 2000 次 for 循环过滤掉 0 值以及输出答案,这个代码过了,但是后期测试的时候,有些测试用例会多出来空格,有些则格式不对。。但是过了。。。
代码如下

#include<iostream>
#include<stdio.h>
using namespace std;
int main() {
    double A[1001], B[1001];
    int ExpA[11], ExpB[11];
    double Result[2001];
    double coe;
    int Acounts, Bcounts, exp, EndIndex = 0;

    // 初始化多项式

    for (int i = 0; i < 1001; i++) {
        A[i] = B[i] = 0;
    }
    for (int i = 0; i < 2001; i++) {
        Result[i] = 0;
    }

    cin >> Acounts;
    for (int i = 0; i < Acounts; i++) {
        cin >> exp >> coe;
        ExpA[i] = exp;
        A[exp] = coe;
    }
    cin >> Bcounts;
    for (int i = 0; i < Bcounts; i++) {
        cin >> exp >> coe;
        ExpB[i] = exp;
        B[exp] = coe;
    }

    for (int i = 0; i < Acounts; i++) {
        for (int j = 0; j < Bcounts; j++) {
            //cout << "=====================" << endl;
            //cout << "Result[ExpA[i] + ExpB[j]] = " << Result[ExpA[i] + ExpB[j]] << endl;
            Result[ExpA[i] + ExpB[j]] += A[ExpA[i]] * B[ExpB[j]];
            //cout << "A[ExpA[i]] * B[ExpB[j]] = " << A[ExpA[i]] * B[ExpB[j]] << endl;
            //cout << "Result[ExpA[i] + ExpB[j]] = " << Result[ExpA[i] + ExpB[j]] << endl;
            //cout << "=====================" << endl;
            EndIndex = ExpA[i] + ExpB[j];
        }
    }

    int AllResCount = 0;

    for (int i = 2000; i >= 0; i--) {
        if (Result[i] != 0) {
            AllResCount++;
        }

    }

    cout << AllResCount << " ";
    for (int i = 2000; i >= 0; i--) {
        if (Result[i] != 0) {
            printf("%d %.1f", i, Result[i]);
            if (i != EndIndex)
                cout << " ";

        }

    }

    return 0;
}

另外一种思路是将保存结果的数组初始化为 -1 ,边计算多项式边记录非零多项式的项数,最后输出答案,测试点 0 答案错误。。。我百度了好久,好多帖子指出是跟系数为 0 有关,我自己做了几个系数为 0 测试用例,测试结果和我在纸上计算的答案一致,包括格式也正确,我实在弄不懂了。。。代码如下:

#include<iostream>
#include<stdio.h>
using namespace std;
int main() {
    double A[1001], B[1001];
    int ExpA[11], ExpB[11], ItemIndex[10];
    double Result[2001];
    double coe;
    int Acounts, Bcounts, exp, ResCounts = 0;

    // 初始化多项式

    for (int i = 0; i < 1001; i++) {
        A[i] = B[i] = -1;
    }
    for (int i = 0; i < 2001; i++) {
        Result[i] = -1;
    }

    cin >> Acounts;
    for (int i = 0; i < Acounts; i++) {
        cin >> exp >> coe;
        ExpA[i] = exp;
        A[exp] = coe;
    }
    cin >> Bcounts;
    for (int i = 0; i < Bcounts; i++) {
        cin >> exp >> coe;
        ExpB[i] = exp;
        B[exp] = coe;
    }

    int indexCount = 0;
    for (int i = 0; i < Acounts; i++) {
        for (int j = 0; j < Bcounts; j++) {
            if (Result[ExpA[i] + ExpB[j]] == -1) {
                Result[ExpA[i] + ExpB[j]] = A[ExpA[i]] * B[ExpB[j]];

                if (Result[ExpA[i] + ExpB[j]] != 0) {
                    ResCounts++;
                }
            }
            else {
                if (Result[ExpA[i] + ExpB[j]] == 0 && A[ExpA[i]] * B[ExpB[j]] != 0)
                    ResCounts++;
                Result[ExpA[i] + ExpB[j]] += A[ExpA[i]] * B[ExpB[j]];
            }

        }
    }

    cout << ResCounts << " ";
    for (int i = 2000; i >= 0; i--) {

        if (Result[i] != -1 && Result[i] != 0) {
            ResCounts--;
            //cout << "----" << ResCounts << "----" << endl;
            printf("%d %.1f", i, Result[i]);
            if (ResCounts != 0)
                printf(" ");
        }
    }

    return 0;
}

希望有大佬可以指出错误QAQ

原文地址:https://www.cnblogs.com/Breathmint/p/10283356.html

时间: 2024-11-08 13:30:39

PAT 甲级测试题目 -- 1009 Product of Polynomials的相关文章

PAT 甲级测试题目 -- 1010 Radix

题目链接 题目描述 给你两个数以及其中一个数的基数(进制数),找出另一个数的基数,找不到就输出 Impassible 分析 思路不是很难,基本可以用进制转换加循环判断做,但是有坑... 坑1:上界不是36....上界是确定的那个数的十进制加 1 . 坑2:暴力循环会导致时间超限,用二分法解决 坑3:二分过程中会有数据溢出,得到的负数处理方式和找到较大数处理方式一样,因为溢出的数和题目条件不符,所以可以舍弃. 实现 #include<iostream> #include<string.h&

PAT 甲级测试题目 -- 1012 The Best Rank

题目链接 题目描述 输入小于等于 2000 的数据 N,M,分别表示 学生的总数 和 查询学生的数量 输入 N 个学生的六位数 id 以及 C,M,E 三科成绩.输入 M 个查询学生的 id. 要求输出: 若被查询的 id 不存在,输出 N/A 若被查询的 id 存在,输出 C,M,E,A(average 平均分) 四个成绩中排名最高的排名,以及对应的分数类型(C, M, E, A).若有多余一个类型的分数相同,则按照 A > C > M > E 的优先序列输出 排名 和 分数类型 分析

PAT 甲级测试题目 -- 1013 Battle Over Cities

题目链接 题目描述 ??给你城市的数量 N(N<1000),城市中地铁的数量 M 以及 被可能占领的城市数量 K(每一次只占领一个城市,并且每次占领的城市不一样),接下来的 M 行根据地铁的数量给出每个地铁连接的两个城市编号.最后一行给你被占领的城市序列.城市编号为 1 到 N,请你求出若某个城市被占领了,连通剩下城市所需要修建的地铁个数. 分析 ??该题考察图的存储以及遍历.本题的难点在于把 "需要维修多少个地铁" 这个问题转换成 "需要多少次 dfs 才能遍历完整个

pat 甲级测试题目 -- 1016 Phone Bills

题目链接 题目描述 要求计算银行账单. 输入 第一行给你一天24小时(00:00~01:00 ...)每个小时每分钟的话费,单位是美分 第二行给你顾客列表(N 个) 接下来的 N 行是顾客的账单详情 CYLL 01:01:06:01 on-line 姓名 月:日:小时:分钟 状态 CYLL 01:28:16:05 off-line 姓名 月:日:小时:分钟 状态 on-line 和 off-line 必须一一对应该记录才有效 输出 对于输入有效的顾客,给出该顾客这个月的账单,格式如下 CYJJ

PAT甲题题解-1009. Product of Polynomials (25)-多项式相乘

多项式相乘 注意相乘结果的多项式要开两倍的大小!!! #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <string.h> using namespace std; //两个多项式相乘 const int maxn=1000+5; int k; //原本定义个exp导致编译错误,没想到定义成exp1.exp2也会编译错误,

1009. Product of Polynomials (25)——PAT (Advanced Level) Practise

题目信息: 1009. Product of Polynomials (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue This time, you are supposed to find A*B where A and B are two polynomials. Input Specification: Each input file contains one test case. Each c

PAT 1009. Product of Polynomials (25)

1009. Product of Polynomials (25) This time, you are supposed to find A*B where A and B are two polynomials. Input Specification: Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomi

[PTA] PAT(A) 1009 Product of Polynomials (25 分)

目录 Problem Description Input Output Sample Sample Input Sample Output Solution Analysis Code Result Problem portal:1009 Product of Polynomials Description Input Output Sample Sample Input Sample Output Solution Analysis Code #include <bits/stdc++.h>

PTA 甲 1009 Product of Polynomials

目录 1009 Product of Polynomials 题目原题 Input Specification: Output Specification: Sample Input: Sample Output: 注意点: 一开始的代码 改进后如下 1009 Product of Polynomials 题目原题 This time, you are supposed to find A×B where A and B are two polynomials. Input Specificat