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 1391: [Ceoi2008]order
    BZOJ 4504: K个串
    2019 年百度之星·程序设计大赛
    POJ 2398 Toy Storage (二分 叉积)
    POJ 2318 TOYS (二分 叉积)
    HDU 6697 Closest Pair of Segments (计算几何 暴力)
    HDU 6695 Welcome Party (贪心)
    HDU 6693 Valentine's Day (概率)
    HDU 6590 Code (判断凸包相交)
    POJ 3805 Separate Points (判断凸包相交)
  • 原文地址:https://www.cnblogs.com/playboy307/p/5273463.html
Copyright © 2011-2022 走看看