From a339d17df594b41b22d4e338a88702552d0c2e27 Mon Sep 17 00:00:00 2001 From: Zengtudor Date: Thu, 23 Oct 2025 17:59:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0P7960=E5=92=8CP7961?= =?UTF-8?q?=E9=A2=98=E8=A7=A3=E5=B9=B6=E4=BC=98=E5=8C=96P5835=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加两道新题目的解决方案: 1. P7960.cpp实现数字7相关筛选算法 2. P7961.cpp实现组合数学问题的DFS解法 优化P5835.cpp的逆序对计算: - 修改合并排序的比较条件 - 改进权重分配逻辑 - 增加代码可读性和注释 --- src/10/22/P5835.cpp | 19 +++++++++++------ src/10/23/P7960.cpp | 44 ++++++++++++++++++++++++++++++++++++++ src/10/23/P7961.cpp | 52 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+), 6 deletions(-) create mode 100644 src/10/23/P7960.cpp create mode 100644 src/10/23/P7961.cpp 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<