noip的等价表达式
来源:互联网 发布:ghost恢复linux 编辑:程序博客网 时间:2024/04/30 22:22
#include<cstdio>#include<cmath>#include<cstdlib>#include<algorithm>#include<cstring>#include<string>#include<iostream>using namespace std;const int q[5]={1,2,3,4,5};const int inf=0x3f3f3f3f;string s,ch;int n,ans[5];int number(string &s){int ans=0,len=s.length();for (int i=0;i<len;i++) ans=ans*10+s[i]-'0';return ans;}int pow(int a,int b){int ans=1;for (int i=1;i<=b;i++) ans=ans*a;return ans;}int opt(string &s){int len=s.length(),num=0;bool b[4];b[0]=b[1]=b[2]=false;b[3]=true;for (int i=0;i<len;i++) {if (s[i]=='(') num++;if (s[i]==')') num--;if (num) continue;if (s[i]=='+'||s[i]=='-') b[0]=true;if (s[i]=='*') b[1]=true;if (s[i]=='^') b[2]=true;}for (int i=0;i<=3;i++) if (b[i]) return i;}int pan(string s,int a){int len=s.length();if (len==0) return 0;int tt=1,ans,last=0,num=0,op=opt(s);if (op==0){ans=0;for (int i=0;i<len;i++){if (s[i]=='(') num++;if (s[i]==')') num--;if (num) continue;if (s[i]!='+'&&s[i]!='-') continue;ans=ans+tt*pan(s.substr(last,i-last),a);tt= s[i]=='+' ? 1:-1;last=i+1;}ans=ans+tt*pan(s.substr(last,len-last),a);return ans;}if (op==1){ans=1;for (int i=0;i<len;i++){if (s[i]=='(') num++;if (s[i]==')') num--;if (num) continue;if (s[i]!='*') continue;ans=ans*pan(s.substr(last,i-last),a);last=i+1;} ans=ans*pan(s.substr(last,len-last),a);return ans;}if (op==2) {ans=-1;for (int i=0;i<len;i++){if (s[i]=='(') num++;if (s[i]==')') num--;if (num) continue;if (s[i]!='^') continue;if (ans==-1) ans=pan(s.substr(last,i-last),a);else ans=pow(ans,pan(s.substr(last,i-last),a));last=i+1;}ans=pow(ans,pan(s.substr(last,len-last),a));return ans;}if (s[0]=='(') return pan(s.substr(1,len-2),a);if (s[0]=='a') return a;return number(s);}void read(string &s){string y;getline(cin,y);int len=y.length();s.clear();for (int i=0;i<len;i++) if (y[i]!=' ') s.push_back(y[i]);}void debug(){int tmp;read(s);cin>>tmp;getchar();int ans=pan(s,tmp);printf("%d\n",ans);}int main(){//debug();read(s);for (int i=0;i<5;i++) ans[i]=pan(s,q[i]);cin>>n;getchar();bool o;for (int i=0;i<n;i++){read(ch);o=true;for (int j=0;j<5;j++) if (pan(ch,q[j])!=ans[j]) o=false;if (o) printf("%c",65+i);}return 0;}/*(a+1)^220a*a+2*a+1a^2+2*a+2-1-1+1*/
总结
1:对于这种字符串题,递归处理是一种好的方法
2:对于这些对时间复杂度要求不是特别高但是,考验代码实现技巧的这一类字符串题,可以通过string类型来简化我们的程序
3:string一系列函数待填坑
0 0
- noip的等价表达式
- NOIP 2005 等价表达式
- NOIP 2005 等价表达式
- NOIP 2005 等价表达式 四则运算
- 【NOIP 2005】 等价表达式 题解
- [noip 2005] 等价表达式(equal)
- noip 2005 T4 等价表达式
- [Codevs 1107][NOIP 1107]等价表达式
- NOIP 2005 等价表达式(hash算法)
- 等价表达式 2005年NOIP全国联赛提高组
- BSOJ1054 洛谷P1054 CODEVS1107【NOIP 2005提高】等价表达式 随机化
- 正则表达式的等价判断
- 正则表达式的等价判定
- 等价表达式的后缀表达式读取
- 等价表达式
- 等价表达式
- 等价表达式
- 等价表达式
- 众核多计算模式系统的构建 - 全文
- Android事件传递机制详解(嵌套自定义View示例)
- Unity3D自学笔记——自定义图片显示战斗伤害值
- Hadoop各个核心项目架构
- TortoiseSVN中分支和合并实践
- noip的等价表达式
- cat 函数
- 关于BIO和NIO的理解
- 字典树(类似一种贪心)
- Sublime Text快捷键(备忘)
- springmvc实现json交互-准备环境
- long和Long的区别
- 定时器的两种实现方式
- com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated obj