Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* count how many distinct subsequence of length j of a string upto position i */
- string s;int n;
- ll dp[105][105];
- void giveres(){
- int last[300];
- mem(last,-1);
- for(int i = 1;i<=n;i++){
- for(int j = 1;j<=i;j++){
- dp[i][j] = dp[i-1][j] + dp[i-1][j-1] ;
- if(last[s[i-1]]!=-1)dp[i][j] = dp[i][j] - dp[last[s[i-1]]][j-1];
- }
- last[s[i-1]] = i-1;
- }
- }
- void print(){
- for(int i = 0;i<=n;i++){
- for(int j = 0;j<=i;j++){
- cout<<i<<" "<<j<<" "<<dp[i][j]<<endl;
- }
- }
- }
- int main()
- {
- booster()
- ///read("input.txt");
- ll k;
- cin>>n>>k;
- cin>>s;
- ll ans = 0;
- for(int i = 0;i<=n;i++)
- dp[i][0] = 1;
- giveres();
- //print();
- for(int i = n;i>=0;i--){
- // cout<<i<<" "<<dp[n][i]<<endl;
- ans+=(min(dp[n][i],k))*(n-i);
- k-=min(dp[n][i],k);
- if(!k)break;
- }
- if(!k)cout<<ans;
- else cout<<-1;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement