// // Created by trudbot on 2023/6/10. // #include<bits/stdc++.h> usingnamespace std; using ll = longlong; const ll MN = sqrt(2333), MX = sqrt(23333333333333), N = 1e7; ll p[N], idx; bool st[N];
voidinit(){ for (int i = 2; i < N; i ++) { if (!st[i]) p[idx ++] = i; for (int j = 0; p[j] * i < N; j ++) { st[p[j] * i] = true; if (i % p[j] == 0) break; } } }
intmain(){ init(); int res = 0; for (int i = 0; i < idx; i ++) { for (int j = i + 1; j < idx && p[i] * p[j] <= MX; j++) { if (p[j] * p[i] > MN) res ++; } } cout << res << endl; return0; }
// // Created by trudbot on 2023/6/10. // #include"bits/stdc++.h" usingnamespace std;
intmain(){ int n; cin >> n; map<int, int> cnt; for (int i = 0; i < n; i ++) { int x; cin >> x; cnt[x] ++; } int cnt_1 = 0, m = n / 2; for (auto &p : cnt) if (p.second == 1) cnt_1 ++;
if (cnt.size() == m) cout << cnt_1; elseif (cnt.size() > m) cout << cnt_1 + m - cnt.size(); else cout << cnt_1 + 2 * (m - cnt.size());
return0; }
试题D: 合并数列
题意描述
小明发现有很多方案可以把一个很大的正整数拆成若干正整数的和。他采取了其中两种方案,分别将他们列为两个数组 和。两个数组的和相同。
定义一次合并操作可以将某数组内相邻的两个数合并为一个新数,新数的值是原来两个数的和。小明想通过若干次合并操作将两个数组变成一模一样,即n
= m 且对于任意下标i 满足。请计算至少需要多少次合并操作可以完成小明的目标。
// // Created by trudbot on 2023/6/10. // #include"bits/stdc++.h" usingnamespace std; using ll = longlong; constint N = 1e5 + 10; ll a[N], b[N];
intmain(){ int n, m; cin >> n >> m; for (int i = 0; i < n; i ++) cin >> a[i]; for (int i = 0; i < m; i ++) cin >> b[i]; int res = 0; for (int i = 0, j = 0; i < n; i ++, j ++) { ll x = a[i], y = b[j]; while (x != y) { if (x < y) x += a[++ i]; else y += b[++ j]; res ++; } } cout << res << endl; return0; }