试制品 (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 ...
随机推荐
- 为什么使用Ninject?
Ninject 3 学习笔记 一.为什么使用Ninject? 分类: 程序2012-11-10 19:23 2209人阅读 评论(0) 收藏 举报 c#iocNinject框架注入 最近在使用IoC进 ...
- TeamCity vs Jenkins: Which is the Better Continuous Integration (CI) Server for .NET Software Development?
原文:http://www.excella.com/insights/teamcity-vs-jenkins-better-continuous-integration-server So, you’ ...
- boost------signals2的使用1(Boost程序库完全开发指南)读书笔记
signals2基于Boost的另一个库signals,实现了线程安全的观察者模式.在signals2库中,观察者模式被称为信号/插槽(signals and slots),他是一种函数回调机制,一个 ...
- iOS基础 - 控制器管理
一.Container 一个iOS的app很少只由一个ViewController组成,除非这个app极其简单.当app中有多个ViewController的时候,我们就需要对这些ViewContro ...
- POJ 1002 UVA 755 487--3279 电话排序 简单但不容易的水题
题意:给你许多串字符串,从中提取电话号码,输出出现复数次的电话号码及次数. 以下是我艰难的AC历程:(这题估计是我刷的题目题解次数排前的了...) 题目不是很难理解,刚开始想到用map,但stl的ma ...
- vijos1060 隔板法
排列组合问题 之前没有学过隔板法,随便学习了一下 其实挺好理解的 附上题解: 先只考虑一种球:因为有n个盒子每个盒子可以放任意多球,还可以空出来任意多球.所以可以考虑为n+1个盒子,最后一个盒子里面是 ...
- D15
T3: 树上的递归,很裸 T4:题目模型:二分染色问题 以及根据ccy大神指点,理解树形dp可以从 没有上司的舞会 聚会的快乐 这两题入手
- jQuery中的DOM操作《思维导图》
首先,是关于jQuery中的DOM操作的<思维导图>,请点击这里:jQuery中的DOM操作 列表框的左右选项移动 <html> <head> <title& ...
- 如何本地测试例如QQ登录等第三方接口
前言:现在基本是个网站就会集成第三方的一些接口,比如QQ登录.分享等等.但是在开发的时候,尤其是没有这方面经验的开发人员来说,调试流程时会显得迷茫,不知道怎么调试.这里就个人的这方面学习摸索做一个总结 ...
- C++内存中的封装、继承、多态(上)
C++内存中的封装.继承.多态(上) 继我的上一篇文章:浅谈学习C++时用到的[封装继承多态]三个概念 此篇我们从C++对象内存布局和构造过程来具体分析C++中的封装.继承.多态. 一.封装模型的内存 ...