链接:https://ac.nowcoder.com/acm/contest/160/C
来源:牛客网

多项式
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
求\lim\limits_{x\to +\infty}\frac{f(x)}{g(x)}
x→+∞
lim

g(x)
f(x)

,其中f和g是关于x的多项式。
输入描述:
两行,第一行为f,第二行为g。
f和g都用一个由小括号 '(' 和 ')' 、加号 '+' 、乘号 '' 、 'x' 组成的表达式表示,表达式的语法与通常的习惯相同。
保证表达式的长度不超过1000。
输出描述:
若答案为整数x,输出x/1,答案为+\infty∞,输出1/0,否则输出表示答案的最简分数a/b。
示例1
输入
复制
x+x
x+(x+x)
输出
复制
2/3
示例2
输入
复制
x
(x+x+xx+xx)
x+(x+x)(x+x+x)
输出
复制
1/0
示例3
输入
复制
x
x
(x(x)+x)(((x+x)))*x
输出
复制
0/1

题意:

思路:

我们在高等数学的知识里知道,当x取无穷大时,分式的值在与分子和分母的最高次幂项有关,其他均是最高次幂项的等价无穷小。

如果分子分母的最高次幂相等,那么分式取极限的值就是分子和分母最高次幂的系数比例,记得取gcd。

否则,如果分子的最高次幂大于分母的,那么 分式取极限的值 是无穷大, 最高次幂小于分母的最高次幂就是0。

会爆ll,要用大数。

细节见代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define ALL(x) (x).begin(), (x).end()
#define dll(x) scanf("%I64d",&x)
#define xll(x) printf("%I64d\n",x)
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define eps 1e-6
#define gg(x) getInt(&x)
#define chu(x) cout<<"["<<#x<<" "<<(x)<<"]"<<endl
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
ll powmod(ll a,ll b,ll MOD){ll ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
inline void getInt(int* p);
const int maxn=1000010;
const int inf=0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/
int ten[4] = {1,10,100,1000};
const int MAXN=1200;
typedef struct BigNumber
{int d[MAXN];BigNumber(string s){int i, j, k, len;len = s.size();d[0] = (len-1)/4+1;for(i=1;i<MAXN;i++)d[i] = 0;for(i=len-1;i>=0;i--){j = (len-i-1)/4+1;k = (len-i-1)%4;d[j] += ten[k]*(s[i]-'0');}while(d[0]>1 && d[d[0]]==0)--d[0];}BigNumber(){*this = BigNumber(string("0"));}string toString(){int i, j, temp;string s("");for(i=3;i>=1;i--){if(d[d[0]]>=ten[i])break;}temp = d[d[0]];for(j=i;j>=0;j--){s = s+(char)(temp/ten[j]+'0');temp %= ten[j];}for(i=d[0]-1;i>0;i--){temp = d[i];for(j=3;j>=0;j--){s = s+(char)(temp/ten[j]+'0');temp %= ten[j];}}return s;}
}BigNumber;
BigNumber zero("0"), d, temp, mid[15];
bool operator < (const BigNumber &a, const BigNumber &b)
{int i;if(a.d[0]!=b.d[0])return a.d[0]<b.d[0];for(i=a.d[0];i>0;i--){if(a.d[i]!=b.d[i])return a.d[i]<b.d[i];}return 0;
}
bool operator > (const BigNumber &a, const BigNumber &b)
{int i;if(a.d[0]!=b.d[0])return a.d[0]>b.d[0];for(i=a.d[0];i>0;i--){if(a.d[i]!=b.d[i])return a.d[i]>b.d[i];}return 0;
}
bool operator == (const BigNumber &a, const BigNumber &b)
{int i;if(a.d[0]!=b.d[0])return 0;for(i=a.d[0];i>0;i--){if(a.d[i]!=b.d[i])return 0;}return 1;
}
BigNumber operator + (const BigNumber &a, const BigNumber &b)
{int i, x;BigNumber c;c.d[0] = max(a.d[0], b.d[0]);x = 0;for(i=1;i<=c.d[0];i++){x = a.d[i]+b.d[i]+x;c.d[i] = x%10000;x /= 10000;}while(x!=0){c.d[++c.d[0]] = x%10000;x /= 10000;}return c;
}
BigNumber operator - (const BigNumber &a, const BigNumber &b)
{int i, x;BigNumber c;c.d[0] = a.d[0];x = 0;for(i=1;i<=c.d[0];i++){x = 10000+a.d[i]-b.d[i]+x;c.d[i] = x%10000;x = x/10000-1;}while((c.d[0]>1) && (c.d[c.d[0]]==0))--c.d[0];return c;
}
BigNumber operator * (const BigNumber &a, const BigNumber &b)
{int i, j, x;BigNumber c;c.d[0] = a.d[0]+b.d[0];for(i=1;i<=a.d[0];i++){x = 0;for(j=1;j<=b.d[0];j++){x = a.d[i]*b.d[j]+x+c.d[i+j-1];c.d[i+j-1] = x%10000;x /= 10000;}c.d[i+b.d[0]] = x;}while((c.d[0]>1) && (c.d[c.d[0]]==0))--c.d[0];return c;
}
bool smaller(const BigNumber &a, const BigNumber &b, int delta)
{int i;if(a.d[0]+delta!=b.d[0])return a.d[0]+delta<b.d[0];for(i=a.d[0];i>0;i--){if(a.d[i]!=b.d[i+delta])return a.d[i]<b.d[i+delta];}return 1;
}
void Minus(BigNumber &a, const BigNumber &b, int delta)
{int i, x;x = 0;for(i=1;i<=a.d[0]-delta;i++){x = 10000+a.d[i+delta]-b.d[i]+x;a.d[i+delta] = x%10000;x = x/10000-1;}while((a.d[0]>1) && (a.d[a.d[0]]==0))--a.d[0];
}
BigNumber operator * (const BigNumber &a, int k)
{BigNumber c;c.d[0] = a.d[0];int i, x;x = 0;for(i=1;i<=a.d[0];i++){x = a.d[i]*k+x;c.d[i] = x%10000;x /= 10000;}while(x>0){c.d[++c.d[0]] = x%10000;x /= 10000;}while((c.d[0]>1) && (c.d[c.d[0]]==0))--c.d[0];return c;
}
BigNumber operator / (const BigNumber &a, const BigNumber &b)
{int i, j, temp;BigNumber c;d = a;mid[0] = b;for(i=1;i<=13;i++)mid[i] = mid[i-1]*2;for(i=a.d[0]-b.d[0];i>=0;i--){temp = 8192;for(j=13;j>=0;j--){if(smaller(mid[j], d, i)){Minus(d, mid[j], i);c.d[i+1] += temp;}temp /= 2;}}c.d[0] = max(1, a.d[0]-b.d[0]+1);while((c.d[0]>1) && (c.d[c.d[0]]==0))--c.d[0];return c;
}
BigNumber Gcd(const BigNumber &a, const BigNumber &b)
{BigNumber c("0");if(b==c)return a;c = a-a/b*b;return Gcd(b, c);
}string str1;
string str2;struct res
{BigNumber A,C;res operator + (const res & b) const{res temp=b;if(temp.C==C){temp.A=temp.A+A;}else if(temp.C<C){temp.C=C;temp.A=A;}return temp;}res operator * (const res & b)const{res temp;temp.C=C+b.C;temp.A=A*b.A;return temp;}
};
res Gao(int l,int r)
{if(l==r){res t;t.A=BigNumber("1");t.C=BigNumber("1");return t;}else{int now=0;for(int i=l;i<=r;++i){if(str1[i]=='('){now++;}if(str1[i]==')'){now--;}if(now==0&&str1[i]=='+'){return Gao(l,i-1)+Gao(i+1,r);}}for(int i=l;i<=r;++i){if(str1[i]=='('){now++;}if(str1[i]==')'){now--;}if(now==0&&str1[i]=='*'){return Gao(l,i-1)*Gao(i+1,r);}}return Gao(l+1,r-1);}
}
res solve()
{int len=str1.length();return Gao(0,len-1);
}
int main()
{//freopen("D:\\common_text\\code_stream\\in.txt","r",stdin);//freopen("D:\\common_text\\code_stream\\out.txt","w",stdout);gbtb;cin>>str1;res r1=solve();cin>>str1;res r2=solve();if(r1.C>r2.C){cout<<"1/0"<<endl;}else if(r1.C<r2.C){cout<<"0/1"<<endl;}else{BigNumber g=Gcd(r1.A,r2.A);cout<<(r1.A/g).toString()<<"/"<<(r2.A/g).toString()<<endl;}return 0;
}inline void getInt(int* p) {char ch;do {ch = getchar();} while (ch == ' ' || ch == '\n');if (ch == '-') {*p = -(getchar() - '0');while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 - ch + '0';}}else {*p = ch - '0';while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 + ch - '0';}}
}

转载于:https://www.cnblogs.com/qieqiemin/p/11287910.html

Wannafly挑战赛22 C 多项式(大数,多项式极限)相关推荐

  1. Wannafly挑战赛22游记

    Wannafly挑战赛22游记 幸运的人都是相似的,不幸的人各有各的不幸. --题记 A-计数器 题目大意: 有一个计数器,计数器的初始值为\(0\),每次操作你可以把计数器的值加上\(a_1,a_2 ...

  2. Wannafly挑战赛22: C. 多项式(大整数)

    题目描述 求,其中f和g是关于x的多项式. 输入描述: 两行,第一行为f,第二行为g. f和g都用一个由小括号 '(' 和 ')' .加号 '+' .乘号 '*' . 'x' 组成的表达式表示,表达式 ...

  3. [牛客网Wannafly挑战赛24F]wyf的超级多项式

    Description 已知 F i = ∑ j = 1 k a j v j i F_i=\sum_{j=1}^{k}a_jv_j^i Fi​=∑j=1k​aj​vji​ 给出 v 1.. k v1. ...

  4. Wannafly挑战赛22

    B. 字符路径 给一个含n个点m条边的有向无环图(允许重边,点用1到n的整数表示),每条边上有一个字符,问图上有几条路径满足路径上经过的边上的字符组成的的字符串去掉空格后以大写字母开头,句号 '.' ...

  5. Wannafly挑战赛22 D 整数序列 (线段树维护三角函数值)

    链接:https://ac.nowcoder.com/acm/contest/160/D 来源:牛客网 整数序列 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语 ...

  6. Wannafly挑战赛22 B 字符路径 ( 拓扑排序+dp )

    链接:https://ac.nowcoder.com/acm/contest/160/B 来源:牛客网 题目描述 给一个含n个点m条边的有向无环图(允许重边,点用1到n的整数表示),每条边上有一个字符 ...

  7. Wannafly挑战赛22:B. 字符路径

    题目描述 给一个含n个点m条边的有向无环图(允许重边,点用1到n的整数表示),每条边上有一个字符,问图上有几条路径满足路径上经过的边上的字符组成的的字符串去掉空格后以大写字母开头,句号 '.' 结尾, ...

  8. Wannafly挑战赛22 D-整数序列 (线段树)

    https://www.nowcoder.com/acm/contest/160/D 做法:用线段树维护,对于树上的每个叶子结点,维护一个复数结构体 cos(a[i] + sin(a[i])*i ,每 ...

  9. Wannafly挑战赛24

    Wannafly挑战赛24 题目连接 https://www.nowcoder.com/acm/contest/186#question A.石子游戏 题解 注意到当石子个数为偶数的时候,每回合都会减 ...

最新文章

  1. java中的各种流(老师的有道云笔记)
  2. .tex类型文件怎么阅读_TeX + Markdown = ?
  3. 注意!FOB条款下,发货人还有这些费用要承担?
  4. 在50亿信息泄露事件面前,Struts 2 漏洞和CIA泄密都是小事 | 宅客周刊
  5. NVisionXR_iOS教程三 —— NVisionXR渲染一个立方体
  6. java 手动事务回滚_JAVA设置手动提交事务,回滚事务,提交事务的操作
  7. 卷积神经网络结构_卷积神经网络
  8. python能做页面加载动画吗_HTML+CSS实现页面加载(loading)动画效果
  9. Python/Java程序员面试必备常用问题解析与答案
  10. TurboMail邮件服务器推动邮件领域的进一步发展
  11. 数据驱动在链家网搜索优化与推荐策略中的实践
  12. Java核心技术卷1基础知识课程-专题视频课程
  13. 最新的SAS SID 2023可用至2023年1月SAS 9.4 SID续订更新sas sid 2022服务器通用版server
  14. html中引入的图标库,动态引入阿里图标库
  15. 解决Svn图标不显示或者显示异常(亲测有效)
  16. 关于mybatis整合spring时报java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/Trasactionwar
  17. java 微信隐藏右上角_不懂这11个隐藏技巧,别说你会用微信
  18. Apache Hudi调研小记
  19. 二维码技术在证卡上的应用
  20. MVC ViewData和ViewBag

热门文章

  1. Windows下使用python库 curses遇到错误消息的解决方案
  2. 用ABAP 生成二维码 QR Code
  3. mysql中需要提交的操作_MySQL常用操作及基础知识
  4. 软件测试c语言代码_软件测试理论知多少?
  5. 整数转罗马数字Python解法
  6. mysql.createpool_Node.js MySQL模块中mysql.createConnection和mysql.createPool有什么区别?
  7. python中的垃圾回收机制_python里面的垃圾回收机制
  8. 软件测试师具备的素质_软件测试工程师有哪些需要具备的能力呢
  9. 微型计算机原理课程设计计算器,微机原理课程设计简易计算器的设计.docx
  10. 列宽一字符等于多少厘米_字符串匹配算法总结——BF、KMP、BM