refactor: 重构并移动代码文件位置

将P11233.cpp从7/28目录移动到10/28目录并实现新功能
添加P9753.cpp解决括号匹配计数问题
This commit is contained in:
Zengtudor 2025-10-28 22:13:56 +08:00
parent e48cc83bfb
commit 4e419a46c7
3 changed files with 93 additions and 3 deletions

40
src/10/27/P9753.cpp Normal file
View File

@ -0,0 +1,40 @@
#include <cstdint>
#include <cstdio>
#include <iostream>
#include <istream>
#include <stack>
#include <string>
using ll = int64_t;
ll n,ans;
std::string s;
const ll maxn = 2e6+5;
ll dp[maxn],end[maxn];
int main(){
std::iostream::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin>>n;
std::cin>>s;
s='\0'+s;
struct S{
ll num,pos,ans;
};
std::stack<S> stk;
for(ll i=1;i<=n;i++){
if(stk.size() && stk.top().num==s[i]){
if(stk.size()==1){
end[i]+=end[stk.top().pos-1]*(ans-stk.top().ans);
ans+=end[i];
}
ans+=1;
end[i]=ans;
stk.pop();
}else{
stk.emplace(s[i],i,ans);
}
printf("i=%lld, ans=%lld, end=%lld\n",i,ans,end[i]);
}
std::cout<<ans<<"\n";
}

53
src/10/28/P11233.cpp Normal file
View File

@ -0,0 +1,53 @@
/*
i=a[j]
dp[j][0]=dp[i+1][0]+same_color[j]-same_color[i]+a[j]
, dp[j-1][0]
*/
#include <algorithm>
#include <cstdint>
#include <cstdio>
#include <iostream>
#include <istream>
using ll = int64_t;
const ll maxn=2e6+5;
ll n,a[maxn],sc[maxn],si[maxn],dp[maxn];
#define printf
static inline void solve(){
std::cin>>n;
for(ll i=0;i<maxn;i++){
si[i]=0;
dp[i]=0;
}
for(ll i=1;i<=n;i++){
std::cin>>a[i];
sc[i]=sc[i-1]+(a[i]==a[i-1]?a[i]:0);
printf("sc[%lld]=%lld\n",i,sc[i]);
}
for(ll j=1;j<=n;j++){
const ll i=si[a[j]];
dp[j]=dp[j-1];
if(i>0){
dp[j]=std::max(
dp[i+1]+(sc[j]-sc[i+1])/* 为什么这里不能是sc[j-1]-sc[i+1] */+a[j],
dp[j]
);
}
printf("i=%lld, dp[%lld]=%lld\n",i,j,dp[j]);
si[a[j]]=j;
}
std::cout<<dp[n]<<"\n";
}
int main(){
std::iostream::sync_with_stdio(false);
std::cin.tie(nullptr);
ll T;
std::cin>>T;
while(T--)solve();
}

View File

@ -1,3 +0,0 @@
int main(){
}