• PAT (Advanced Level) Practise 1002 解题报告



    GitHub
    markdownPDF


    问题描述

    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, and each line contains the information of a polynomial: K N1 aN1 N2 aN2 ... NK aNK, where K is the number of nonzero terms in the polynomial, Ni and aNi (i=1, 2, ..., K) are the exponents and coefficients, respectively. It is given that 1 <= K <= 10,0 <= NK < ... < N2 < N1 <=1000.
    Output
    For each test case you should output the sum of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate to 1 decimal place.
    Sample Input
    2 1 2.4 0 3.2
    2 2 1.5 1 0.5
    Sample Output
    3 2 1.5 1 2.9 0 3.2

    大意是:

    多项式加法

    共两行输入数据,每行输入数据包括:K N1 aN1 N2 aN2 ... NK aNK,其中K是在多项式非零项的数量,Ni和aNi分别是指数和系数。

    1<=K<=10,0<=NK<... < N2 < N1<=1000.


    解题思路

    1. 数组下标作为次数,数值存储系数和;
    2. 边读入边计算最终非零项个数。

    注意点:

    1. 系数和为0的项不计算在内;
    2. 输出结果不能有多余空格。

    代码

    错误版本

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int main()
    {
      int i,j,n,m,s,t;
      float a[1001],k;
      memset(a,0,sizeof(a));
      cin>>n;
      for (i=0;i<n;i++)
      {
        cin>>j>>k;
        a[j]=k;
      }
      t=n;
      cin>>n;
      for (i=0;i<n;i++)
      {
        cin>>j>>k;
        if (a[j]==0) t++; 
        a[j]+=k;
        if (a[j]==0) t--;
      }
      cout<<t<<' ';
      n=t; 
      t=0;
      for (i=1000;i>=0;i--)
      {
        if (a[i]!=0)
        {
            if (t<n)
            {
              printf("%d %.1f ",i,a[i]);
              t++;
            }
            else printf("%d %.1f",i,a[i]);
        }
      }
      return 0;
    } 
    

    评测结果为全部格式错误。经过检查,防止最后多出空格的做法错了 不应该偷懒。。t的初始值应该设为1,或改变if的判断条件。

    正确版本(用了更简便的输出)

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int main()
    {
      int i,j,n,m,s,t;
      float a[1001],k;
      memset(a,0,sizeof(a));
      cin>>n;
      for (i=0;i<n;i++)
      {
        cin>>j>>k;
        a[j]=k;
      }
      t=n;
      cin>>n;
      for (i=0;i<n;i++)
      {
        cin>>j>>k;
        if (a[j]==0) t++; 
        a[j]+=k;
        if (a[j]==0) t--;
      }
      cout<<t;
      for (i=1000;i>=0;i--)
      if (a[i]!=0) printf(" %d %.1f",i,a[i]);
      return 0;
    } 
    

    提交记录

    错误版本

    此处输入图片的描述

    修改后

    此处输入图片的描述

  • 相关阅读:
    faster with MyISAM tables than with InnoDB or NDB tables
    w-BIG TABLE 1-toSMALLtable @-toMEMORY
    Indexing and Hashing
    MEMORY Storage Engine MEMORY Tables TEMPORARY TABLE max_heap_table_size
    controlling the variance of request response times and not just worrying about maximizing queries per second
    Variance
    Population Mean
    12.162s 1805.867s
    situations where MyISAM will be faster than InnoDB
    1920.154s 0.309s 30817
  • 原文地址:https://www.cnblogs.com/S031602240/p/6354108.html
Copyright © 2020-2023  润新知