题目自行查看浙大PTA 甲级(English)1009,我将它和PTA 甲级 1002 归为一类,1002题解在博文已给出 这种方法的优点是逻辑清晰,但时间复杂度较大,为O(n*n),n=1000是边界条件,考虑到一般OJ一秒处理能力在2E+8这个数量级,处理时间实际少于5ms,包含程序其余部分应该为3-8ms左右,完全符合要求。(实际是测试点0-3 4ms,测试点4 8ms) 该解法总体耗时更短,原因在于它将乘法操作作用与整个数组改为了作用于不为零的有效值,虽然时间复杂度也为O(n*n),但这里的大O表示法显示的变化趋势是由更小的K(<=10)引起的。
1009 Product of Polynomials (25分)
题目为简单模拟,难度不大,此处提供两种思路,编译器是g++ 6.5.0,C++编译器,头文件包含cstdio(不推荐写stdio.h)
个人擅长用C解题,过程中习惯用scanf和printf而不是cin 和 cout(速度上前两者快得多) 题解1
#include <cstdio> double a1[1001],a2[1001],a3[2001]; int main() { int k,n,count = 0; double a; scanf("%d", &k); for(int i = 0;i < k;i++) { scanf("%d%lf", &n, &a); a1[n] += a; } scanf("%d", &k); for(int i = 0;i < k;i++) { scanf("%d%lf", &n, &a); a2[n] += a; } for(int i = 0;i < 1001;i++) { for(int j = 0;j < 1001;j++) { a3[i+j] += a1[i]*a2[j]; } } for(int i = 0;i < 2001;i++) if(a3[i] != 0) ++count; printf("%d", count); for(int i = 2000;i >= 0 && count;i--) // 加入count判断可以减少count为0时的时间 if(a3[i]) printf(" %d %.1f",i,a3[i]); return 0; }
这是我比较欣赏的题解2
#include <cstdio> struct Poly{ int exp; double cof; }poly[10]; double ans[2001]; int main() { int n,m,exp,count = 0; double cof; scanf("%d", &n); for(int i = 0;i < n;i++) scanf("%d%lf", &poly[i].exp, &poly[i].cof); scanf("%d", &m); for(int i = 0;i < m;i++) { scanf("%d%lf", &exp, &cof); for(int j = 0;j < n;j++) ans[exp+poly[j].exp] += cof*poly[j].cof; } for(int i = 0;i < 2001;i++) if(ans[i]) ++count; printf("%d", count); for(int i = 2000;i >= 0 && count;i--) if(ans[i]) printf(" %d %.1f", i, ans[i]); return 0; }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算