强化阶段 Day 3 算法笔记 3.1简单模拟(3)

目录

1.A+B for Polynomials

2.Product of Polynomials


1.A+B for Polynomials

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

int main(){
	
	int n,m;
	double p[1002]={0};
	int x;
	double y;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d %lf",&x,&y);
		p[x] = y;
	}
	scanf("%d",&m);
	for(int i=0;i<m;i++){
		scanf("%d %lf",&x,&y);
		p[x]+=y;
	}
	
	int ans[21]={0},num=0;
	for(int i=0;i<1002;i++){
		if(p[i]!=0){
			ans[num++] = i;
		}
	}
	
	printf("%d",num);
	for(int i=num-1;i>=0;i--){
		int index = ans[i];
		printf(" %d %.1lf",index,p[index]);
	}

	return 0;
}

2.Product of Polynomials

要注意一下两个变量的范围。

第一个是最终多项式的长度,最多为20个,开一个长度为22的数组

第二个是指数的范围,也就是多项式数组的大小,最小也要2000,开个2002的数组

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

int main(){
	
	double p[2002],ans[2002]={0};
	int n;
	int x;
	double y;
	int index[20],num=0;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d %lf",&x,&y);
		p[x]=y;
		index[num++]=x;
	}
	
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d %lf",&x,&y);
		for(int j=0;j<num;j++){
			int a = index[j];
			ans[a+x] += p[a]*y;
		}
	}
	
	int count=0,index2[20];
	for(int i=2001;i>=0;i--){
		if(ans[i]!=0){
			index2[count++] = i;
		}
	}
	printf("%d",count);
	for(int i=0;i<count;i++){
		printf(" %d %.1lf",index2[i],ans[index2[i]]);
	}
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/aixiaoxiao13/article/details/121729108