您的位置:首页 > 理论基础 > 数据结构算法

团体程序设计天梯赛-练习集-L2-018. 多项式A除以B

2017-03-26 16:37 316 查看
记录一个菜逼的成长。。

题目链接

不给数据范围。让我说什么好。。我还犹豫了半天要不要用数组。。

最后想了想,算了用数组暴力一发。。

结果就过了。。

就是两个循环;

第一重枚举a多项式的头

第二重进行计算

PS:大区赛时敲得代码。略丑。

#include <bits/stdc++.h>
using namespace std;
#define cl(a,b) memset(a,b,sizeof(a))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
typedef pair<int,int> PII;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const int maxn = 1000000 + 10;
double a[maxn],b[maxn],c[maxn];
int main()
{
int n,m;
int mxa ,mxb;
scanf("%d",&n);
for( int i = 0; i < n; i++ ){
int x;double v;
scanf("%d%lf",&x,&v);
a[x] = v;
if(!i)mxa = x;
}
scanf("%d",&m);
for( int i = 0; i < m; i++ ){
int x;double v;
scanf("%d%lf",&x,&v);
b[x] = v;
if(!i)mxb = x;
}
int limit = mxa - mxb + 1;
for( int j = mxa; j >= mxb; j-- ){
c[j-mxb] = a[j] / b[mxb];
for( int k = j,p = mxb; k >= j-mxb && p >= 0; k--,p-- ){
a[k] = a[k] - c[j-mxb] * b[p];
}
}
int ansc = 0;
for( int i = mxa - mxb; i >= 0; i-- ){
double tmp = (double)((int)(c[i] * 10 + (c[i] < 0? -0.5 : 0.5)))/10;
c[i] = tmp;
if(tmp != 0){
ansc++;
}
}
if(!ansc){
printf("0 0 0.0\n");
}
else {
printf("%d",ansc);
for( int i = mxa - mxb; i >= 0; i-- ){
if(c[i] != 0)printf(" %d %.1f",i,c[i]);
}
puts("");
}
int ans = 0;
for( int i = mxb - 1; i >= 0; i-- ){
double tmp = (double)((int)(a[i] * 10 + (a[i] < 0? -0.5 : 0.5)))/10;
a[i] = tmp;
if(tmp != 0)ans ++;
}
if(!ans){
printf("0 0 0.0\n");
}
else {
printf("%d",ans);
for( int i = mxb-1; i >= 0; i-- ){
if(a[i] != 0)printf(" %d %.1f",i,a[i]);
}
puts("");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cccc-gplt pat 数据结构