From 3f0a46735d7ebf1d4ef25421796999e5dbe4e7ff Mon Sep 17 00:00:00 2001 From: Zengtudor Date: Wed, 22 Oct 2025 16:53:29 +0800 Subject: [PATCH] =?UTF-8?q?refactor(P11670.cpp):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E9=80=BB=E8=BE=91=E5=B9=B6=E9=87=8D=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E5=8F=98=E9=87=8F=E4=BB=A5=E6=8F=90=E9=AB=98=E5=8F=AF?= =?UTF-8?q?=E8=AF=BB=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将变量anumcnt重命名为apos和bpos以更清晰表达用途 - 重构计算逻辑,使用双指针方法替代原有循环 - 添加排序操作以提高计算效率 --- src/10/22/P11670.cpp | 50 +++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/src/10/22/P11670.cpp b/src/10/22/P11670.cpp index c04f529..e9429df 100644 --- a/src/10/22/P11670.cpp +++ b/src/10/22/P11670.cpp @@ -7,8 +7,8 @@ using ll = int64_t; ll n,ans; -std::vector> anumcnt; -std::vector a; +std::vector> apos,bpos; +std::vector a,b; int main(){ std::iostream::sync_with_stdio(false); @@ -17,31 +17,37 @@ int main(){ std::cin>>n; a.resize(n+1); - anumcnt.resize(n+1); + b.resize(n+1); + apos.resize(n+1); + bpos.resize(n+1); for(ll i=1;i<=n;i++){ std::cin>>a[i]; - anumcnt[a[i]].push_back(i); + apos[a[i]].push_back(std::min(i,n-i+1)); } for(ll i=1;i<=n;i++){ - ll b,nans=0; - std::cin>>b; - if(a[i]==b){ - ll N=i-1; - nans+=N*(N+1)/2; - N=n-i; - nans+=N*(N+1)/2; - // printf("a[%lld]==b[%lld], +=%lld\n",i,i,nans); - } - ans+=nans; - nans=0; - for(ll ai:anumcnt[b]){ - ll l=std::min(ai,i); - ll r=std::min(n-ai+1,n-i+1); - nans += std::min(l,r); - } - // printf("b[%lld] l to r +=%lld\n",i,nans); - ans+=nans; + std::cin>>b[i]; + bpos[b[i]].push_back(std::min(i,n-i+1)); } + for(ll i=1;i<=n;i++){ + if(a[i]==b[i]){ + ll N=i-1; + ans+=N*(N+1)/2; + N=n-i; + ans+=N*(N+1)/2; + } + std::sort(apos[i].begin(),apos[i].end()); + std::sort(bpos[i].begin(),bpos[i].end()); + + ll pa=0,pb=0; + while(pa