2019年12月ccf csp认证第三题-判断是否配平化学方程式

#include<bits/stdc++.h>
using namespace std;
int n;
string s;
void solve_son(queue<string>&q,int bei,map<string,int>&m)
{
    while(!q.empty())
    {
        string ts = q.front();
        q.pop();
        if(ts=="(")
        {
            int left = 1,right = 0;
            queue<string>tq;
            while(left!=right)
            {
                if(q.front()=="(")
                    left++;
                if(q.front()==")")
                    right++;
                if(left==right)
                    break;
                tq.push(q.front());
                q.pop();
            }
            q.pop();
            stringstream s1;
            string s2 = q.front();
            s1<<s2;
            int beit;
            s1>>beit;
            q.pop();
            solve_son(tq,bei*beit,m);
        }
        else
        {
            stringstream s1;
            string s2 = q.front();
            s1<<s2;
            int beit;
            s1>>beit;
            q.pop();
            m[ts]+= bei*beit;
        }
    }
}
void solve(stack<string>&st,map<string,int>&m)
{
    stack<string>rt;
    while(!st.empty())
    {
        rt.push(st.top());
        st.pop();
    }
    queue<string>q;
    stringstream s1;
    string s2 = rt.top();
    s1<<s2;
    int bei;
    s1>>bei;
    rt.pop();
    while(rt.size())
    {
        q.push(rt.top());
        rt.pop();
    }
    solve_son(q,bei,m);
}
bool check()
{
    int i;
    map<string,int>mleft;
    map<string,int>mright;
    stack<string>st;
    for(i = 0;s[i]!=‘=‘;i++)
    {
        if(i==0)
        {
            if(s[i]<=‘9‘&&s[i]>=‘0‘)
            {
                string t;
                while(s[i]<=‘9‘&&s[i]>=‘0‘)
                {
                    t+=s[i];
                    i++;
                }
                st.push(t);
            }
            else
                st.push("1");
        }
        if(s[i]==‘+‘||s[i+1]==‘=‘)
        {
            if(s[i]<=‘Z‘&&s[i]>=‘A‘)
            {
                string t;
                t+=s[i];
                if((i+1)<s.length()&&s[i+1]<=‘z‘&&s[i+1]>=‘a‘)
                {
                    t+=s[i+1];
                    i++;
                }
                st.push(t);
                if(!((i+1)<s.length()&&s[i+1]<=‘9‘&&s[i+1]>=‘0‘))
                    st.push("1");
            }
            else if(s[i]<=‘9‘&&s[i]>=‘0‘)
            {
                string t;
                t+=s[i];
                while((i+1)<s.length()&&s[i+1]<=‘9‘&&s[i+1]>=‘0‘)
                {
                    t+=s[i+1];
                    i++;
                }
                st.push(t);
            }
            else if(s[i]==‘(‘)
                st.push("(");
            else if(s[i]==‘)‘)
            {
                st.push(")");
                if(!((i+1)<s.length()&&s[i+1]<=‘9‘&&s[i+1]>=‘0‘))
                    st.push("1");
            }
            solve(st,mleft);
            if(s[i+1]!=‘=‘)
            {
                if(s[i+1]<=‘9‘&&s[i+1]>=‘0‘)
                {
                    string t;
                    while(s[i+1]<=‘9‘&&s[i+1]>=‘0‘)
                    {
                        t+=s[i+1];
                        i++;
                    }
                    st.push(t);
                }
                else
                    st.push("1");
            }
        }
        else if(s[i]<=‘Z‘&&s[i]>=‘A‘)
        {
            string t;
            t+=s[i];
            if((i+1)<s.length()&&s[i+1]<=‘z‘&&s[i+1]>=‘a‘)
            {
                t+=s[i+1];
                i++;
            }
            st.push(t);
            if(!((i+1)<s.length()&&s[i+1]<=‘9‘&&s[i+1]>=‘0‘))
                st.push("1");
        }
        else if(s[i]<=‘9‘&&s[i]>=‘0‘)
        {
            string t;
            t+=s[i];
            while((i+1)<s.length()&&s[i+1]<=‘9‘&&s[i+1]>=‘0‘)
            {
                t+=s[i+1];
                i++;
            }
            st.push(t);
        }
        else if(s[i]==‘(‘)
            st.push("(");
        else if(s[i]==‘)‘)
        {
            st.push(")");
            if(!((i+1)<s.length()&&s[i+1]<=‘9‘&&s[i+1]>=‘0‘))
                st.push("1");
        }
    }
    if(st.size())
        solve(st,mleft);
    /*---------------------------------------------------*/
    for(;i<s.length();i++)
    {
        if(s[i]==‘=‘)
        {
            i++;
            if(s[i]<=‘9‘&&s[i]>=‘0‘)
            {
                string t;
                while(s[i]<=‘9‘&&s[i]>=‘0‘)
                {
                    t+=s[i];
                    i++;
                }
                st.push(t);
            }
            else
                st.push("1");
        }
        if(s[i]==‘+‘||(i+1)==s.length())
        {
            if(s[i]<=‘Z‘&&s[i]>=‘A‘)
            {
                string t;
                t+=s[i];
                if((i+1)<s.length()&&s[i+1]<=‘z‘&&s[i+1]>=‘a‘)
                {
                    t+=s[i+1];
                    i++;
                }
                st.push(t);
                if(!((i+1)<s.length()&&s[i+1]<=‘9‘&&s[i+1]>=‘0‘))
                    st.push("1");
            }
            else if(s[i]<=‘9‘&&s[i]>=‘0‘)
            {
                string t;
                t+=s[i];
                while((i+1)<s.length()&&s[i+1]<=‘9‘&&s[i+1]>=‘0‘)
                {
                    t+=s[i+1];
                    i++;
                }
                st.push(t);
            }
            else if(s[i]==‘(‘)
                st.push("(");
            else if(s[i]==‘)‘)
            {
                st.push(")");
                if(!((i+1)<s.length()&&s[i+1]<=‘9‘&&s[i+1]>=‘0‘))
                    st.push("1");
            }
            solve(st,mright);
            if((i+1)!=s.length())
            {
                if(s[i+1]<=‘9‘&&s[i+1]>=‘0‘)
                {
                    string t;
                    while(s[i+1]<=‘9‘&&s[i+1]>=‘0‘)
                    {
                        t+=s[i+1];
                        i++;
                    }
                    st.push(t);
                }
                else
                    st.push("1");
            }
        }
        else if(s[i]<=‘Z‘&&s[i]>=‘A‘)
        {
            string t;
            t+=s[i];
            if((i+1)<s.length()&&s[i+1]<=‘z‘&&s[i+1]>=‘a‘)
            {
                t+=s[i+1];
                i++;
            }
            st.push(t);
            if(!((i+1)<s.length()&&s[i+1]<=‘9‘&&s[i+1]>=‘0‘))
                st.push("1");
        }
        else if(s[i]<=‘9‘&&s[i]>=‘0‘)
        {
            string t;
            t+=s[i];
            while((i+1)<s.length()&&s[i+1]<=‘9‘&&s[i+1]>=‘0‘)
            {
                t+=s[i+1];
                i++;
            }
            st.push(t);
        }
        else if(s[i]==‘(‘)
            st.push("(");
        else if(s[i]==‘)‘)
        {
            st.push(")");
            if(!((i+1)<s.length()&&s[i+1]<=‘9‘&&s[i+1]>=‘0‘))
                st.push("1");
        }
    }
    if(st.size())
        solve(st,mright);

    map<string,int>::iterator leftiter;
    map<string,int>::iterator rightiter;
    leftiter = mleft.begin();
    rightiter = mright.begin();
    while(leftiter!=mleft.end()&&rightiter!=mright.end())
    {
        if(leftiter->first!=rightiter->first||leftiter->second!=rightiter->second)
            return false;
        leftiter++;
        rightiter++;
    }
    if(leftiter==mleft.end()&&rightiter==mright.end())
        return true;
    return false;
}
int main()
{
    cin>>n;
    while(n--)
    {
        cin>>s;
        if(check())
            cout<<‘Y‘<<endl;
        else
            cout<<‘N‘<<endl;
    }
    return 0;
}

这题写了1个多小时,所幸最后这题100分,很多地方没开函数,直接复制了代码,所以代码有点繁杂,有时间再修改一下。

原文地址:https://www.cnblogs.com/loganacmer/p/12059097.html

时间: 2024-10-31 15:33:28

2019年12月ccf csp认证第三题-判断是否配平化学方程式的相关文章

第16次CCF CSP认证-第5题-317 号子任务(subtask317)-图论最短路径

[题目背景]“你在平原上走着走着,突然迎面遇到一堵墙,这墙向上无限高,向下无限深,向左无限远,向右无限远,这墙是什么?”——<流浪地球>原著我们带着地球去流浪了,为了处理流浪过程中可能会发生的危机,联合政府找到你,希望你能协助完成 317 号子任务:制定应急预案.[题目描述]地球的表面有 n 个据点,这些据点之间存在 m 条双向道路.这些据点中,有的是建立在行星发动机之下,受到行星发动机的保护(行星发动机据点),而其他据点则没有行星发动机的保护(普通据点,比如燃料采集据点/科研据点等).当发生

记第十七次CCF CSP认证

记第十七次CCF CSP认证 第一二题很简单,就是简单的模拟就可以了,后面的第三四题用了近一个小时才看懂,但是感觉好复杂,不好写,能力不行,写不出来.第五题,就想到了暴力,其他就不会了,但是我没有去写,因为感觉这个复杂度就算写了也过不了.最后检查了几遍第一二题的代码,范围我开的都比题目要求的大一个数量级.最后就过了这两个题. 下次12月份继续! 原文地址:https://www.cnblogs.com/alking1001/p/11536021.html

23.密码学知识-加密介绍-1——2019年12月19日

2019年12月19日14:51:00 1. 第1天 - 对称加密 1.1 基础知识点 知识点大纲介绍 密码的基础概念 对称加密 非对称加密 单向散列函数 哈希函数 消息认证码 数字签名 证书 ssl/tls - https 为什么要加密, 以及解决方案 保证数据安全 加密三要素 明文/密文 秘钥 定长的字符串 需要根据加密算法确定其长度 算法 加密算法 解密算法 加密算法和解密算法有可能是互逆的, 也有可能相同 常用的两种加密方式 对称加密 秘钥: 加密解密使用的是同一个秘钥, 秘钥有一个 特

33.《高血压看这本就够了》摘录-陈罡——2019年12月22日

.bodyContainer { font-family: Arial, Helvetica, sans-serif; text-align: center; padding-left: 32px; padding-right: 32px; } .notebookFor { font-size: 18px; font-weight: 700; text-align: center; color: rgb(119, 119, 119); margin: 24px 0px 0px; padding:

2019年12月8日 运飞龙 linux

1.system v init运行级别及作用 init运行级别                  作用 0                                  关机 1                                  单用户模式 2                                  多用户的文本界面 3                                  多用户的文本界面 4                             

蔡康永的说话之道——2019年12月15日

.bodyContainer { font-family: Arial, Helvetica, sans-serif; text-align: center; padding-left: 32px; padding-right: 32px; } .notebookFor { font-size: 18px; font-weight: 700; text-align: center; color: rgb(119, 119, 119); margin: 24px 0px 0px; padding:

19.go语言基础学习(上)——2019年12月16日

2019年12月16日16:57:04 5.接口 2019年11月01日15:56:09 5.1 duck typing 1. 2. 接口 3.介绍 Go 语言的接口设计是非侵入式的,接口编写者无须知道接口被哪些类型实现. 而接口实现者只需知道实现的是什么样子的接口,但无须指明实现哪一个接口. 编译器知道最终编译时使用哪个类型实现哪个接口,或者接口应该由谁来实现. 每个接口类型由数个方法组成.接口的形式代码如下: type 接口类型名 interface{ 方法名1( 参数列表1 ) 返回值列表

七月算法--12月机器学习在线班-第三次课笔记—矩阵和线性代数

七月算法--12月机器学习在线班-第三次课笔记—矩阵和线性代数 七月算法(julyedu.com)12月机器学习在线班学习笔记 http://www.julyedu.com

2019年12月我主要的业力对应关系

本文记录12月我的业力因果,分享给大家,愿协助世界意识更加地提升-感谢- 种子 花了一天时间回顾业力因果,发布了<2019年9-11月份我主要的业力对应关系> 结果 第二天上午,我突然想起了年中尝试过的WebGPU.那时在我的电脑上没有跑起来,于是我就放弃了.我突然领悟到,也许是我电脑的操作系统版本太低,需要升级.于是我就升级了系统,结果就能运行WebGPU了! 种子 在我电脑上能够运行WebGPU 结果 我开始写WebGPU学习系列博文. 我的目的是: 1.通过写文章,来促使自己进一步学习W