以防自己忘记,作此笔记,先说结论:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double k1 = 1534.453;
double k2 = 1534.458;
cout << fixed << setprecision(2) << k1 << endl;
//cout << 表明自己输出的小数要固定字数 << 保留几位,不够的也会补0 << 浮点数 << endl;
cout << fixed << setprecision(2) << k2 << endl;
return 0;
}
这个输出结果分别是1534.45,1534.46。结果会自动四舍五入。
做题错误来源于:P11046 [蓝桥杯 2024 省 Java B] 星际旅行 - 洛谷
当时不知道这些,直接用字符串模拟,结果只有部分分数,部分结果是错误的:
#include <iostream>
#include <vector>
#include <set>
#include <queue>
#include <string>
#include <algorithm>
using namespace std;
#define endl '\n'
#define int long long
const int INF = 0x3f3f3f3f;
int n, m, q;
vector<int> vis;
vector<int> g[1010];
int bfs(int p, int times) {
vis.assign(n + 4, 0);
int cnt = 0;
queue<int> q;
q.push(p);
vis[p] = 1;
cnt++;
while (q.size() && times) {
int p = q.size();
while (p--) {
int x = q.front();
q.pop();
for (int ch : g[x]) {
if (vis[ch] == 0) {
q.push(ch);
vis[ch] = 1;
cnt++;
}
}
}
times--;
}
return cnt;
}
void solve() {
cin >> n >> m >> q;
int ans = 0;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
for (int i = 0; i < q; i++) {
int a, times;
cin >> a >> times;
ans += bfs(a, times);
}
double t = (double)ans * 1.0 / q;
string s = to_string(t);
int pos = s.find('.');
pos += 3;
int flag = 0;
int check = s[pos] - '0';
if (check >= 5) {
flag = 1;
}
if (flag == 1) {
t += 0.01;
}
printf("%.2f\n", t);
}
signed main()
{
int t;
//cin >> t;
t = 1;
while (t--) {
solve();
}
return 0;
}
正解还得用笔记内容:
#include <iostream>
#include <vector>
#include <set>
#include <queue>
#include <string>
#include <algorithm>
#include <iomanip>
using namespace std;
#define endl '\n'
#define int long long
const int INF = 0x3f3f3f3f;
int n, m, q;
vector<int> vis;
vector<int> g[1010];
int bfs(int p, int times) {
vis.assign(n + 4, 0);
int cnt = 0;
queue<int> q;
q.push(p);
vis[p] = 1;
cnt++;
while (q.size() && times) {
int p = q.size();
while (p--) {
int x = q.front();
q.pop();
for (int ch : g[x]) {
if (vis[ch] == 0) {
q.push(ch);
vis[ch] = 1;
cnt++;
}
}
}
times--;
}
return cnt;
}
void solve() {
cin >> n >> m >> q;
int ans = 0;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
for (int i = 0; i < q; i++) {
int a, times;
cin >> a >> times;
ans += bfs(a, times);
}
double expectation = (double)ans / q;
cout << fixed << setprecision(2) << expectation << endl;
}
signed main()
{
int t;
//cin >> t;
t = 1;
while (t--) {
solve();
}
return 0;
}