F - Fraction Formula Gym - 102307F
Mr. Potato Head has been promoted and now is a math professor at the UNAL.
For his first course he is willing to teach hard subjects, so at the moment he is teaching how to add and subtract fractions.
To complete his course the students have to do a long series of exercises, each exercise corresponds to a valid formula containing only additions and subtractions of fractions.
Formally a valid formula is one of the following:
- A fraction
- F1+F2F1+F2
- F1−F2F1−F2
- (F1)(F1)
where F1F1 and F2F2 are also valid formulas.
Mr. Potato Head knows that the exam would be impossible if fractions are too large or if they are negative, so he decides that for every fraction a/ba/b, 0≤a≤1000≤a≤100 and 0<b≤200<b≤20.
Can you pass the course of Mr. Potato Head?
Input
The input consists of several lines, each line contains a valid formula without spaces.
It is guaranteed that all lines contains valid formulas and the total number of characters in all formulas does not exceed 2∗1052∗105
Output
For each formula output a line with an irreducible fraction a/ba/b, b>0b>0 −− The solution of the corresponding formula
Example
1/2+1/3
1/5-2/10
1/2+(1/2-2/1)
5/6
0/1
-1/1
Note
A fraction is irreducible if its numerator and denominator do not have common divisors greater than 1
题解:只有加减法和括号的运算,可直接从前往后挨个计算,只需判断当前的符号是+或-即可.
#include <bits/stdc++.h>
#define met(a, b) memset(a, b, sizeof(a))
#define ll long long
#define ull unsigned long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
ll gcd(ll a,ll b){return b==?a:gcd(b,a%b);}
ll lcm(ll a,ll b){return a*b/gcd(a,b);}
typedef pair<ll,ll>P;
const int maxn=;
const double eps=1e-;
const double pi=acos(-);
char s[maxn];
int len;
P ans;
int f,ff;
P cal(P ans,P now)
{
ll son=ans.first*now.second+f*ff*now.first*ans.second;
ll mon=ans.second*now.second;
ll g=gcd(abs(son),abs(mon));
son/=g;
mon/=g;
return P(son,mon);
}
P ok(int pos)
{
ll son=,mon=,l=-;
for(int i=pos-;i>=;i--){
if(s[i]<''||s[i]>''){
l=i;
break;
}
}
for(int i=l+;i<len;i++){
if(s[i]>=''&&s[i]<='')son=son*+s[i]-'';
else break;
}
for(int i=pos+;i<len;i++){
if(s[i]>=''&&s[i]<='')mon=mon*+s[i]-'';
else break;
}
return P(son,mon);
}
int main()
{
while(cin>>s){
stack<int>sta;
len=strlen(s);
ans=P(,);
f=ff=;
for(int i=;i<len;i++){
if(s[i]=='+'){
f=;
}
else if(s[i]=='-'){
f=-;
}
else if(s[i]=='('){
f=;
if(s[i-]=='-'){
ff*=-;
sta.push(-);
}
else{
sta.push();
}
}
else if(s[i]==')'){
int w=sta.top();
ff*=w;
sta.pop();
}
else if(s[i]=='/'){
P now=ok(i);
ans=cal(ans,now);
}
}
cout<<ans.first<<"/"<<ans.second<<endl;
}
return ;
}
F - Fraction Formula Gym - 102307F的更多相关文章
- Frightful Formula Gym - 101480F (待定系数法)
Problem F: Frightful Formula \[ Time Limit: 10 s \quad Memory Limit: 512 MiB \] 题意 题意就是存在一个\(n*n\)的矩 ...
- Ceizenpok’s formula Gym - 100633J 扩展Lucas定理 + 中国剩余定理
http://codeforces.com/gym/100633/problem/J 其实这个解法不难学的,不需要太多的数学.但是证明的话,我可能给不了严格的证明.可以看看这篇文章 http://ww ...
- AtCoder Grand Contest 003 F - Fraction of Fractal
题目传送门:https://agc003.contest.atcoder.jp/tasks/agc003_f 题目大意: 给定一个\(H×W\)的黑白网格,保证黑格四连通且至少有一个黑格 定义分形如下 ...
- Atcoder Grand Contest 003 F - Fraction of Fractal(矩阵乘法)
Atcoder 题面传送门 & 洛谷题面传送门 Yet another AGC F,然鹅这次就没能自己想出来了-- 首先需注意到题目中有一个条件叫做"黑格子组成的连通块是四联通的&q ...
- R笔记(1):formula和Formula
#####开一个新的系列.关于R的一些笔记,就是遇到过的一些问题的简单整理.可能很基本,也可能没什么大的用处,作为一个记录而已.------------------------------------ ...
- Gym - 101480 CERC 15:部分题目题解(队内第N次训练)
-------------------题目难度较难,但挺有营养的.慢慢补. A .ASCII Addition pro:用一定的形式表示1到9,让你计算加法. sol:模拟. solved by fz ...
- 2017 United Kingdom and Ireland Programming(Gym - 101606)
题目很水.睡过了迟到了一个小时,到达战场一看,俩队友AC五个了.. 就只贴我补的几个吧. B - Breaking Biscuits Gym - 101606B 旋转卡壳模板题.然后敲错了. 代码是另 ...
- [C2P3] Andrew Ng - Machine Learning
##Advice for Applying Machine Learning Applying machine learning in practice is not always straightf ...
- objective-c第七章课后练习3
题:Fraction类对负分数适用吗?例如:1/4-1/2 能否显示成-1/4? //--------类定义实现参考上篇随笔,此处需更改print方法和main主方法部分---------- - (v ...
随机推荐
- 【LeetCode 】N皇后II
[问题]n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法.给定一个整数 n,返回 n 皇后不同的解决方案的数量. 示例: ...
- win10安装centOS 失去win启动项
联网:执行以下三条命令 yum -y install epel-release yum -y install ntfs-3g grub2-mkconfig -o /boot/grub2/grub.cf ...
- node.js爱心邮件
一.用的软件是VsCode:下载地址:https://code.visualstudio.com/ 二.用的是node.js完成:下载地址:http://nodejs.cn/download/ 无脑下 ...
- 网络寻路(DFS)
Description X 国的一个网络使用若干条线路连接若干个节点.节点间的通信是双向的.某重要数据包,为了安全起见,必须恰好被转发两次到达目的地.该包可能在任意一个节点产生,我们需要知道该网络中一 ...
- Linux下MSSQL部署
目前主要使用的red hat系列的linux版本,CentoS 7.X,MSSQL2017 微软官方说明地址:https://docs.microsoft.com/zh-cn/sql/linux/qu ...
- python np array转json
np array转json import numpy as np import codecs, json a = np.arange().reshape(,) # a by array b = a.t ...
- Linux学习-第二章(命令)20200216
- Kettle无法下载以及点击无反应的问题
最开始用于解决MySQL转移数据到ORACLE的问题,尝试了几种方法. 1.直接从Mysql导出csv文件.这种方式最直接简单,但是问题是数据大的话,容易出现数据对不齐的情况,导入这个时候就会出现错误 ...
- java中执行javascript案例
Nashorn js engine官方文档 https://docs.oracle.com/javase/7/docs/technotes/guides/scripting/programmer_gu ...
- winform集成cefSharp,与页面进行交互
/// <summary> /// 为了使网页能够与winForm交互 将 com 的可访问性设置为 true /// </summary> [System.Runtime.I ...