zoukankan      html  css  js  c++  java
  • NYOJ 542 试制品(第五届河南省省赛)

    解法不唯一,但是还是set好理解而且用着爽,代码注释应该够详细了

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<time.h>
    #include<iostream>
    #include<ctype.h>
    #include<map>
    #include<set>
    #include<string>
    #include<vector>
    #include<algorithm>
    #include<stdlib.h>
    #include<queue>
    #include<stack>
    using namespace std;
    set<string>s1;
    set<string>s2;
    set<string>::iterator tt;
    char ss[205];
    char str[505][110];
    int cc(char cs)//只检查字母数字,也就是存化学式,碰见+或者=就跳过去
    {
        if(isdigit(cs))
            return 1;
        if(isalpha(cs))
            return 1;
        return 0;
    }
    int main()
    {
        int t,i,j,n,m,fla,k;
    
        while(~scanf("%d",&n))
        {   s1.clear();
            s2.clear();
    
            for(i=0;i<n;i++)
                scanf("%s",str[i]);
            scanf("%d",&m);
            for(i=0;i<m;i++)
            {
                scanf("%s",ss);
                s1.insert(ss);
            }
            for(i=0;i<n;i++)
            {
                fla=0;//,每一次也就是每个化学方程式都是从左开始,判断是=号左侧还是右侧的,右侧生成物也得存入反应物里,也就是s1集合里边,左侧的话直接检测给的能用的反应物以及生成物集合s1里有没有就行了
                for(j=0;j<strlen(str[i]);j++)
                {
                    if(fla)//右侧生成物
                    {
                        k=0;
                        memset(ss,'',sizeof(ss));
                        while(cc(str[i][j]))
                        {
                            ss[k++]=str[i][j];
                            j++;
                        }
                        if(s1.find(ss)==s1.end())//s1里没有的话表示是新生成物,存到s2,同时存到s1也可以利用
                            s2.insert(ss);
                        s1.insert(ss);
                    }
                    else  //左侧反应物
                    {
                        k=0;
                        memset(ss,'',sizeof(ss));
                        while(cc(str[i][j]))
                        {
                            ss[k++]=str[i][j];
                            j++;
                        }
                        if(s1.find(ss)==s1.end()) break;//检查左侧,s1里不包含这个化学式表示并没有这个反应物,也就是没有这个化学方程式,直接跳过这个化学方程式就行。
                    }
                    if(str[i][j]=='=') fla=1;//找到=就标记,开始循环判断右侧生成物
                }
            }
            cout<<s2.size()<<endl;
            for(tt=s2.begin();tt!=s2.end();tt++)
                cout<<*tt<<endl;
        }
    }
  • 相关阅读:
    c字符指针与字符数组的区别
    BiLstm原理
    TensorFlow中assign函数
    TensorFlow Training 优化函数
    TensorFlow 神经网络相关函数
    TensorFlow 算术运算符
    TensorFlow函数:tf.reduce_sum
    TensorFlow函数教程:tf.nn.dropout
    TensorFlow占位符操作:tf.placeholder_with_default
    TensorFlow函数:tf.random_shuffle
  • 原文地址:https://www.cnblogs.com/nr1999/p/9070433.html
Copyright © 2011-2022 走看看