小红书2023/08/06Java后端笔试 AK

T1(模拟、哈希表)

cpp 复制代码
#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
typedef pair<string, int> PSI;

const int N = 1e5 + 10;

void solve() {
	string line, t;
	getline(cin, line);

	line += ' ';
	vector<PSI> ans;
	unordered_map<string, int> cnt;
	for(int i = 0; i < line.size(); i ++) {
		if(line[i] == ' ') cnt[t] ++ , t = "";
		else t += line[i];
	}

	for(auto kv : cnt) {
		if(kv.second >= 3) ans.push_back(make_pair(kv.first, kv.second));
	}

	sort(ans.begin(), ans.end(), [](PSI& a, PSI& b) {
		if(a.second != b.second) return a.second > b.second;
		return a.first < b.first;
	});

	for(auto ss : ans) cout << ss.first << endl;

}

int main() {
	cin.tie(0); cout.tie(0);
	std::ios::sync_with_stdio(false);

	int T = 1;
//	cin >> T;
	while(T --) {
		solve();
	}

	return 0;
}

T2(01背包)

cpp 复制代码
#include <bits/stdc++.h>

using namespace std;

typedef long long LL;

const int N = 55, M = 510;

int n, t_limit, h_limit;
int t[N], h[N], a[N];
LL f[N][M][M];

void solve() {
	cin >> n;
	cin >> t_limit >> h_limit;
	for(int i = 1; i <= n; i ++) cin >> t[i] >> h[i] >> a[i];

	for(int j = t[1]; j < M; j ++) {
		for(int k = h[1]; k < M; k ++) {
			f[1][j][k] = a[1];
		}
	}

	for(int i = 2; i <= n; i ++) {
		for(int j = 1; j <= t_limit; j ++) {
			for(int k = 1; k <= h_limit; k ++) {
				f[i][j][k] = max(f[i][j][k], f[i - 1][j][k]);
				if(j - t[i] < 0 || k - h[i] < 0) continue;
				f[i][j][k] = max(f[i][j][k], f[i - 1][j - t[i]][k - h[i]] + 0ll + a[i]);
			}
		}
	}

	LL ans = 0;
	for(int j = 1; j < M; j ++)
		for(int k = 1; k < M; k ++)
			ans = max(ans, f[n][j][k]);

	cout << ans << endl;
}

int main() {
	cin.tie(0); cout.tie(0);
	std::ios::sync_with_stdio(false);

	int T = 1;
//	cin >> T;
	while(T --) {
		solve();
	}

	return 0;
}

T3(树形DP)

cpp 复制代码
#include <bits/stdc++.h>

using namespace std;

typedef long long LL;

const int N = 1e5 + 10, M = N * 2;

int n, v[N];
int h[N], e[M], ne[M], idx;

int cnt;
int primes[M];
bool st[M];

int f[N][2];

void add(int a, int b) {
	e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}

void get_primes(int n) {
	st[1] = true;
	for(int i = 2; i <= n; i ++) {
		if(!st[i]) primes[cnt ++ ] = i;
		for(int j = 0; primes[j] <= n / i; j ++) {
			st[primes[j] * i] = true;
			if(i % primes[j] == 0) break;
		}
	}
}

int dp(int u, int ban, int p) {
	int& cur_level = f[u][ban];
	if(cur_level != -1) return cur_level;

	cur_level = 0;
	int rec = 0, miv = M, node_id = -1;
	for(int i = h[u]; i != -1; i = ne[i]) {
		int j = e[i];
		if(j == p) continue;
		if(!st[v[u] + v[j]]) {
			if(ban) {
				cur_level += max(dp(j, 1, u) + 1, dp(j, 0, u));
			} else {
				rec += dp(j, 0, u);
				if(miv > dp(j, 0, u)) {
					miv = dp(j, 0, u);
					node_id = j;
				}
			}
		} else {
			cur_level += max(dp(j, 1, u), dp(j, 0, u));
		}
	}

	if(node_id != -1) cur_level += (rec - miv) + max(dp(node_id, 0, u), dp(node_id, 1, u) + 1);

	return cur_level;
}

void solve() {
	cin >> n;
	for(int i = 1; i <= n; i ++) cin >> v[i];

	memset(f, -1, sizeof f);
	memset(h, -1, sizeof h);
	for(int i = 0; i < n - 1; i ++) {
		int a, b;
		cin >> a >> b;
		add(a, b), add(b, a);
	}

	cout << max(dp(1, 0, -1), dp(1, 1, -1)) << endl;
}

int main() {
	cin.tie(0); cout.tie(0);
	std::ios::sync_with_stdio(false);

	get_primes(200000);

	int T = 1;
//	cin >> T;
	while(T --) {
		solve();
	}

	return 0;
}
相关推荐
h_a_o777oah几秒前
【动态规划】区间 DP :三层循环逻辑与模板实现细节(洛谷 P1880)
c++·算法·动态规划·acm·区间dp·化环为链·石子合并
从此以后自律6 分钟前
迪杰斯特拉
算法
QiLinkOS13 分钟前
第三视觉理解徐玉生与他的商业活动(32)
大数据·c++·人工智能·算法·开源协议
KaMeidebaby24 分钟前
卡梅德生物技术快报|实操手册:CXCL4 蛋白原核表达全套工艺,两步层析去除蛋白多聚体附完整电泳数据
人工智能·算法·机器学习·架构·spark
AIGCmagic社区31 分钟前
Unlimited OCR 论文精读:R-SWA 如何实现一次性长文档解析
人工智能·算法·aigc
鹏易灵1 小时前
C++——7.类与对象,掌握封装、继承、多态.详解
开发语言·c++·算法
Mortalbreeze1 小时前
深入 Linux 线程机制(三):线程互斥——竞争条件与互斥锁的本质
linux·运维·服务器·c++·算法
Mr_Controll1 小时前
【运动控制——电子凸轮曲线设计(多项式)】
算法·自动化
Sam09271 小时前
【AI 算法精讲 15】余弦相似度:向量检索与归一化内积
人工智能·python·算法·ai
黎阳之光1 小时前
黎阳之光实时三维重构:重构智慧铁路全新管控范式
大数据·人工智能·物联网·算法·数字孪生