社区讨论

求问ABC433D

学术版参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mihew1wm
此快照首次捕获于
2025/11/27 20:30
3 个月前
此快照最后确认于
2025/11/27 20:30
3 个月前
查看原帖
map 可以1.7s 过,multiset会T飞10个点怎么回事( AC:
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
//multiset<int> st[15];
map<pair<int,int>,int> mp;
int n,m;
int a[200005];
int gtw(int x){
	int cnt=0;
	while(x!=0){
		x/=10;cnt++;
	}
	return cnt;
}
signed main(){
	int cnt=0;
	cin >> n >> m;
	for(int i=1;i<=n;i++){
		cin >> a[i];
		int tmp=gtw(a[i]);
//		st[tmp].insert(a[i]%m);
		mp[{tmp,a[i]%m}]++;
	}
	for(int i=1;i<=n;i++){
		int tmp=a[i]%m;
		for(int j=1;j<=10;j++){
			tmp*=10;
			tmp%=m;
			cnt+=mp[{j,m-tmp}];
			if(tmp==0)cnt+=mp[{j,0}];
		}
	}
	cout << cnt;
	return 0;
} 
TLE:
CPP
#include<bits/stdc++.h>
#pragma GCC optimize(2)
#define int long long
using namespace std;
multiset<int> st[15];
int n,m;
int a[200005];
int gtw(int x){
	int cnt=0;
	while(x!=0){
		x/=10;cnt++;
	}
	return cnt;
}
signed main(){
	int cnt=0;
	cin >> n >> m;
	for(int i=1;i<=n;i++){
		cin >> a[i];
		int tmp=gtw(a[i]);
		st[tmp].insert(a[i]%m);
	}
	for(int i=1;i<=n;i++){
		int tmp=a[i]%m;
		for(int j=1;j<=10;j++){
			tmp*=10;
			int tmp1=tmp%m;
			cnt+=st[j].count(m-tmp1);
			if(tmp1==0)cnt+=st[j].count(0);
		}
	}
	cout << cnt;
	return 0;
} 
后面换了unordered_multiset仍然TLE

回复

0 条回复,欢迎继续交流。

正在加载回复...