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;
    }
}

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

时间: 2024-10-27 10:02:17

NYOJ 542 试制品(第五届河南省省赛)的相关文章

NYOJ - 541 - 最强DE 战斗力 (第五届河南省程序设计大赛--大数!!)

最强DE 战斗力 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 春秋战国时期,赵国地大物博,资源非常丰富,人民安居乐业.但许多国家对它虎视眈眈,准备联合起来对赵国发起一场战争. 显然,面对多个国家的部队去作战,赵国的兵力明显处于劣势.战斗力是决定战争成败的关键因素,一般来说,一支部队的战斗力与部队的兵力成正比.但当把一支部队分成若干个作战队伍时,这个部队的战斗力就会大大的增强. 一支部队的战斗力是可以通过以下两个规则计算出来的: 1.若一支作战队伍的兵力为N,则这

第五届河南省acm省赛 最强DE 战斗力

最强DE 战斗力 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 春秋战国时期,赵国地大物博,资源非常丰富,人民安居乐业.但许多国家对它虎视眈眈,准备联合起来对赵国发起一场战争. 显然,面对多个国家的部队去作战,赵国的兵力明显处于劣势.战斗力是决定战争成败的关键因素,一般来说,一支部队的战斗力与部队的兵力成正比.但当把一支部队分成若干个作战队伍时,这个部队的战斗力就会大大的增强. 一支部队的战斗力是可以通过以下两个规则计算出来的: 1.若一支作战队伍的兵力为N,则这

郑轻 1478 Metric Matrice (第五届河南省赛)

1478: Metric Matrice Time Limit: 1 Sec Memory Limit: 128 MB Submit: 72 Solved: 37 SubmitStatusWeb Board Description nt j, determine if the distance matrix is "a metric" or not. A distance matrix a[i][j] is a metric if and only if 1. a[i][i] = 0

nyoj 542 试 制 品

题目: 试 制 品 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 ZZ大学的Dr.Kong最近发现实验室的很多试制品都已经用完.由于项目经费有限,为了节省,Dr.Kong决定利用实验室现有的试制品来生成所缺的试制品.为此,Dr.Kong连续几天通宵达旦整理出一份研究资料并让研究生Bill去实验并统计能产生多少种所缺的试制品. Bill从头到尾翻完所有的资料,发现资料上写满了一大堆的化学方程式,上面除了大小写英文字母.数字.加号.等号外,再也没有其他的符号了.其中,

2014山东省“浪潮杯”第五届ACM省赛总结

一次比赛做一次总结,弱菜又来总结了-- 我这种大四的又死皮赖来混省赛了,貌似就我和山大威海的某哥们(不详其大名)了吧.颁奖前和他聊天,得知他去百度了,真是不错,ORZ之. 比赛流水账: 题目目前不知道哪有,过几天填坑. 没发题目前,我们赌A题可能是水题,由于我是主coder,我去读A,剩下的一个从前往后,一个从后往前. 结果--,看到A有一个貌似是几何的图--,我还是硬头皮读了.读到一半,3分钟刷榜,发现E有出,让ZK读E,ZK先告诉我了B题题意,转而读E.B题是一个有环形关系的期望,我扫了一下

[河南省ACM省赛-第五届] 试制品 (nyoj 542)

模拟 a 反应物集合 ; b 生成物集合; c 存在的化合物或单质集合; ans 新生成化合物集合 1.如果反应无均在已生成的化合物集合中,则完成反应,将合成物加入c集合 2.对每个方程式的反应物进行排序,方便加速查找 3.不停的搜索,直到没有新化合物生成. #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #inc

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

XiaoMing likes mathematics, and heis just learning how to convert numbers between different bases , but he keeps making errorssince he is only 6 years old. Whenever XiaoMing converts a number to a new base and writes downthe result, he always writes

nyoj 1238 最少换乘 (河南省第八届acm程序设计大赛)

题目1238 题目信息 运行结果 本题排行 讨论区 最少换乘 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 描述 欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行.Dr. Kong决定利用暑假好好游览一番.. 年轻人旅游不怕辛苦,不怕劳累,只要费用低就行.但Dr. Kong年过半百,他希望乘坐BUS从住的宾馆到想去游览的景点,期间尽可量地少换乘车. Dr. Kon买了一张旅游地图.他发现,市政部门为了方便游客,在各个旅游景点及宾馆,饭店等地方都设置了一些公

第五届山东省省赛总结

省赛终于结束了,可以把以前积下来的事情这几天忙一下了,那三天仿佛距今天很远了一样,印象中的哈工大,皮球,宾馆都要模糊了,留在我脑海里印象最深刻的是愤怒的小鸟的那条非常非常直的直线以及那个我一直没用上的角度1.0. 从此之后,我拒绝玩任何形式的愤怒的小鸟这个游戏. 热身赛那天,题目比较少所以也比较轻松没怎么放在眼里,一开始看的是A题数素数,结果竟然错了,就先做B题,人品好到爆的A了之后就去看C题,鼓捣了一阵没怎么看懂,还是LYN玩过这个游戏给我解释了一些名词才看懂题目,不过最后也没做出来,后来他们