Compare commits

..

4 Commits

Author SHA1 Message Date
a288f0c5ec fix(P3102): 修复动态规划计算中的模运算错误
确保在计算结果为负数时正确处理模运算,避免输出错误
2025-11-14 17:05:24 +08:00
9f190cb94c fix(P3102): 修正动态规划计算逻辑和输出格式
将加法操作改为乘法操作以正确计算组合数,并简化输出结果的格式
2025-11-14 17:05:09 +08:00
3c29bca56e refactor(P3102): 重构字符串处理逻辑为动态规划实现
将原有的暴力匹配算法重构为基于动态规划的解决方案,提高计算效率
添加了调试输出和模数运算支持
2025-11-14 17:04:30 +08:00
66740ddb77 feat: 添加P8905.cpp和P3102.cpp两个题目解答
添加了两个编程题目的解答代码文件,分别处理图论问题和字符串匹配问题
2025-11-14 11:28:11 +08:00
2 changed files with 85 additions and 0 deletions

57
src/11/13/P3102.cpp Normal file
View File

@ -0,0 +1,57 @@
#include <algorithm>
#include <cstdint>
#include <cstdio>
#include <iostream>
#include <istream>
#include <string>
#include <vector>
using ll = int64_t;
#define printf
const ll p=2014;
std::string s;
ll n;
std::vector<std::vector<ll>> dp;
static inline ll dfs(const ll l,const ll r){
struct S{
const ll &l,&r,&dp;
S(const ll&l,const ll&r,const ll&dp):l(l),r(r),dp(dp){
printf("dfs l=%lld, r=%lld, START\n",l,r);
}
~S(){
printf("dfs l=%lld, r=%lld, ret=%lld\n",l,r,dp);
}
}raii(l,r,dp[l][r]);
const ll nlen=r-l+1;
if(l>r)return 0;
if(dp[l][r])return dp[l][r];
dp[l][r]=1;
if(nlen<=2)return dp[l][r]=1;
for(ll i=l+1;i<=r;i++){
if(i-l==r-i+1)continue;
const ll clen=std::min(i-l,r-i+1);
if(i-l==1&&r-i+1==1)continue;
for(ll j=0;j<clen;j++){
if(s[l+j]!=s[i+j])goto nxt1;
}
dp[l][r]=((i-l>r-i+1?dfs(l, i-1):dfs(i, r))+dp[l][r])%p;
nxt1:;
for(ll j=0;j<clen;j++){
if(s[i-1-j]!=s[r-j])goto nxt2;
}
dp[l][r]=((i-l>r-i+1?dfs(l, i-1):dfs(i, r))+dp[l][r])%p;
nxt2:;
}
return dp[l][r];
}
int main(){
std::iostream::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin>>s;
n=s.size();
s=' '+s;
dp.resize(n+1,std::vector<ll>(n+1));
std::cout<<(dfs(1,n)-1+p)%p<<"\n";
}

28
src/11/13/P8905.cpp Normal file
View File

@ -0,0 +1,28 @@
#include <cstdint>
#include <iostream>
#include <istream>
#include <vector>
using ll = int64_t;
ll n,m;
struct P{
ll u,v;
};
std::vector<std::vector<P>> a;
std::vector<ll> f;
int main(){
std::iostream::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin>>n>>m;
a.resize(n+1);
f.resize(n+1);
for(ll i=1;i<=m;i++){
ll u,v;
std::cin>>u>>v;
f[u]++,f[v]++;
a[u].emplace_back(v);
a[v].emplace_back(u);
}
}