zoukankan      html  css  js  c++  java
  • 第八届acm省赛 A挑战密室(模拟)

    10406: A.挑战密室

    Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 29  Solved: 10 [Submit][Status][Web Board]

    Description

    R组织的特工Dr. Kong 为了寻找丢失的超体元素,不幸陷入WTO密室。Dr. Kong必须尽快找到解锁密码逃离,否则几分钟之后,WTO密室即将爆炸。

     

    Dr. Kong发现密室的墙上写了许多化学方程式中。化学方程式,也称为化学反应方程式,是化学式表示物质化学反应的式子。化学方程式反映的是客观事实。因此书写化学方程式要遵守两个原则:一是必须以客观事实为基础;二是要遵守质量守恒定律。

    化学方程式不仅表明了反应物、生成物和反应条件。同时,化学计量数代表了各反应物、生成物物质的量关系,通过相对分子质量或相对原子质量还可以表示各物质之间的质量关系,即各物质之间的质量比。对于气体反应物、生成物,还可以直接通过化学计量数得出体积比。例如:2NaOH+H2SO4=Na2SO4+2H2O

     

    经过多次试探、推理,Dr. Kong发现密码是4位数字,就隐藏在化学方程式等号后的第一个分子中,其分子量就可能是密码(若分子量不足4位,前面加0)。

    好在Dr. Kong还记得墙上各化学方程式用到的化学元素的原子量如下:

     

    N

    C

    O

    Cl

    S

    H

    Al

    Ca

    Zn

    Na

    14

    12

    16

    35

    32

    2

    27

    40

    65

    23

     

    你能帮Dr. Kong尽快找到密码吗?

    Input

    第一行: K     表示有K化学方程式;

    接下来有K行,每行为一个化学方程式

    2≤K≤8  ,化学方程式的长度不超过50, 所有原子,分子的数量不超过9.小括号最多一层.

    Output

    对于每个化学方程式输出一行:即密码。

    Sample Input

    3
    2C+O2=2CO
    2NaOH+H2SO4=Na2SO4+2H2O
    Ca2CO3+H2O=Ca2(OH)2+CO2
    

    Sample Output

    0056
    0142
    0116
    题解:注意括号,前面系数,很容易出错,不过一遍A很高兴呐;
    代码:
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    #define mem(x,y) memset(x,y,sizeof(x))
    #define SI(x) scanf("%d",&x)
    #define SL(x) scanf("%lld",&x)
    #define  PI(x) printf("%d",x)
    #define  PL(x) printf("%lld",x)
    #define P_ printf(" ")
    const int INF=0x3f3f3f3f;
    const double PI=acos(-1.0);
    char s[55];
    int c[30];
    int main(){
    	int K;
    	SI(K);
    	c['N'-'A']=14;
    	c['C'-'A']=12;
    	c['O'-'A']=16;
    	c['S'-'A']=32;
    	c['H'-'A']=2;
    	while(K--){
    		scanf("%s",s);
    		int flot=0,ans=0,temp,cur=0,k=1,kh=0,x=0;
    		int len=strlen(s);
    		
    		for(int i=0;i<len;i++){
    			if(s[i]=='='){
    				flot=1;continue;
    			}
    			if(!flot)continue;
    			if(isdigit(s[i])){
    				if(!cur){
    					k=s[i]-'0';continue;
    				}
    				else if(kh==1){
    					x=temp*(s[i]-'0');cur=0;continue;
    				}
    				ans+=temp*(s[i]-'0');cur=0;
    			}
    			else if(isalpha(s[i])){
    				if(kh==1&&cur)x+=temp;
    				else if(cur)ans+=temp;
    				if(i+1<len&&s[i]=='C'&&s[i+1]=='l'){
    					temp=35;i++;
    				}
    				else if(i+1<len&&s[i]=='A'&&s[i+1]=='l'){
    					temp=27;i++;
    				}
    				else if(i+1<len&&s[i]=='C'&&s[i+1]=='a'){
    					temp=40;i++;
    				}
    				else if(i+1<len&&s[i]=='Z'&&s[i+1]=='n'){
    					temp=65;i++;
    				}
    				else if(i+1<len&&s[i]=='N'&&s[i+1]=='a'){
    					temp=23;i++;
    				}
    				else temp=c[s[i]-'A'];
    				cur=1;
    			}
    			else if(s[i]=='('){
    				kh=1;
    				if(cur)ans+=temp;
    				cur=0;
    			}
    			else if(s[i]==')'){
    				if(cur)x+=temp;
    				cur=0;
    				if(isdigit(s[i+1]))ans+=x*(s[i+1]-'0'),i++;
    				else ans+=x;
    				cur=0;kh=0;
    			}
    			else break;
    		}
    		if(cur)ans+=temp;cur=0;
    		printf("%04d
    ",ans*k);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    【SQL】开窗函数简介
    【博客园美化】参考链接汇总(持续更新中……)
    【SQL】牛客网SQL试题练习(更新到11题)
    【SQL】SQL和MySQL语句的执行顺序
    【数据分析项目】淘宝用户行为分析【SQL+Tableau】
    【数据分析项目】婴儿商品消费情况分析【Excel】
    【Sublime Text 3】前端常用快捷键
    【Excel】常用快捷键
    MongoDB 规范
    mongodb 常用命令
  • 原文地址:https://www.cnblogs.com/handsomecui/p/5093184.html
Copyright © 2011-2022 走看看