试制品 (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 ...
随机推荐
- Effective C++(17) 以独立语句将newed对象置入智能指针
问题聚焦: 使用了资源管理对象(如智能指针),就一定是安全的吗?显然不是. 资源泄露发生可能在于,在“资源被创建”和“资源被转换为资源管理对象”两个时间点之间有可能发生异常干扰. 看下 ...
- Weapsy 分析网站架构
Weapsy 分析(一)网站架构 这个项目看了好久了,但是老没时间写一些分析心得.下班后想了想,事情也不能老拖着,还是得做. 如图所示:Weapsy由5个项目所组成,有点可惜了,没有测试的项目,说明一 ...
- Web应用架构的新趋势
系统架构:Web应用架构的新趋势---前端和后端分离的一点想法 最近研究servlet,看书时候书里讲到了c/s架构到b/s架构的演变,讲servlet的书都很老了,现在的b/s架构已经不是几年前 ...
- c# UDP/TCP协议简单实现(简单聊天工具)
长时间没有摸这两个协议,写个代码温习下 下面是界面 [服务器界面] [登陆界面] [好友列表界面(我登陆了2个)] [聊天界面] 下面大致讲解下用到的内容 1.用户登陆于服务器通信用到的tcp协议,服 ...
- [google面试CTCI] 2-2 找出链表的倒数第n个节点元素
[链表] Q:Implement an algorithm to find the nth to last element of a singly linked list . 题目:找出链表的倒数第 ...
- 在MVC中添加异常增加日志
MVC的结构非常棒,基本你能想到注入的地方都可以找到地方,譬如IActionFilter,IResultFilter,IAuthorizationFilter以及IExceptionFilter 以下 ...
- C# ToString格式控制符
C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025 E 科学型 25000.ToString ...
- Remobjects使用经验
RemObjects RemObjects提示:我们相信本文是正确的,但我们不做任何保证.在此感谢Henrick 写的文章,很高兴在此发表. 介绍RemObjects是功能强大可扩展的远程框架;但是当 ...
- MapXtreme+Asp.net 动态轨迹(请求大神指点)
功能简介:在MapXtreme+Asp.net的环境下实现轨迹回放功能,经过两天的努力基本实现此功能.但还有部分问题需要解决,求大神们指点迷津,问题会在结尾处提出. 客户端前台页面 <asp:S ...
- solrcloud集群部署
Zookeeper安装 Zookeeper的安装和配置十分简单, 既可以配置成单机模式, 也可以配置成集群模式. 下面将分别进行介绍. 注意防火墙和selinux,关闭后进行如下配置,由于是Java写 ...