pastebin

Paste Search Dynamic
Recent pastes
strung ele
  1. #pragma GCC optimize ("Ofast,unroll-loops")
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. #define pb push_back
  5. #define f(i,a,b) for(ll i = (ll)a; i < (ll)b; i++)
  6. typedef long long ll;
  7. #define ff first
  8. #define ss second
  9. #define fastio ios_base::sync_with_stdio(0); cin.tie(0)
  10. typedef vector<int > vi;
  11. typedef vector<ll > vl;
  12. #define trace(...) fff(#__VA_ARGS__, __VA_ARGS__)
  13. template<typename t> void fff(const char* x, t&& val1) { cout<<x<< " : "<<val1<<"n";}
  14. template<typename t1, typename... t2> void fff(const char* x, t1&& val1, t2&&... val2){
  15.     const char* xd=strchr(x+1, ',');
  16.     cout.write(x, xd-x)<<" : "<<val1<<" | ";
  17.     fff(xd+1, val2...);
  18. }
  19. ll mod = 1000000000 + 9;
  20. mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
  21. int add(int a, int b){
  22.     if(a + b >= mod){
  23.         return a + b - mod;
  24.     }
  25.     return a + b;
  26. }
  27. int rem(int a, int b){
  28.     if( a <= b){
  29.         return a - b + mod;
  30.     }
  31.     return a - b;
  32. }
  33. int mul(int a, int b){
  34.     return (long long) (a * b) % mod;
  35. }
  36. int A[1 << 17], padre[1 << 17];
  37. int main(){
  38.     fastio;
  39.     map<string, int > mapa;
  40.     string ele[110] = {"","H","He","Li","Be","B","C","N","O","F","Ne","Na","Mg","Al","Si","P","S","Cl","Ar","K","Ca","Sc","Ti","V","Cr","Mn","Fe","Co","Ni","Cu","Zn","Ga","Ge","As","Se","Br","Kr","Rb","Sr","Y","Zr","Nb","Mo","Tc","Ru","Rh","Pd","Ag","Cd","In","Sn","Sb","Te","I","Xe","Cs","Ba","La","Ce","Pr","Nd","Pm","Sm","Eu","Gd","Tb","Dy","Ho","Er","Tm","Yb","Lu","Hf","Ta","W","Re","Os","Ir","Pt","Au","Hg","Tl","Pb","Bi","Po","At","Rn","Fr","Ra","Ac","Th","Pa","U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm"};
  41.     f(i, 0, 110){
  42.         mapa[ele[i]] = i;
  43.     }
  44.     int n, k; cin >> n >> k;
  45.     vi v, sum, x;
  46.     f(i, 0, n){
  47.         string a; cin >> a;
  48.         v.pb(mapa[a]);
  49.     }
  50.     sum.pb(0);
  51.     map<int, int > e;
  52.     f(i, 0, k){
  53.         string a; cin >> a;
  54.         e[mapa[a]] = i + 1;
  55.         x.pb(mapa[a]);
  56.         sum.pb(mapa[a] + sum[i]);
  57.     }
  58.     padre[0] = -1;
  59.     f(i, 1, 1 <<n){
  60.         A[i] = -1; padre[i] = -1;
  61.         for(int sub = i; sub > 0; sub = (sub - 1)and(i)){
  62.             int k = sub, t = 0;
  63.             f(j, 0, n){
  64.                 if((k%2) or 0) t += v[j];
  65.                 k = k >> 1;
  66.             }
  67.             if(e[t] and A[i - sub] == sum[e[t]]){
  68.                 A[i] = e[t] + 1;
  69.                 padre[i] = i - sub;
  70.                 if(i == (1 << n) - 1){
  71.                     cout << "YES" << "n";
  72.                     while(padre != 0){
  73.                         int k = i - padre[i], cond = 1;
  74.                         f(j, 0, n){
  75.                             if((k%2) or 0){
  76.                                 if(cond) cond = 0;
  77.                                 else cout << '+';
  78.                                 cout << ele[v[j]];
  79.                             }
  80.                         }
  81.                         cout << "->" << ele[x[e[i - padre[i]] - 1]] << "n";
  82.                         i = padre[i];
  83.                     }
  84.                     return 0;
  85.                 }
  86.             }
  87.         }
  88.     }
  89.     cout << "NO";  
  90. }
Parsed in 0.052 seconds