diff --git a/src/10/22/P5835.cpp b/src/10/22/P5835.cpp index 9684271..ef94756 100644 --- a/src/10/22/P5835.cpp +++ b/src/10/22/P5835.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include using ll = int64_t; @@ -29,7 +30,7 @@ static inline ll merge(std::vector&num,std::vector&tmp,ll l,ll mid,ll r) ll cnt=0; ll i=l,j=mid+1,k=l; while(i<=mid&&j<=r){ - if(num[i]<=num[j]){ + if(num[i] +#include +#include +#include +#include +using ll = int64_t; + +const ll maxn = 1e7+7; +std::bitset isnot; +ll nxtpos[maxn]; + +int main(){ + std::iostream::sync_with_stdio(false); + std::cin.tie(nullptr); + + for(ll i=1;i=1;i--){ + static ll last = maxn; + last = (isnot[i]?last:i); + nxtpos[i]=last; + } + ll t; + std::cin>>t; + while(t--){ + ll x; + std::cin>>x; + if(isnot[x]){ + std::cout<<"-1\n"; + continue; + } + x++; + std::cout< +#include +#include +#include +using ll = int64_t; +using int128=__int128; +const ll maxn = 107,p=998244353; +ll n,m,k,v[maxn],sa[maxn],ans; +static inline ll popcount(int128 n){ + ll ans=0; + while(n){ + ans++; + n-=(n&-n); + } + return ans; +} +static inline void getans(int128 add){ + // printf("getans %lld popcount=%lld\n",add,popcount(add)); + if(popcount(add)>k){ + // printf("popcount >k\n"); + return; + } + ll nans=1; + for(ll i=1;i<=n;i++){ + nans=nans*v[sa[i]]%p; + } + ans=(ans+nans)%p; +} + +static inline void dfs(ll idx,int128 add){ + // printf("dfs %lld %lld\n",idx, add); + if(idx>n){ + getans(add); + return; + } + for(ll i=0;i<=m;i++){ + sa[idx]=i; + dfs(idx+1,add+(1ll<>n>>m>>k; + for(ll i=0;i<=m;i++){ + std::cin>>v[i]; + } + dfs(1, 0); + std::cout<