mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-10-25 17:42:46 +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;
|
using ll = int64_t;
|
||||||
|
|
||||||
ll n,ans;
|
ll n,ans;
|
||||||
std::vector<std::vector<ll>> anumcnt;
|
std::vector<std::vector<ll>> apos,bpos;
|
||||||
std::vector<ll> a;
|
std::vector<ll> a,b;
|
||||||
|
|
||||||
int main(){
|
int main(){
|
||||||
std::iostream::sync_with_stdio(false);
|
std::iostream::sync_with_stdio(false);
|
||||||
@ -17,31 +17,37 @@ int main(){
|
|||||||
std::cin>>n;
|
std::cin>>n;
|
||||||
|
|
||||||
a.resize(n+1);
|
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++){
|
for(ll i=1;i<=n;i++){
|
||||||
std::cin>>a[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++){
|
for(ll i=1;i<=n;i++){
|
||||||
ll b,nans=0;
|
std::cin>>b[i];
|
||||||
std::cin>>b;
|
bpos[b[i]].push_back(std::min(i,n-i+1));
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
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";
|
std::cout<<ans<<"\n";
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user