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

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<math.h>
  4. #include<time.h>
  5. #include<iostream>
  6. #include<ctype.h>
  7. #include<map>
  8. #include<set>
  9. #include<string>
  10. #include<vector>
  11. #include<algorithm>
  12. #include<stdlib.h>
  13. #include<queue>
  14. #include<stack>
  15. using namespace std;
  16. set<string>s1;
  17. set<string>s2;
  18. set<string>::iterator tt;
  19. char ss[];
  20. char str[][];
  21. int cc(char cs)//只检查字母数字,也就是存化学式,碰见+或者=就跳过去
  22. {
  23. if(isdigit(cs))
  24. return ;
  25. if(isalpha(cs))
  26. return ;
  27. return ;
  28. }
  29. int main()
  30. {
  31. int t,i,j,n,m,fla,k;
  32.  
  33. while(~scanf("%d",&n))
  34. { s1.clear();
  35. s2.clear();
  36.  
  37. for(i=;i<n;i++)
  38. scanf("%s",str[i]);
  39. scanf("%d",&m);
  40. for(i=;i<m;i++)
  41. {
  42. scanf("%s",ss);
  43. s1.insert(ss);
  44. }
  45. for(i=;i<n;i++)
  46. {
  47. fla=;//,每一次也就是每个化学方程式都是从左开始,判断是=号左侧还是右侧的,右侧生成物也得存入反应物里,也就是s1集合里边,左侧的话直接检测给的能用的反应物以及生成物集合s1里有没有就行了
  48. for(j=;j<strlen(str[i]);j++)
  49. {
  50. if(fla)//右侧生成物
  51. {
  52. k=;
  53. memset(ss,'\0',sizeof(ss));
  54. while(cc(str[i][j]))
  55. {
  56. ss[k++]=str[i][j];
  57. j++;
  58. }
  59. if(s1.find(ss)==s1.end())//s1里没有的话表示是新生成物,存到s2,同时存到s1也可以利用
  60. s2.insert(ss);
  61. s1.insert(ss);
  62. }
  63. else //左侧反应物
  64. {
  65. k=;
  66. memset(ss,'\0',sizeof(ss));
  67. while(cc(str[i][j]))
  68. {
  69. ss[k++]=str[i][j];
  70. j++;
  71. }
  72. if(s1.find(ss)==s1.end()) break;//检查左侧,s1里不包含这个化学式表示并没有这个反应物,也就是没有这个化学方程式,直接跳过这个化学方程式就行。
  73. }
  74. if(str[i][j]=='=') fla=;//找到=就标记,开始循环判断右侧生成物
  75. }
  76. }
  77. cout<<s2.size()<<endl;
  78. for(tt=s2.begin();tt!=s2.end();tt++)
  79. cout<<*tt<<endl;
  80. }
  81. }

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

  1. 试制品 (nyoj 542)

    模拟 a 反应物集合 ; b 生成物集合; c 存在的化合物或单质集合; ans 新生成化合物集合 1.如果反应无均在已生成的化合物集合中,则完成反应,将合成物加入c集合 2.对每个方程式的反应物进行 ...

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

    XiaoMing likes mathematics, and heis just learning how to convert numbers between different bases , ...

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

    一次比赛做一次总结,弱菜又来总结了…… 我这种大四的又死皮赖来混省赛了,貌似就我和山大威海的某哥们(不详其大名)了吧.颁奖前和他聊天,得知他去百度了,真是不错,ORZ之. 比赛流水账: 题目目前不知道 ...

  4. 第八届河南省省赛 A.挑战密室

    挑战密室 时间限制: ms | 内存限制: KB 难度: 描述 R组织的特工Dr. Kong 为了寻找丢失的超体元素,不幸陷入WTO密室.Dr. Kong必须尽快找到解锁密码逃离,否则几分钟之后,WT ...

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

    题目1238 题目信息 执行结果 本题排行 pid=1238" style="text-decoration:none; color:rgb(55,119,188)"&g ...

  6. 2021CCPC河南省省赛

    大一萌新,第一次打比赛,虽然是线下赛,但送气球的环节还是很赞的! 这里主要是补一下自己的弱项和考试时没有做出来的题目. 1002(链接之后再放,官方还没公开题目...) 先说一下第二题,这个题一看就是 ...

  7. 青岛理工大学第五届ACM交流赛 部分题解

    A:后缀维护si*pi的最小值,查询的时候二分,判断后缀和当前两个部分就行. #include <bits/stdc++.h> using namespace std; typedef l ...

  8. 山东省第五届ACM省赛

    题目链接:http://acm.sdut.edu.cn/sdutoj/contest_show.php?contest_id=1449 相关总结:http://www.cnblogs.com/mcfl ...

  9. 第四届河南省省赛 走迷宫 二分+DFS

    题目思路:使用二分查找路径中最大值和最小值之间的差值,从而确定出一组minn和maxn,对此组的minn和maxn经行DFS,如果可以找到一条路径,其中的最大值,最小值在minn~maxn的范围内,则 ...

随机推荐

  1. 转 Kafka、RabbitMQ、RocketMQ等消息中间件的对比 —— 消息发送性能和优势

    Kafka.RabbitMQ.RocketMQ等消息中间件的对比 —— 消息发送性能和优势 引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦.现在开源的消息中间件有很多,前 ...

  2. loadView

    loadView在View为nil时调用,早于ViewDidLoad,通常用于代码实现控件,收到内存警告时会再次调用.loadView默认做的事情是:如果此VIewcontroller存在一个对应的n ...

  3. 20190422 T-SQL 触发器

    -- 1 数据库服务 -- 2 触发器 CREATE TRIGGER no_inserton xsAFTER INSERT ASBEGIN RAISERROR('XS不让插入数据',1,1); ROL ...

  4. byte转bit

    由于项目需要,传过来的数据是高位到低位的Byte,需要输出低位到高位的bool数组. public static bool[] getBits(byte[] byt) { bool[] ret = n ...

  5. PHP GZ压缩与解压

    /*将字符串添加至GZ文件*/ function gz_str($str,$gz_name){ $fp = gzopen ($gz_name, 'w9'); gzwrite ($fp, $str); ...

  6. gitlab的ssh key有2个

    Gitlab添加SSH key可以pull不能push的问题 最后解决的是 使用http去clone pull  提交 没用ssh.就是需要输入密码

  7. Cocos Creator 加载和切换场景(官方文档摘录)

    Cocos Creator 加载和切换场景(官方文档摘录) 在 Cocos Creator 中,我们使用场景文件名( 可以不包含扩展名)来索引指代场景.并通过以下接口进行加载和切换操作: cc.dir ...

  8. PHP----------php-fpm进程数的一些相关配置

    1.其中pm.max_children如何配置:pm.max_children 数量的多少根据机器内存确定,基本上一个进程需要30M的内存,假设起100个进程,那么就是3000M,3G内存. 2.pm ...

  9. 虚拟机与Docker有何不同

    http://www.techug.com/post/comparing-virtual-machines-vs-docker-containers.html 译者按: 各种虚拟机技术开启了云计算时代 ...

  10. Unity之流光效果

    效果如图: shader如下: Shader "Unlit/Walk light" { Properties { _MainTex ("Base (RGB), Alpha ...