fork download
  1. #include <cmath>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <iostream>
  5. #include <algorithm>
  6. using namespace std;
  7.  
  8. string s ;
  9. vector< vector< int > > v ;
  10. int n, ans( 0 ), has[ 26 ] ;
  11.  
  12. void sol( int i, int mask ){
  13. if( i == n ){
  14. int ar[ 26 ]={};
  15. for( int i = 0 ; i < 17 ; i++ ){
  16. if( mask&(1LL<<i) ){
  17. for( int j = 0 ; j < 26 ; j++ )
  18. ar[ j ] += v[ i ][ j ] ;
  19. }
  20. }
  21. for( int i = 0 ; i < 26 ; i++ )
  22. if( has[ i ] < ar[ i ] )
  23. return ;
  24. ans = max( ans, __builtin_popcount(mask));
  25. }
  26. else{
  27. sol( i + 1, mask | (1LL<<i) ) ;
  28. sol( i + 1, mask ) ;
  29. }
  30. }
  31.  
  32. int main() {
  33. cin >> s >> n ;
  34. for( char c : s )
  35. has[ c - 'a' ]++ ;
  36. v.resize( n, vector< int >( 26, 0 ) ) ;
  37. for( int i = 0 ; i < n ; i++ ){
  38. string tmp ;
  39. cin >> tmp ;
  40. for( char c : tmp )
  41. v[ i ][ c - 'a' ]++ ;
  42. }
  43. sol( 0, 0 ) ;
  44. cout << ans << endl ;
  45. return 0;
  46. }
  47.  
Success #stdin #stdout 0s 4348KB
stdin
abcdef
3
ab
abc
def
stdout
2