PAT甲级练习1002

1002. A+B for Polynomials (25)

输入:两个多项式,第1个多项式在第1行,第2个在第2行,格式形如

多项式项数 指数N1 系数an1 指数N2 系数an2 ... (K取值范围[1,10],指数Ni取值范围[0, 1000],题目保证指数的输入是递减的,即N(i-1)<N(i))

输出:两个多项式的和,格式和输入时候一样。

# define _CRT_SECURE_NO_WARNINGS

# include <iostream>
# include <string>
# include <sstream>
# include <vector>
# include <algorithm>
# include <functional>
# include <iomanip>
# include <ctime>
# include <map>
# include <math.h>
# include <string.h>

using namespace std;

bool com1(int a, int b)
{
    return a >= b;
}

int main(void)
{
    int K1, K2;
    int numOfX;
    double num;

    int i = 0;
    int cnt;                    //出现过的指数个数
    int aCnt;                    //实际输出个数

    double numX[1001];            //指数范围[0,1000],所以用该数组记录
    int headX[20];                //记录出现过的指数

    memset(numX, 0, 1001*sizeof(double));

    cin >> K1;
    for (i = 0; i < K1; i++)
    {
        cin >> numOfX >> num;
        headX[i] = numOfX;
        numX[numOfX] += num;
    }

    cnt = i;
    aCnt = i;
    cin >> K2;
    for (i = 0; i < K2; i++)
    {
        cin >> numOfX >> num;
        if (numX[numOfX] == 0)            //若该数为0,说明该指数没有出现过
        {
            headX[cnt++] = numOfX;
            aCnt++;
        }
        numX[numOfX] += num;            //计算过后,若该数为0,则该指数不会被输出
        if (numX[numOfX] == 0)
            aCnt--;
    }

    sort(headX, headX+cnt, com1);        //对出现过的指数排列
//    qSort(headX, 0, cnt - 1, com1);

    /*                                    //原本认为当两式子抵消之后,输出会是
    if (aCnt == 0)                        //这个样子的,但实际上,只需要输出aCnt就可以了。
        cout << "0 0 0.0" << endl;        //这样输出最后1个测试点不能通过。
    else
    */
    {
        cout << aCnt;
        for (i = 0; i < cnt; i++)
        {
            if (numX[headX[i]] != 0)
                printf(" %d %.1lf", headX[i], numX[headX[i]]);
        }
        cout << endl;
    }

    return 0;
}
时间: 2024-10-11 00:05:35

PAT甲级练习1002的相关文章

PAT甲级1005 Spell It Right

题目:PAT甲级 1005 题解:水题.看到题目的第一时间就在想一位一位的mod,最后一加一转换就完事了.结果看到了N最大为10的100的次方,吓得我赶紧放弃这个想法... 发现碰到这种情况用字符串十分好用,这道题应该考察的就是这一点.大致思路就是把数字的每一位放到字符串中,然后通过ASCII码得到每一位的相加结果num,然后把num一位一位的放到stack中,使用stack是因为它先进先出的特性,最后输出就行了. 代码: 1 #include<cstdio> 2 #include<qu

PAT甲级考前整理

终于在考前,刷完PAT甲级130道题目,不容易!!!每天沉迷在刷题之中而不能超脱,也是一种境界.PAT甲级题目总的说卡题目的比较多,卡测试点的比较少,有些题目还会有题意混淆,这点就不吐槽了吧.静下心来耍这130道题,其实磨练的是一种态度与手感,养成的是一种习惯.热爱AC没有错!! 130道题目主要的考点: 1.排序:快速排序,直接插入排序,希尔排序,分治排序,堆排序. 2.图论:拓扑排序.最短路径.深度搜索.广度搜索. 3.树:树的遍历.完全二叉树.AVL. 4.其他:并查集,模拟,哈希.背包.

PAT甲级考试题库1001 A+B Format 代码实现及相关知识学习

准备参加九年九月份的PAT甲级证书考试,对网站上的题目进行总结分析: 1001题 A+B Format (20 分) Calculate a+b and output the sum in standard format -- that is, the digits must be separated into groups of three by commas (unless there are less than four digits). 计算a+b的值并以一定格式输出其和sum(数字需要

PAT甲级专题|最短路

PAT甲级最短路 主要算法:dijkstra 求最短最长路.dfs图论搜索. 1018,dijkstra记录路径 + dfs搜索路径最值 25分,错误点暂时找不出.. 如果只用dijkstra没法做,只能得20分 #include<bits/stdc++.h> using namespace std; const int inf = 0x3f3f3f3f; const int maxn = 510; int cmax,n,ter,m; int caps[maxn]; int g[maxn][m

【PAT甲级】1070 Mooncake (25 分)(贪心水中水)

题意: 输入两个正整数N和M(存疑M是否为整数,N<=1000,M<=500)表示月饼的种数和市场对于月饼的最大需求,接着输入N个正整数表示某种月饼的库存,再输入N个正数表示某种月饼库存全部出手的利润.输出最大利润. trick: 测试点2可能包含M不为整数的数据.(尽管题面说明M是正整数,可是根据从前PAT甲级题目的经验,有可能不是整数.....) 代码: #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using names

PAT 甲级1002 A+B for Polynomials (25)

1002. A+B for Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue This time, you are supposed to find A+B where A and B are two polynomials. Input Each input file contains one test case. Each case occupies 2 lines, an

PAT甲级1002 链表实现方法

题目: 1002. A+B for Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue This time, you are supposed to find A+B where A and B are two polynomials. Input Each input file contains one test case. Each case occupies 2 lines

PAT甲级1002.A+B for Polynomials (25)

题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805526272000000 解题思路: 由于是求两个多项式之和,并且多项式的指数是从大到小进行排列的,相加时有合并和消除的操作 因此选用了较为灵活的链表结构,将输入的第一个多项式使用链表存储起来,将第二个多项式的项依次输入, 对于加数每个项和被加数的每项的指数进行比较,如果大于其指数则插入在其前面,如果小于其指数,则比较 被加数的后一项,如果等于其指数,则将两

PAT甲级1002水题飘过

1 #include<iostream> 2 #include<string.h> 3 using namespace std; 4 5 double a[1005]; 6 7 int main(){ 8 int n1, n2; 9 while(scanf("%d", &n1) != EOF){ 10 memset(a, 0, sizeof(a)); 11 for(int i = 1; i <= n1; i++){ 12 int x; 13 dou