关于 ABC D 题常数问题
  • 板块灌水区
  • 楼主苏联小渣
  • 当前回复25
  • 已保存回复25
  • 发布时间2022/5/8 22:16
  • 上次更新2023/10/28 01:51:28
查看原帖
关于 ABC D 题常数问题
399286
苏联小渣楼主2022/5/8 22:16

咋卡不过去呢,是 unordered_map 常数大吗,听说是 O(1)O(1) 的啊

测了运行次数只有一千多万次,但极限数据跑了十几秒

#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, q, k, cnt, tot, tot2, a[10000010], jud[1000010], su[1000010];
const int maxn = 1000000;
unordered_map <int, int> mp;
unordered_map <int, int> :: iterator p;
signed main(){
	memset(jud, 1, sizeof(jud));
	jud[1] = 0;
	for(int i=2; i<=maxn; i++){
		if(jud[i]) su[++cnt] = i; 
		for(int j=1; j<=cnt && i*su[j]<=maxn; j++){
			jud[i*su[j]] = 0;
			if(i % su[j] == 0) break;
		}
	}
	scanf ("%lld", &n);
	for (int i=1; i<=cnt; i++){
		for (int j=1; j<i && su[i]*su[i]*su[i]*su[j] <= n; j++){
			tot2 ++;
			mp[su[i]*su[i]*su[i]*su[j]] = 1;
		}
	}
	for (p=mp.begin(); p!=mp.end(); p++){
		a[++tot] = p->first;
	}
	if (n < 54) return puts ("0"), 0;
	printf ("%lld\n", tot);
	//printf ("%lld\n", tot2);
	return 0;
}
2022/5/8 22:16
加载中...