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

Posted 中单支援路死河道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,\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 试制品(第五届河南省省赛)的主要内容,如果未能解决你的问题,请参考以下文章

NYOJ 1277Decimal integer conversion (第九届河南省省赛)

NYOJ--1276--机器设备(河南省第九届省赛,简单的bfs)

nyoj1273 河南省第九届省赛_"宣传墙"状压DP+矩阵幂加速

NYOJ 158 省赛来了

地铁 Dijkstra(优先队列优化) 湖南省第五届省赛

2021卓见杯第三届CCPC河南省省赛所有题超详细题解附加榜单真题解析,简单代码+详细注释+思想,要看的,补题的速速点进来 2021 10.30