码迷,mamicode.com
首页 > 其他好文 > 详细

NYOJ 542 试制品(第五届河南省省赛)

时间:2018-05-22 10:40:43      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:git   strlen   没有   河南   algorithm   scan   cto   解法   ==   

解法不唯一,但是还是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,\0,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,\0,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;
    }
}

 

NYOJ 542 试制品(第五届河南省省赛)

标签:git   strlen   没有   河南   algorithm   scan   cto   解法   ==   

原文地址:https://www.cnblogs.com/nr1999/p/9070433.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!