AtCoder Beginner Contest 051
A - Haiku
直接模拟。
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr);
string s;
cin >> s;
string a, b, c;
a = s.substr(0, 5);
b = s.substr(6, 7);
c = s.substr(14);
cout << a << " " << b << " " << c;
return 0;
}
B - Sum of Three Integers
暴力做的话是三重循环会超时,可以枚举前两个数,然后判断第三个数是否合法即可,时间复杂度为 \(O(n^2)\)。
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr);
int K, S;
cin >> K >> S;
int ans = 0;
for (int i = 0; i <= K; i++) {
for (int j = 0; j <= K; j++) {
int k = S - i - j;
if (k >= 0 && k <= K) ans++;
}
}
cout << ans;
return 0;
}
C - Back and Forth
本题看着吓人,其实只需要找到一条互相不重复的路线即可,不妨就以样例 \(1\) 为例。画出图形,然后模拟即可。

#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr);
int x, y, u, v;
cin >> x >> y >> u >> v;
for (int i = y; i < v; i++) cout << 'U';
for (int i = x; i < u; i++) cout << 'R';
for (int i = v; i > y; i--) cout << 'D';
for (int i = u; i > x; i--) cout << 'L';
cout << 'L';
for (int i = y; i < v + 1; i++) cout << 'U';
for (int i = x - 1; i < u; i++) cout << 'R';
cout << "DR";
for (int i = v; i > y - 1; i--) cout << 'D';
for (int i = u + 1; i > x; i--) cout << 'L';
cout << 'U';
return 0;
}
D - Candidates of No Shortest Paths
\(\rm Floyd\) 算法,之后会补。
#include<bits/stdc++.h>
using i64 = long long;
void DAOQI() {
int n, m;
std::cin >> n >> m;
std::vector d(n + 1, std::vector(n + 1, (i64) 1e9));
std::vector<std::array<int, 3>> doc;
for (int i = 1; i <= m; i++) {
int u, v, w;
std::cin >> u >> v >> w;
d[u][v] = w;
d[v][u] = w;
doc.push_back({u, v, w});
}
for (int k = 1; k <= n; k++) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
d[i][j] = std::min(d[i][j], d[i][k] + d[k][j]);
}
}
}
int ans = 0;
for (auto [u, v, w]: doc) {
if (d[u][v] < w) ans++;
}
std::cout << ans << "\n";
}
signed main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int T = 1;
//std::cin >> T;
while (T--) DAOQI();
return 0;
}
#include<iostream>
#include<vector>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector dp(n, vector<int>(n, 1e9));
for(int i = 0; i < n; i++) dp[i][i] = 0;
vector<int> a(m), b(m), c(m);
for(int i = 0; i < m; i++) {
cin >> a[i] >> b[i] >> c[i];
a[i]--; b[i]--;
dp[a[i]][b[i]] = c[i];
dp[b[i]][a[i]] = c[i];
}
for(int k = 0; k < n; k++) {
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j]);
}
}
}
int cnt = 0;
for(int i = 0; i < m; i++) {
if(dp[a[i]][b[i]] < c[i]) cnt++;
}
cout << cnt << endl;
return 0;
}

浙公网安备 33010602011771号