杭电 hdu 5625 Clarke and chemistry【水题】

来源:互联网 发布:网页美工视频教程 编辑:程序博客网 时间:2024/05/22 05:06

Clarke and chemistry

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 183    Accepted Submission(s): 102


Problem Description
Clarke is a patient with multiple personality disorder. One day, Clarke turned into a junior student and took a chemistry exam.
But he did not get full score in this exam. He checked his test paper and found a naive mistake, he was wrong with a simple chemical equation balancer.
He was unhappy and wanted to make a program to solve problems like this.
This chemical equation balancer follow the rules:
Two valences A combined by |A| elements and B combined by |B| elements.
We get a new valence C by a combination reaction and the stoichiometric coefficient of C is 1. Please calculate the stoichiometric coefficient a of A and b of B that aA+bB=C,  a,bN.
 


Input
The first line contains an integer T(1T10), the number of test cases.
For each test case, the first line contains three integers A,B,C(1A,B,C26), denotes |A|,|B|,|C| respectively.
Then A+B+C lines follow, each line looks like X c, denotes the number of element X of A,B,C respectively is c. (X is one of 26 capital letters, guarantee X of one valence only appear one time, 1c100)
 


Output
For each test case, if we can balance the equation, printa and b. If there are multiple answers, print the smallest one, a is smallest then b is smallest. Otherwise print NO.
 


Sample Input
22 3 5A 2B 2C 3D 3E 3A 4B 4C 9D 9E 92 2 2A 4B 4A 3B 3A 9B 9
 


Sample Output
2 3NOHint:The first test case, $a=2, b=3$ can make equation right. The second test case, no any answer.


思维缜密一点,写代码的时候多考虑一点,很简单的一个题目:

#include<stdio.h>#include<string.h>using namespace std;int a[26];int b[26];int c[26];int vis[26];int main(){    int t;    scanf("%d",&t);    while(t--)    {        memset(a,0,sizeof(a));        memset(b,0,sizeof(b));        memset(c,0,sizeof(c));        int aa,bb,cc;        scanf("%d%d%d",&aa,&bb,&cc);        for(int i=0;i<aa;i++)        {            char k[2];            int date;            scanf("%s",k);            scanf("%d",&date);            a[k[0]-'A']=date;        }        for(int i=0;i<bb;i++)        {             char k[2];            int date;            scanf("%s",k);            scanf("%d",&date);            b[k[0]-'A']=date;        }        for(int i=0;i<cc;i++)        {            char k[2];            int date;            scanf("%s",k);            scanf("%d",&date);            c[k[0]-'A']=date;            vis[k[0]-'A']=1;        }        int ok=0;        int zhongzhi=0;        int x;        int y;        for(int i=1;i<2000;i++)        {            for(int j=1;j<2000;j++)            {                for(int k=0;k<26;k++)                {                    if(a[k]!=0||b[k]!=0)                    {                        if(c[k]==0)                        {                            zhongzhi=1;                            printf("NO\n");                            break;                        }                    }                    if(vis[k]==1)                    {                        //printf("%d\n",k);                        if(a[k]*i+b[k]*j==c[k])                        ok=1;                        else                        {                            ok=0;                            break;                        }                    }                }                if(ok==1)                {                    x=i;                    y=j;                    break;                }                if(zhongzhi==1)break;            }            if(ok==1||zhongzhi==1)break;        }        if(ok==1)        {            printf("%d %d\n",x,y);        }        if(ok==0)        {            if(zhongzhi==0)            printf("NO\n");        }    }}




0 0
原创粉丝点击