Skip to content
Open

dp #68

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions digit dp.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef double db;
#define debug(x) cout<<#x<<" :: "<<x<<endl;
#define boost1 ios::sync_with_stdio(0)
#define boost2 cin.tie(0)
#define size1 200005
#define mod 1000000007
#define vll vector < ll >
#define vpll vector < pair < ll ,ll> >
#define pii pair < int,int >
#define pll pair < ll,ll >
#define fi first
#define se second
#define pb(x) push_back(x)
#define endl "\n"
#define mem1(x) memset(x,-1,sizeof x)
#define mem(x) memset(x,0,sizeof x)
#define mem63(x) memset(x,63,sizeof x)
ll dp[2][22][10][2][10][513];
int MASK,K,digit[25];

ll fun(int tight,int idx,int prev,int type,int k,int mask){
if(k > K){
return 0;
}
if(idx == 20){
if((mask&MASK) == MASK){
return 1;
}
return 0;
}
ll &res = dp[tight][idx][prev][type][k][mask];

if(res != -1) return res; // ~res == non zero if res == -1

res = 0;

if(!mask){
res += fun(tight|digit[idx]>0,idx+1,0,1,0,0);
}
for(int i=1;i<=9;i++){
if(i!= prev && (tight || (!tight && i <= digit[idx]))){
if(prev < i != type){
res += fun(tight|i<digit[idx],idx+1,i,prev<i,2,mask|(1<<(i-1)));
}else{
res += fun(tight|i<digit[idx],idx+1,i,prev<i,k+1,mask|(1<<(i-1)));
}
}
}

return res;
}

ll func(ll x){

for(int i=19;i>=0;i--){
digit[i] = x%10;
x /= 10;
}
mem1(dp);

return fun(0,0,0,1,0,0);
}

int main()
{
boost1;
//boost2;
int n,m,i,j,t,x,y,w;
ll l,r;
cin>>t;
while(t--){
cin>>m;
MASK = 0;
while(m--){
cin>>x;
MASK = MASK | (1<<(x-1));
}
cin>>K;
cin>>l>>r;
cout<<func(r) - func(l-1)<<endl;
}
return 0;
}
58 changes: 58 additions & 0 deletions find kth no.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;

using namespace __gnu_pbds;




typedef long long ll;
typedef double db;
#define debug(x) cout<<#x<<" :: "<<x<<endl;
#define boost1 ios::sync_with_stdio(0)
#define boost2 cin.tie(0)
#define size1 200005
#define mod 1000000007
#define vl vector < ll >
#define vpl vector < pair < ll ,ll> >
#define pi pair < int,int >
#define pl pair < ll,ll >
#define ff first
#define ss second
#define for(i,a,b) for(ll i=a;i<b;i++)
#define pb(x) push_back(x)
#define endl "\n"

tree< pl , null_type, less< pl >, rb_tree_tag, tree_order_statistics_node_update> s;

ll sum[size1];
int main()
{
// boost1;
// boost2;

ll n,m,i,j,t,b,c,x,y,w,l,r,ans1,ans2;
cin>>n>>t;
// for(i,0,n){
// cin>>sum[i];
// }
// //sum[0] = 0;
// for(i,1,n){
// sum[i] += sum[i-1];
// }

ll ans = 0,tmp,g=0;
//cout<<ans;
for(i,0,n){
cin>>tmp;
s.insert({-g,i});
g += tmp;
y = s.order_of_key({t-g,0});

debug(y);
ans += y;
}
cout<<ans;
return 0;
}
61 changes: 61 additions & 0 deletions hacktor.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef double db;
#define debug(x) cout<<#x<<" :: "<<x<<endl;
#define boost1 ios::sync_with_stdio(0)
#define boost2 cin.tie(0)
#define size1 200005
#define mod 1000000007
#define vll vector < ll >
#define vpll vector < pair < ll ,ll> >
#define pii pair < ll,int >
#define pll pair < ll,ll >
#define fi first
#define se second
#define pb(x) push_back(x)
#define endl "\n"
#define mem1(x) memset(x,-1,sizeof x)
#define mem(x) memset(x,0,sizeof x)
#define mem63(x) memset(x,63,sizeof x)

int a[size1];

int main()
{
boost1;
//boost2;
ll n,m,i,j,t,x,q,y,w,k=1;
vector<ll> v;
cin>>t;
while(t--){
cin>>n>>m>>q;
// mem(a);
map<ll,ll> mp;
for(i=0;i<m;i++){
cin>>x;
a[x] = 1;
v.push_back(x);
}
for(i=0;i<q;i++){
cin>>x;
mp[x]++;
}
ll ans = 0;
for(auto x : mp){
for(i=x.first;i <= n;i += x.first){
if(a[i]){
continue;
}
ans += x.second;
}
}
cout<<"Case #"<<k++<<": "<<ans<<endl;
for(i=0;i<v.size();i++){
a[v[i]] = 0;
}
v.clear();
}
return 0;
}
68 changes: 68 additions & 0 deletions josephusProblem.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef double db;
#define debug(x) cout<<#x<<" :: "<<x<<endl;
#define boost1 ios::sync_with_stdio(0)
#define boost2 cin.tie(0)
#define size1 1005
#define mod 1000000007
#define vll vector < ll >
#define vpll vector < pair < ll ,ll> >
#define pii pair < int,int >
#define pll pair < ll,ll >
#define fi first
#define se second
#define pb(x) push_back(x)
#define endl "\n"
#define mem1(x) memset(x,-1,sizeof x)
#define mem(x) memset(x,0,sizeof x)
#define mem63(x) memset(x,63,sizeof x)

int dp[size1][size1];

int a[size1];
int main()
{
// boost1;
// boost2;
string str,pat;
int n,m,i,j,t,x,y,w,o;
cin>>t;

debug(t);
while(t--){
//cin>>str;
cin>>pat;
cout<<pat<<endl;
// n = str.length();
m = pat.length();

// if(n < m){
// cout<<"Not Found"<<endl;
// continue;
// }
a[0] = 0;
i = 0;
j = 1;
debug(m);
while(j<m){
if(pat[j] == pat[i]){
a[j] = i+1;
j++;
i++;
}else{
//i = a[i-1];
j++;
if(i>0){
i = a[i-1];
}
}
}
for(i=0;i<m;i++){
cout<<a[i]<<" ";
}
}
return 0;
}
102 changes: 102 additions & 0 deletions knuth_Algo_PatternFind.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef double db;
#define debug(x) cout<<#x<<" :: "<<x<<endl;
#define boost1 ios::sync_with_stdio(0)
#define boost2 cin.tie(0)
#define size1 1005
#define mod 1000000007
#define vll vector < ll >
#define vpll vector < pair < ll ,ll> >
#define pii pair < int,int >
#define pll pair < ll,ll >
#define fi first
#define se second
#define pb(x) push_back(x)
#define endl "\n"
#define mem1(x) memset(x,-1,sizeof x)
#define mem(x) memset(x,0,sizeof x)
#define mem63(x) memset(x,63,sizeof x)

int dp[size1][size1];

int a[size1];
int main()
{
// boost1;
// boost2;
string str,pat;
int n,m,i,j,t,x,y,w,o;
cin>>t;

//debug(t);
while(t--){
cin>>str;
cin>>pat;
vector<int> v;
//cout<<pat<<endl;
n = str.length();
m = pat.length();

if(n < m){
cout<<"Not Found"<<endl<<endl;
continue;
}
a[0] = 0;
i = 0;
j = 1;
// debug(m);
mem(a);
while(j<m){
if(pat[j] == pat[i]){
a[j] = i+1;
j++;
i++;
}else{
//i = a[i-1];

if(i>0){
i = a[i-1];
}else{
a[j] = 0;
j++;
}
}
}

j = 0;
i = 0;
while(i<n){

if(j<m && i < n && pat[j] == str[i]){
i++;
j++;
}

if(j == m){
v.pb(i-m);
j = a[j-1];
}

if(i<n && j<m && pat[j] != str[i]){
if(j!=0){
j = a[j-1];
}else{
i++;
}
}
}
if(v.size() == 0){
cout<<"Not Found"<<endl<<endl;
}else{
cout<<v.size()<<endl;
for(i=0;i<v.size();i++){
cout<<v[i]+1<<" ";
}
cout<<endl<<endl;
}
}
return 0;
}