Advertisement
at3107

google-subsequence-of-sizeK

Nov 8th, 2020
2,583
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.15 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int hell=1000000007;
  4. int com(int n,int r)
  5. {
  6.     if(r>n)return 0;
  7.     long ans=1;
  8.     r=min(r,n-r);
  9.     for(int i=n;i>=n-r+1;i--)ans=(ans*i);
  10.     for(int i=1;i<=r;i++)ans=(ans/i);
  11.     int fin=ans%hell;
  12.     return ans;
  13. }
  14.  
  15. int main()
  16. {
  17.     int tt;
  18.     cin>>tt;
  19.     while(tt--)
  20.     {
  21.         int n,k;
  22.         cin>>n>>k;
  23.         string s;
  24.         cin>>s;
  25.         map<char,int> ma;
  26.         for(auto i:s)ma[i]++;
  27.         vector<pair<int,char>> v;
  28.         for(auto i:ma)v.push_back({i.second,i.first});
  29.         sort(v.begin(),v.end());
  30.         int nn=v.size();
  31.         int x=0,y=-1;
  32.         int ans=1;
  33.         for(int i=nn-1;i>=0;i--)
  34.         {  
  35.             x++;
  36.             if(x>=k)
  37.             {
  38.                 y=v[i].first;
  39.                 break;
  40.             }
  41.         }
  42.         for(int i=nn-1;i>=0;i--)
  43.         {  
  44.             if(v[i].first==y)break;
  45.             k--;
  46.             ans=(ans*v[i].first)%hell;
  47.         }
  48.         x=0;
  49.         for(int i=nn-1;i>=0;i--)
  50.         {  
  51.             if(v[i].first==y)x++;
  52.         }
  53.         ans=(ans*com(x,k))%hell;
  54.         for(int i=0;i<k;i++)ans=(ans*y)%hell;
  55.         cout<<ans<<endl;
  56.     }  
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement