比赛 EYOI暨SBOI暑假快乐赛4th 评测结果 WWWW
题目名称 锑分解炉 最终得分 0
用户昵称 康尚诚 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2022-06-28 11:00:38
显示代码纯文本
//暴力整不出来,先存着代码 
#include<bits/stdc++.h>
using namespace std;
map<string,int> num;
map<string,int> num2;
int gcd(int a,int b)
{
    if(b==0)
    {
        return a;
    } 
    int c=a%b;
    return gcd(b,c);
}
int zxgbs(int a,int b)
{
    return a*b/gcd(a,b);
}
int zxgb3(int a,int b,int c)
{
    return zxgbs(zxgbs(a,b),c);
}
struct node
{
    string name;
}yuansu[10001];//记录都有哪几种元素 
node fyw[12],scw[12];//记录反应物和生成物的分子名称 
int n,m,zxgbz=1,zxgb[10001];
int scwxz[12],fywxs[12];
void peiping()
{
    
}
int main()
{
    freopen("Sbfenjielu.in","r",stdin);
    freopen("Sbfenjielu.out","w",stdout);
    cin>>n>>m;
    int ans=0;//记录已找到的元素种类 
    for(int i=1;i<=n;i++)
    {
        string ys=""; 
        bool hvys=false;
        cin>>fyw[i].name;
        for(int j=0;j<fyw[i].name.length();j++)
        {
            char c=fyw[i].name[j];
            if('A'<=c&&c<='Z')//如果是大写元素符号 
            {
                if(!hvys)//如果之前没有不配数字的元素符号 
                {
                    ys+=c;
                    hvys=true;
                }
                else//如果上一个元素后没有数字(即原子个数为1) 
                {
                    if(!num[ys])//如果之前没有记录过这种元素
                    {
                        yuansu[++ans].name=ys; 
                    } 
                    num[ys]++;
                    ys="";
                    ys+=c;
                }
            }
            if('a'<=c&&c<='z')//小写字母必须跟在大写字母后面表示整个元素符号 
            {
                ys+=c; 
            }
            if('0'<=c&&c<='9')
            {
                if(!num[ys])//如果之前没有记录过这种元素
                {
                    yuansu[++ans].name=ys; 
                } 
                num[ys]+=(c-'0');
                ys="";
                hvys=false;
            }
        }
        if(hvys)
        {
            if(!num[ys])//如果之前没有记录过这种元素
            {
                yuansu[++ans].name=ys; 
            } 
            num[ys]++;
        }
    }   
    if(ans>10001)
    {
        for(int i=1;i<=ans;i++)
        {
            cout<<"Van+2Rsr+3O2=Sb3O6"<<endl;
        }
        return 0;
    } 
    ////////////////////////////////////////////////////// 
    for(int i=1;i<=m;i++)
    {
        string ys=""; 
        bool hvys=false;
        cin>>scw[i].name;
        for(int j=0;j<scw[i].name.length();j++)
        {
            char c=scw[i].name[j];
            if('A'<=c&&c<='Z')//如果是大写元素符号 
            {
                if(!hvys)//如果之前没有不配数字的元素符号 
                {
                    ys+=c;
                    hvys=true;
                }
                else//如果上一个元素后没有数字(即原子个数为1) 
                {
                    num2[ys]++;
                    ys="";
                    ys+=c;
                }
            }
            if('a'<=c&&c<='z')//小写字母必须跟在大写字母后面表示整个元素符号 
            {
                ys+=c; 
            }
            if('0'<=c&&c<='9')
            {
                num2[ys]+=(c-'0');
                ys="";
                hvys=false;
            }
        }
        if(hvys)
        {
            num2[ys]++;
        }
    }
    for(int i=1;i<=ans;i++)
    {
//        cout<<yuansu[i].name<<" "<<num[yuansu[i].name]<<" "<<num2[yuansu[i].name]<<endl;
        zxgb[i]=zxgbs(num[yuansu[i].name],num2[yuansu[i].name]);
    }
    for(int i=1;i<=ans;i++)
    {
        zxgbz=zxgbs(zxgbz,zxgb[i]);
    }
    cout<<zxgbz;
}