mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-10-25 09:32:37 +00:00
refactor(P11670.cpp): 优化计算逻辑并重命名变量以提高可读性
- 将变量anumcnt重命名为apos和bpos以更清晰表达用途 - 重构计算逻辑,使用双指针方法替代原有循环 - 添加排序操作以提高计算效率
This commit is contained in:
parent
7148637cb3
commit
3f0a46735d
@ -7,8 +7,8 @@
|
||||
using ll = int64_t;
|
||||
|
||||
ll n,ans;
|
||||
std::vector<std::vector<ll>> anumcnt;
|
||||
std::vector<ll> a;
|
||||
std::vector<std::vector<ll>> apos,bpos;
|
||||
std::vector<ll> 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<apos[i].size() && pb<bpos[i].size()){
|
||||
if(apos[i][pa]<bpos[i][pb]){
|
||||
ans+=apos[i][pa++]*(bpos[i].size()-pb);
|
||||
}else{
|
||||
ans+=bpos[i][pb++]*(apos[i].size()-pa);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::cout<<ans<<"\n";
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user