Skip to content

Commit 9c328d5

Browse files
committed
Some easy problems from HDOJ
1 parent 85f1db7 commit 9c328d5

File tree

14 files changed

+552
-3
lines changed

14 files changed

+552
-3
lines changed

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
tools/testlib.h
22
tools/linux/check
3-
tools/windows/check.exe
3+
tools/windows/check.exe
4+
5+
_work
6+
_work/*

.vscode/extensions.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"recommendations": [
3+
"aaron-bond.better-comments",
4+
"coenraads.bracket-pair-colorizer-2",
5+
"ms-vscode.cpptools",
6+
"formulahendry.code-runner",
7+
"cschlosser.doxdocgen",
8+
"icrawl.discord-vscode"
9+
]
10+
}

.vscode/settings.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,19 @@
1313
"code-runner.ignoreSelection": true,
1414
"C_Cpp.clang_format_sortIncludes": true,
1515
"C_Cpp.clang_format_fallbackStyle": "{BasedOnStyle: Google, UseTab: Never, IndentWidth: 4, TabWidth: 4, UseTab: Never, ColumnLimit: 0}",
16+
"files.autoSave": "onFocusChange",
17+
"editor.cursorSmoothCaretAnimation": true,
18+
"editor.smoothScrolling": true,
19+
"workbench.list.smoothScrolling": true,
20+
"editor.fontFamily": "Fira Code",
21+
"editor.fontLigatures": true,
22+
"editor.fontWeight": "600",
23+
"files.associations": {
24+
"chrono": "cpp",
25+
"random": "cpp",
26+
"limits": "cpp",
27+
"valarray": "cpp",
28+
"ostream": "cpp",
29+
"cmath": "cpp"
30+
}
1631
}

HDOJ/6954.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
#define int long long
5+
6+
bool mem1;
7+
8+
#define maxn 10000005
9+
#define mod 998244353
10+
11+
vector<int> prime;
12+
bool vis[maxn];
13+
14+
void init(void) {
15+
for (int i = 2; i < maxn; i++) {
16+
if (!vis[i]) prime.push_back(i);
17+
for (auto j : prime) {
18+
if (i * j >= maxn) break;
19+
vis[i * j] = true;
20+
if (i % j == 0) break;
21+
}
22+
}
23+
return;
24+
}
25+
void solve(void) {
26+
long long n, ans = 0;
27+
cin >> n;
28+
for (int i = 3; i <= n; i++) ans += i * (1 + !vis[i]);
29+
cout << ans << endl;
30+
return;
31+
}
32+
33+
bool mem2;
34+
35+
signed main() {
36+
ios::sync_with_stdio(false);
37+
init();
38+
int _ = 1;
39+
cin >> _;
40+
while (_--) solve();
41+
return 0;
42+
}

HDOJ/6968.cpp

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
#define int long long
5+
6+
bool mem1;
7+
8+
#define maxn 55
9+
#define maxt 505
10+
#define maxm 15005
11+
12+
typedef pair<int, int> pii;
13+
14+
long long f[maxn][maxt][4], g[maxt];
15+
16+
map<string, int> rec;
17+
vector<pii> a[maxn];
18+
int cnt = 0;
19+
20+
void solve(void) {
21+
int n;
22+
cin >> n;
23+
rec.clear(), cnt = 0;
24+
for (int i = 1; i <= n; i++) a[i].clear();
25+
for (int i = 1; i <= n; i++) {
26+
string s;
27+
cin >> s;
28+
rec[s] = ++cnt;
29+
}
30+
int m;
31+
cin >> m;
32+
for (int i = 1; i <= m; i++) {
33+
string s;
34+
cin >> s;
35+
int p = rec[s], x, y;
36+
cin >> x >> y;
37+
a[p].emplace_back(y, x);
38+
}
39+
int T, P;
40+
cin >> T >> P;
41+
for (int i = 1; i <= n; i++)
42+
for (int j = 0; j <= T; j++)
43+
for (int k = 0; k <= P; k++)
44+
f[i][j][k] = numeric_limits<int>::min() / 2;
45+
f[0][0][0] = 0;
46+
for (int i = 1; i <= n; i++) {
47+
for (int k = 0; k <= T; k++) g[k] = numeric_limits<int>::min() / 2;
48+
g[0] = 0;
49+
for (auto j : a[i])
50+
for (int k = T; k >= j.first; k--)
51+
g[k] = max(g[k], g[k - j.first] + j.second);
52+
for (int k = 0; k <= T; k++) g[k] = min(g[k], 100LL);
53+
for (int k = 0; k <= T; k++)
54+
for (int j = T; j >= k; j--)
55+
for (int t = 0; t <= P; t++) {
56+
if (t == 0 && g[k] < 60) continue;
57+
f[i][j][t] = max(f[i][j][t], f[i - 1][j - k][t - (g[k] < 60)] + g[k]);
58+
}
59+
}
60+
int ans = numeric_limits<int>::min();
61+
for (int j = 0; j <= T; j++)
62+
for (int k = 0; k <= P; k++)
63+
ans = max(ans, f[n][j][k]);
64+
cout << max(-1LL, ans) << endl;
65+
return;
66+
}
67+
68+
bool mem2;
69+
70+
signed main() {
71+
ios::sync_with_stdio(false);
72+
int _ = 1;
73+
cin >> _;
74+
while (_--) solve();
75+
return 0;
76+
}

HDOJ/6983.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
#define int long long
5+
6+
bool mem1;
7+
8+
map<int, int> S;
9+
int n, k;
10+
11+
int dfs(int p) {
12+
if (p <= k) return 1;
13+
if (S.find(p) != S.end()) return S[p];
14+
int mid = p >> 1;
15+
return S[p] = 1 + dfs(mid) + dfs(p - mid);
16+
}
17+
18+
void solve(void) {
19+
cin >> n >> k;
20+
cout << dfs(n) << endl;
21+
S.clear();
22+
return;
23+
}
24+
25+
bool mem2;
26+
27+
signed main() {
28+
ios::sync_with_stdio(false);
29+
int _ = 1;
30+
cin >> _;
31+
while (_--) solve();
32+
return 0;
33+
}

HDOJ/6986.cpp

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
#define int long long
5+
6+
bool mem1;
7+
8+
#define maxn 2005
9+
#define mod1 1000000007
10+
#define mod2 1000000009
11+
#define base 19560929
12+
13+
vector<vector<int>> graph;
14+
15+
int c[maxn], f[maxn];
16+
int cnt[maxn], cntt = 0;
17+
18+
void dfs(int p, int pre = -1) {
19+
if (cnt[c[p]] == 0) cntt++;
20+
cnt[c[p]]++;
21+
f[p] = cntt;
22+
for (auto i : graph[p])
23+
if (i != pre) dfs(i, p);
24+
cnt[c[p]]--;
25+
if (cnt[c[p]] == 0) cntt--;
26+
return;
27+
}
28+
29+
void solve(void) {
30+
int n;
31+
cin >> n;
32+
graph.resize(n + 1);
33+
for (int i = 2; i <= n; i++) {
34+
int f;
35+
cin >> f;
36+
graph[f].push_back(i), graph[i].push_back(f);
37+
}
38+
for (int i = 1; i <= n; i++) cin >> c[i];
39+
for (int i = 1; i <= n; i++) {
40+
dfs(i);
41+
int ans = 0, p = 1;
42+
for (int j = 1; j <= n; j++)
43+
ans = (ans + p * f[j]) % mod1, p = p * base % mod1;
44+
cout << ans << ' ';
45+
ans = 0, p = 1;
46+
for (int j = 1; j <= n; j++)
47+
ans = (ans + p * f[j]) % mod2, p = p * base % mod2;
48+
cout << ans << endl;
49+
}
50+
graph.clear();
51+
return;
52+
}
53+
54+
bool mem2;
55+
56+
signed main() {
57+
ios::sync_with_stdio(false);
58+
int _ = 1;
59+
cin >> _;
60+
while (_--) solve();
61+
return 0;
62+
}

HDOJ/7055.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
#define int long long
5+
6+
bool mem1;
7+
8+
#define maxn 100005
9+
#define mod 998244353
10+
11+
string s;
12+
13+
vector<int> pos[26];
14+
15+
void solve(void) {
16+
cin >> s;
17+
int n = s.size();
18+
s = ' ' + s;
19+
for (int i = 1; i <= n; i++) pos[s[i] - 'a'].push_back(i);
20+
long long answer = 0;
21+
for (int t = 0; t < 26; t++) {
22+
long long sum = 0;
23+
for (auto i : pos[t]) sum += n - i + 1;
24+
for (auto i : pos[t])
25+
sum -= n - i + 1, answer = (answer + i * sum * 2 + i * (n - i + 1)) % mod;
26+
pos[t].clear();
27+
}
28+
cout << answer << endl;
29+
return;
30+
}
31+
32+
bool mem2;
33+
34+
signed main() {
35+
ios::sync_with_stdio(false);
36+
int _ = 1;
37+
cin >> _;
38+
while (_--) solve();
39+
return 0;
40+
}

HDOJ/7058.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
#define int long long
5+
6+
bool mem1;
7+
8+
#define maxn 5005
9+
#define mod 998244353
10+
11+
typedef pair<int, int> pii;
12+
13+
pii a[maxn];
14+
int dist[maxn];
15+
bool vis[maxn];
16+
17+
inline long long Dist(pii a, pii b) {
18+
return (a.first - b.first) * (a.first - b.first) + (a.second - b.second) * (a.second - b.second);
19+
}
20+
21+
void solve(void) {
22+
int n;
23+
cin >> n;
24+
for (int i = 1; i <= n; i++) cin >> a[i].first >> a[i].second;
25+
memset(dist, 0x3f, sizeof(dist));
26+
memset(vis, false, sizeof(vis));
27+
dist[1] = 0;
28+
int ans = 0;
29+
while (true) {
30+
int p = 0;
31+
for (int i = 1; i <= n; i++)
32+
if ((!vis[i]) && ((p == 0) || (dist[i] < dist[p])))
33+
p = i;
34+
if (p == 0) break;
35+
vis[p] = true;
36+
ans = max(ans, dist[p]);
37+
for (int i = 1; i <= n; i++)
38+
if ((!vis[i]) && dist[i] > Dist(a[p], a[i]))
39+
dist[i] = Dist(a[p], a[i]);
40+
}
41+
cout << ans << endl;
42+
return;
43+
}
44+
45+
bool mem2;
46+
47+
signed main() {
48+
ios::sync_with_stdio(false);
49+
int _ = 1;
50+
cin >> _;
51+
while (_--) solve();
52+
return 0;
53+
}

0 commit comments

Comments
 (0)