关于unorderedmap更慢的问题
查看原帖
关于unorderedmap更慢的问题
31193
梧桐灯楼主2022/10/13 12:54

RT,将此代码中的unordered_map用map代替后即可在CF中通过,求问为什么

#pragma GCC optimize(2)
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <iostream>
using namespace std;

const int N=200003;
unordered_map<int,int>np;
unordered_map<int,int> :: iterator it;
int Q,n,a[N],b[N],m;
int p[11],q[11];

inline void Read(int&s){
	s=0;
	char c=getchar();
	while(c<'0'||c>'9') c=getchar();
	while(c>='0'&&c<='9'){
		s=(s<<3)+(s<<1)+(c^48);
		c=getchar();
	}
	return ;
}

inline int work(int x){
	int s=0;
	while(x){
		++s;
		x/=10;
	}
	return s;
}

int main(){
	Read(Q);
	while(Q--){
		Read(n);
		int i,x,ans=0;
		np.clear();
		for(i=1;i<=n;++i){
			Read(x);
			++np[x];
		}
		m=0;
		for(i=1;i<=n;++i){
			Read(x);
			if(np[x]) --np[x];
			else b[++m]=x;
		}
		m=0;
		for(it=np.begin();it!=np.end();++it){
			while(it->second){
				--(it->second);
				a[++m]=it->first;
			}
		}
		memset(p,0,sizeof(p));
		memset(q,0,sizeof(q));
		for(i=1;i<=m;++i){
			if (a[i]>=10) {a[i]=work(a[i]); ++ans;} ++p[a[i]];
			if (b[i]>=10) {b[i]=work(b[i]); ++ans;} ++q[b[i]];
		}
		for(i=2;i<=9;++i) ans+=abs(p[i]-q[i]);
		printf("%d\n",ans);
	}
    return 0;
}

2022/10/13 12:54
加载中...