日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二元多项式

發(fā)布時(shí)間:2023/12/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二元多项式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

二元多項(xiàng)式

Time Limit:?1000MS?Memory Limit:?65536KB Submit?Statistic?Discuss

Problem Description

給你多個(gè)二元多項(xiàng)式和一個(gè)操作符,讓你輸出操作符操作這些二元多項(xiàng)式之后的結(jié)果。

Input

首先輸入二元多項(xiàng)式的個(gè)數(shù)n和操作符號(hào)(‘+’,‘*’);

后面n行輸入每一個(gè)多項(xiàng)式。

多組輸入,當(dāng)n=0的時(shí)候結(jié)束輸入。

(n<5,二元多項(xiàng)式的長度小于1000,二元多項(xiàng)式都是由x,y,^,數(shù)字,’+’組成的)

Output

輸出操作之后的結(jié)果。

(輸出的順序按照:x^2>x>xy^2>xy>y^2>y>常數(shù))

Example Input

2 + 3x+4y^2+3xy+6x^10y^2+1 2x+6y 0

Example Output

6x^10y^2+5x+3xy+4y^2+6y+1

Hint


沒錯(cuò),好的代碼是需要細(xì)細(xì)品味噠qwq,小金橘的代碼

這其實(shí)是一個(gè)大模擬,期中的坑點(diǎn)也是非常多,需要很細(xì)心,考慮全面

#include<cstdio> #include<algorithm> #include<cstring> #include<cctype> #include<vector> using namespace std;const int maxn=5000; char arr[maxn];int getnum(int &i){int val=0;while(isdigit(arr[i])){val*=10;val+=arr[i]-'0';i++;}return val; }int getclo(int &str,char c){int ret=0;if(arr[str]==c){str++;if(arr[str]=='^'){str++;ret=getnum(str);}elseret=1;}return ret; }void itout(int m,char c){if(m!=0){if(m==1)printf("%c",c);elseprintf("%c^%d",c,m);} }struct item{int x,y;int v;item(int _v=0,int _x=0,int _y=0){v=_v,x=_x,y=_y;}void init(int &str){v=getnum(str);x=getclo(str,'x');y=getclo(str,'y');if(v==0 && (x!=0||y!=0)) v=1;}void out(){printf(v==1 && (x||y)?"":"%d",v);itout(x,'x');itout(y,'y');}bool operator < (const item &k) const{if(x!=k.x)return x>k.x;if(abs(x-y)!=abs(k.x-k.y))return abs(x-y)>abs(k.x-k.y);return y<k.y;}bool operator == (const item &k) const{return x==k.x && y==k.y;}item operator * (item c){c.v*=v;c.x+=x;c.y+=y;return c.v!=0?c:item(0,0,0);} };struct poly{vector<item> sorce;void init(int &str){sorce.clear();item temp;while(arr[str]){if(str!=0)str++;temp.init(str);sorce.push_back(temp);}sort(sorce.begin(),sorce.end());}void out(){for(int i=0;i<sorce.size();i++){sorce[i].out();printf(i<sorce.size()-1?"+":"\n");}}void uni(){sort(sorce.begin(),sorce.end());vector<item> tem=sorce;sorce.clear();for(int i=0;i<tem.size();i++){item &ed=sorce[sorce.size()-1];if(tem[i]==ed)ed.v+=tem[i].v;elsesorce.push_back(tem[i]);}} };poly add(poly a,poly b){poly ans=a;for(int i=0;i<b.sorce.size();i++)ans.sorce.push_back(b.sorce[i]);ans.uni();return ans; }poly muti(poly a,poly b){poly c;for(int i=0;i<a.sorce.size();i++)for(int j=0;j<b.sorce.size();j++)c.sorce.push_back(a.sorce[i]*b.sorce[j]);c.uni();return c; } int main(){int n;while(~scanf("%d",&n) && n){scanf("%s\n",arr);char c=arr[0];int t=0;scanf("%s",arr);poly ans;ans.init(t);poly temp;for(int i=1;i<n;i++){scanf("%s",arr);t=0;temp.init(t);if(c=='+')ans=add(ans,temp);elseans=muti(ans,temp);}ans.out();}return 0; }(⊙v⊙)


總結(jié)

以上是生活随笔為你收集整理的二元多项式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。