【搜索】核反应
来源:互联网 发布:windows查看tcp连接数 编辑:程序博客网 时间:2024/05/01 06:02
核反应
描述
现在我们有一堆核反应的方程式,但是遗憾的是他们的生成物部分的信息遗失了。好在我们通过以往的资料知道了总共消耗掉的反应物信息。你能根据核反应的原子序数守恒,确定这些信息是否属实?
输入
输入数据可能包含若干组数据。
每组数据由包含两个数N,M的一行开始,N和M分别表示消耗掉的反应物个数和生成物个数。
接下来有两行,第一行有N个数,第二行有M个数,分别表示每个反应物和生成物。
输出
对于每组数据如果信息属实输出”YES”,否则输出”NO”。
输入样例
10 3
Mn Co Li Mg C P F Zn Sc K
Sn Pt Y
2 1
H H
He
2 2
Bk Fm
Cf Es
输出样例
YES
YES
NO
数据规模
所有数据,1<=N,M<=17。
可能用到的元素表:
"H","He","Li","Be","B","C","N","O","F","Ne",
"Na","Mg","Al","Si","P","S","Cl","Ar","K","Ca",
"Sc","Ti","V","Cr","Mn","Fe","Co","Ni","Cu",
"Zn","Ga","Ge","As","Se","Br","Kr","Rb","Sr",
"Y","Zr","Nb","Mo","Tc","Ru","Rh","Pd","Ag",
"Cd","In","Sn","Sb","Te","I","Xe","Cs","Ba",
"La","Ce","Pr","Nd","Pm","Sm","Eu","Gd",
"Tb","Dy","Ho","Er","Tm","Yb","Lu","Hf","Ta",
"W","Re","Os","Ir","Pt","Au","Hg","Tl","Pb",
"Bi","Po","At","Rn","Fr","Ra","Ac","Th","Pa",
"U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm"
第一组样例的解释:
Mn+C+K->Sn
Co+Zn+Sc->Pt
Li+Mg+P+F->Y
类似于小木棍。
剪枝比较多。
#include <iostream>#include <algorithm>#include <map>#include <cstdio>#include <string>std::map<std::string,long> name;char element[200][10] = {"","H","He","Li","Be","B","C","N","O","F","Ne","Na","Mg","Al","Si","P","S","Cl","Ar","K","Ca","Sc","Ti","V","Cr","Mn","Fe","Co","Ni","Cu","Zn","Ga","Ge","As","Se","Br","Kr","Rb","Sr","Y","Zr","Nb","Mo","Tc","Ru","Rh","Pd","Ag","Cd","In","Sn","Sb","Te","I","Xe","Cs","Ba","La","Ce","Pr","Nd","Pm","Sm","Eu","Gd","Tb","Dy","Ho","Er","Tm","Yb","Lu","Hf","Ta","W","Re","Os","Ir","Pt","Au","Hg","Tl","Pb","Bi","Po","At","Rn","Fr","Ra","Ac","Th","Pa","U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm"};long A[20];long B[20];char tmp[10];bool used[20];bool flag = false;long n=1;long m;void dfs(long u,long l,long r){ if (r > m){flag = true;return;}if (u > n)return;if (!used[u]){if (l + A[u] == B[r]){used[u] = true;dfs(1,0,r+1);if (flag)return;used[u] = false;return;}if (l + A[u] < B[r]){used[u] = true;dfs(u+1,l+A[u],r);if (flag)return;used[u] = false;}if (l + A[u] > B[r]){return;}}dfs(u+1,l,r);}int main(){freopen("nuclear.in","r",stdin);freopen("nuclear.out","w",stdout);for (long i=1;i<sizeof(element)/sizeof(element[1])+1;i++){name[element[i]] = i;}while (scanf("%ld%ld",&n,&m)==2){for (long i=1;i<n+1;i++)used[i] = false;if (n < m){printf("NO\n");continue;}long l = 0;A[0] = B[0] = 0;for (long i=1;i<n+1;i++){scanf("%s",tmp);long tmp2 = name[tmp];l += tmp2;A[++A[0]] = tmp2;}long r = 0;for (long i=1;i<m+1;i++){scanf("%s",tmp);long tmp2 = name[tmp];r += tmp2;B[++B[0]] = tmp2;}if (l - r){printf("NO\n");continue;}std::sort(A+1,A+1+A[0]);std::sort(B+1,B+1+B[0]);if (B[1] < A[1] || B[B[0]] < A[A[0]]){printf("NO\n");continue;}flag = false;dfs(1,0,1);if (flag)printf("YES\n");elseprintf("NO\n");}return 0;}
- 【搜索】核反应
- ecnu 核反应控制 数学
- 低能核反应(LENR),现实主义和前景
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 交互式图形图像软件
- 转 Python3中文教程
- DLNA的介绍
- 内核中随处可见的等待队列详解2
- 内核中随处可见的等待队列详解3
- 【搜索】核反应
- 数据结构&算法实践—【排序|选择排序】选择排序
- Find–atime –ctime –mtime的用法与区别总结
- emacs中用gdb调试
- 【转载】FI中 BSEG簇表 和BSIS、BSAS、BSID、BSAD、BSIK、BSAK六个表的关系
- 博客开通
- 扣费软件的运转机制与原理解析
- 关于error C2018: unknown character '0xa1'错误的说明
- 基于tcp/ip的网络数据传输接收端