试制品 (nyoj 542)
模拟
a 反应物集合 ; b 生成物集合; c 存在的化合物或单质集合; ans 新生成化合物集合
1、如果反应无均在已生成的化合物集合中,则完成反应,将合成物加入c集合
2、对每个方程式的反应物进行排序,方便加速查找
3、不停的搜索,直到没有新化合物生成。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<set>
using namespace std;
#define N 402
vector<string>a[N];//左式化合物集合
vector<string>b[N];//右式化合物集合
vector<string>c;//存在的化合物
set<string>ans;//新生成化合物
bool found[N];//标记化学式是否已经合成
int main() {
freopen("d:\\in.txt", "r", stdin);
int n, m;
while(cin>>n) {
memset(found, false, sizeof(found));
; i<n; i++){
a[i].clear();
b[i].clear();
}
c.clear();
ans.clear();
string expr, str;
; i<n; i++) {
cin>>expr;
);
expr[mid] = '+';
expr += "+";
int len = expr.size();
; j<mid+; j++){
if(expr[j] != '+')
str.push_back(expr[j]);
else{
a[i].push_back(str);
str.clear();
}
}
; j<len; j++){
if(expr[j] != '+')
str.push_back(expr[j]);
else{
b[i].push_back(str);
str.clear();
}
}
}
cin>>m;
; i<m; i++){
cin>>expr;
c.push_back(expr);
}
; i<n; i++){//排序方便查找
sort(a[i].begin(), a[i].end());
}
bool hasnext = true;
while(hasnext){
hasnext = false;
; k<n; k++){
if(found[k]) continue;
];
if(find(c.begin(), c.end(), first) != c.end()){//如果方程式的第一个元素存在
int size = a[k].size();
;
for( ; i<size; i++){//在已经存在的化合物集合中查找化学式剩余的化合物
, c.end(), a[k][i]) == c.end())
break;
}
if(i == size) {//如果左式完全匹配
found[k] = true;
hasnext = true;
for(vector<string>::iterator it = b[k].begin(); it != b[k].end(); it++){
if(find(c.begin(), c.end(), *it) == c.end()) {
c.push_back(*it);
ans.insert(*it);
}
}
}
}
}
}
cout<<ans.size()<<endl;
for(set<string>::iterator it = ans.begin(); it != ans.end(); it++)
cout<<*it<<endl;
}
;
}
试制品 (nyoj 542)的更多相关文章
- NYOJ 542 试制品(第五届河南省省赛)
解法不唯一,但是还是set好理解而且用着爽,代码注释应该够详细了 #include<stdio.h> #include<string.h> #include<math.h ...
- NYOJ 1007
在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...
- NYOJ 998
这道题是欧拉函数的使用,这里简要介绍下欧拉函数. 欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数. 欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pk ...
- NYOJ 333
http://www.cppblog.com/RyanWang/archive/2009/07/19/90512.aspx?opt=admin 欧拉函数 E(x)表示比x小的且与x互质的正整数的个数. ...
- NYOJ 99单词拼接(有向图的欧拉(回)路)
/* NYOJ 99单词拼接: 思路:欧拉回路或者欧拉路的搜索! 注意:是有向图的!不要当成无向图,否则在在搜索之前的判断中因为判断有无导致不必要的搜索,以致TLE! 有向图的欧拉路:abs(In[i ...
- nyoj 10 skiing 搜索+动归
整整两天了,都打不开网页,是不是我提交的次数太多了? nyoj 10: #include<stdio.h> #include<string.h> ][],b[][]; int ...
- 简答哈希实现 (nyoj 138 找球号2)
例题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=138 代码目的:复习哈希用 代码实现: #include "stdio.h&qu ...
- nyoj 284 坦克大战 简单搜索
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=284 题意:在一个给定图中,铁墙,河流不可走,砖墙走的话,多花费时间1,问从起点到终点至少 ...
- nyoj 170 网络的可靠性
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=170 思路:统计每个节点的度,将度为1的节点消去所需要的最少的边即为答案. 代码: #in ...
随机推荐
- 仿async/await(一)and Gulp:新一代前端构建利器
NET 4.5的async/await真是个神奇的东西,巧妙异常以致我不禁对其实现充满好奇,但一直难以窥探其门径.不意间读了此篇强文<Asynchronous Programming in C# ...
- Android:开发环境搭建、移植
一:搭建Android安卓开发环境 准备文件 1.eclipse-SDK-4.2-win32.zip 2.JDK(Java Development Kit) 3.ADT,安卓开发的一个eclipse的 ...
- Foundation 学习笔记
笔记内容 学习笔记-段玉磊 Stanford course Foundation and Attributed Strings Dynamic binding id 是一个指向任何未知对象的指针,(t ...
- 浅谈DevExpress<四>:TreeList中的拖拽功能
本篇要实现的目标,简单来说就是把一个treelist的节点用鼠标拖到另外的节点(自身或其他的listview)上,如下图: 1
- 基于多重信号分类算法的DOA估计
原创博文,转载请注明出处 下面的论文是我的雷达处理的作业,拿来共享,不喜勿喷.由于公式编辑器的原因,无法复制公式,全部内容请点击. 基于多重信号分类算法的DOA估计 1引言 多重信号分类(MUSIC) ...
- poj1001求幂
这道题目是实质上就是高精度的乘法,虽然是带小数点的数多少次幂,但是开始我们需要将它变为整数进行求幂,然后再加上小数点,然后要考虑前导0,有效数位问题,做的时候要十分的小心 #include<io ...
- 用django搭建一个简易blog系统(翻译)(三)
06. Connecting the Django admin to the blog app Django 本身就带有一个应用叫作Admin,而且它是一个很好的工具 在这一部分,我们将要激活admi ...
- Ubuntu13.04 Eclipse下编译安装Hadoop插件及使用小例
Ubuntu13.04 Eclipse下编译安装Hadoop插件及使用小例 一.在Eclipse下编译安装Hadoop插件 Hadoop的Eclipse插件现在已经没有二进制版直接提供,只能自己编译. ...
- LDAP查询实例
/// <summary> /// 搜索AD人员 /// </summary> /// <param name="keyWords">搜索部 ...
- Direct2D
Direct2D Direct2D教程III——几何(Geometry)对象 摘要: 目前博客园中成系列的Direct2D的教程有1.万一的 Direct2D 系列,用的是Delphi 20092.z ...