hdu 5625

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 5625相关的知识,希望对你有一定的参考价值。

Clarke and chemistry

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


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 AA 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, b \in \text{N}^* .
 

 

Input
The first line contains an integer T(1 \le T \le 10) , the number of test cases.
For each test case, the first line contains three integers A, B, C(1 \le A, B, C \le 26) , 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, 1 \le c \le 100 )
 

 

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
 
 
 http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=671&pid=1001 中文题意
枚举 a,b      代码长时间不写 手糙了
今天02网上找模板水过 明天补看

 

#include<iostream>
#include<cstring>
#include<cstdio>
#include<map>
#include<stack>
#include<queue>
#define LL __int64
using namespace std;
int t;
int a,b,c;
char ceshi[30]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char aa[30],bb[30],cc[30];
int aaa[30],bbb[30],ccc[30];
map<char,int> mp1;
map<char,int> mp2;
map<char,int> mp3;
int main()
{
 while(scanf("%d",&t)!=EOF)
 {
     for(int i=1;i<=t;i++)
 {
     mp1.clear();
     mp2.clear();
     mp3.clear();
     scanf("%d%d%d",&a,&b,&c);
     getchar();
     for(int j=1;j<=a;j++)
     {
         scanf("%c %d",&aa[j],&aaa[j]);
         mp1[aa[j]]=aaa[j];getchar();
     }
     for(int j=1;j<=b;j++)
     {
         scanf("%c %d",&bb[j],&bbb[j]);
         mp2[bb[j]]=bbb[j];getchar();
     }
     for(int j=1;j<=c;j++)
     {
         scanf("%c %d",&cc[j],&ccc[j]);
         mp3[cc[j]]=ccc[j];getchar();
     }
     int k=0,g=0,ans;
     int flag=0;
     int ggg1,ggg2;
     for(k=1;k<=99;k++)
     {
         for(g=1;g<=99;g++)
         {
              ans=0;
             for(int kk=0;kk<=25;kk++)
             {
                 if(mp1[ceshi[kk]]*k+mp2[ceshi[kk]]*g==mp3[ceshi[kk]]&&mp3[ceshi[kk]]!=0)
                   ans++;
             }
             if(ans==c)
              {
                  ggg1=k;
                  ggg2=g;
                 flag=1;
                 break;
              }
         }
         if(flag)
            break;
     }
     if(flag)
     printf("%d %d\n",ggg1,ggg2);
     else
     printf("NO\n");

 }
 }
    return 0;
}

  

以上是关于hdu 5625的主要内容,如果未能解决你的问题,请参考以下文章

hdu 3625

HDU4057 Rescue the Rabbit(AC自动机+状压DP)

HDU3247 Resource Archiver(AC自动机+BFS+DP)

POJ - 2778 ~ HDU - 2243 AC自动机+矩阵快速幂

微信小程序代码片段

VSCode自定义代码片段——CSS选择器