zoukankan      html  css  js  c++  java
  • hdoj--5625--Clarke and chemistry(枚举)

    Clarke and chemistry

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


    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, print a and b. If there are multiple answers, print the smallest one, a is smallest then b is smallest. Otherwise print NO.
     

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

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

    Source
     
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int A[27],B[27],C[27];
    int main()
    {
    	int t;
    	scanf("%d",&t);
    	while(t--)
    	{
    		int a,b,c;
    		scanf("%d%d%d",&a,&b,&c);
    		char op[2];
    		bool flag=true;
    		int d,maxx=0;
    		memset(B,0,sizeof(B));
    		memset(C,0,sizeof(C));
    		memset(A,0,sizeof(A));
    		for(int i=0;i<a;i++)
    		{
    			scanf("%s%d",op,&d);
    			A[op[0]-'A']=d;
    		}
    		for(int i=0;i<b;i++)
    		{
    			scanf("%s%d",op,&d);
    			B[op[0]-'A']=d;
    		}
    		for(int i=0;i<c;i++)
    		{
    			scanf("%s%d",op,&d);
    			C[op[0]-'A']=d;
    //			maxx=max(maxx,d/A[op[0]-'A']);
    //			maxx=max(maxx,d/B[op[0]-'A']);
    		}
    		int i,j,k;
    		int min,x,y;
    		for(i=1;i<=1000&&flag;i++)
    		for(j=1;j<=1000;j++)
    		{
    			int s;
    			for(s=0;s<26;s++)
    			{
    				x=i*A[s]+j*B[s];
    				y=C[s];
    				if(x==y)
    				continue;
    				else break;
    			}
    			if(s==26) flag=false;
    			if(!flag) break;
    		}
    		if(!flag) printf("%d %d
    ",i-1,j);
    		else printf("NO
    ");
    	}
    	return 0;
    }


  • 相关阅读:
    BZOJ 1441: Min exgcd
    luogu 1876 开灯 约数+打表
    luogu 1414 又是毕业季II 约数相关
    BZOJ1968: [Ahoi2005]COMMON 约数研究 线性筛
    luogu 3441 [POI2006]MET-Subway 拓扑排序+思维
    Comet OJ
    CF990G GCD Counting 点分治+容斥+暴力
    CF873F Forbidden Indices 后缀自动机+水题
    CF293E Close Vertices 点分治+树状数组
    CF1101D GCD Counting 点分治+质因数分解
  • 原文地址:https://www.cnblogs.com/playboy307/p/5273463.html
Copyright © 2011-2022 走看看