- 分享
Day03-T1错误代码
- @ 2026-2-6 19:11:11
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
constexpr ll N = 2e5 + 10;
ll n, a[N];
bool flag = false;
int main() {
scanf("%lld", &n);
for (ll i = 1; i <= n; i++)
scanf("%lld", &a[i]);
sort(a + 1, a + n + 1);
for (ll i = 1; i <= n; i++) {
ll b = a[i] - 3, c = a[i] + 3;
ll l = 1, r = n;
while (l <= r) {
ll mid = (l + r) >> 1;
if (a[mid] == b) {
b = -1;
break;
} else if (a[mid] > b)
r = mid - 1;
else
l = mid + 1;
}
l = 1, r = n;
while (l <= r) {
ll mid = (l + r) >> 1;
if (a[mid] == c) {
c = -1;
break;
} else if (a[mid] > c)
r = mid - 1;
else
l = mid + 1;
}
if (b == -1 && c == -1)
flag = true;
else if (b == -1)
b = a[i] - 6;
else if (c == -1)
c = a[i] + 6;
else
continue;
if (flag)
break;
ll d;
if (b > 0 && b <= n)
d = b;
else if (c > 0 && c <= n)
d = c;
else
continue;
l = 0, r = n;
while (l <= r) {
ll mid = (l + r) / 2;
if (a[mid] == d) {
d = -1;
break;
} else if (a[mid] > d)
r = mid - 1;
else
l = mid + 1;
}
if (d == -1) {
flag = true;
break;
}
}
if (flag == true)
printf("Yes");
else
printf("No");
return 0;
}
8 条评论
-
创昇老师 青铜 LV 大佬 MOD @ 2026-2-8 21:14:30
#include<bits/stdc++.h> using namespace std; typedef pair<int, int> PII; const int N = 2e5 + 10; vector<PII> v[N]; int dist[N]; bool st[N]; int n, m, k, s, e; void dijkstra() { memset(dist, 0x3f, sizeof dist); dist[s] = 0; priority_queue<PII, vector<PII>, greater<PII> > q; q.push({0, s}); while (q.size()) { PII t = q.top(); q.pop(); int x = t.second; if (st[x]) continue; st[x] = true; for (auto it : v[x]) { int j = it.first, w = it.second; if (dist[j] > dist[x] + w) { dist[j] = dist[x] + w; q.push({dist[j], j}); } } } } int main() { cin >> n >> m >> k; cin >> s >> e; while (m --) { int a, b, c; cin >> a >> b >> c; v[a].push_back({b, c}); v[b].push_back({a, c}); for (int i = 1; i <= k; i++) { //多k张图 //每张图的边 v[a + i * n].push_back({b + i * n, c}); v[b + i * n].push_back({a + i * n, c}); //从上张图到下张图 v[a + (i - 1) * n].push_back({b + i * n, 0}); v[b + (i - 1) * n].push_back({a + i * n, 0}); } } dijkstra(); int ans = INT_MAX; for (int i = 0; i <= k; i++) { ans = min(ans, dist[e + i * n]); } cout << ans; return 0; } -
@ 2026-2-7 20:33:48
👍 1😄 1 -
@ 2026-2-6 21:04:27
T5
#include <bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int a[N], b[N], dist[N], n, m; bool st[N]; void bfs() { dist[1] = 1; queue<int> q; q.push(1); st[1] = true; while (q.size()) { int t = q.front(); q.pop(); for (int i = 1; i <= m; i++) { if (t >= a[i]) { int tx = t - a[i] + b[i]; // 3->5 t=3 tx = t-3+5 = 5 if (tx <= n + 300 && !st[tx]) { dist[tx] = dist[t] + 1; st[tx] = true; q.push(tx); } } } } } int main() { cin >> m >> n; // 1 -> n for (int i = 1; i <= m; i++) { cin >> a[i] >> b[i]; } bfs(); if (st[n]) cout << dist[n]; else cout << -1; return 0; } -
@ 2026-2-6 20:33:22

-
@ 2026-2-6 20:18:08
T3 参考
#include <bits/stdc++.h> using namespace std; char g[1010][1010]; // 记录所有点到最近的1的距离 int dis[1010][1010]; bool st[1010][1010]; int dx[4] = {-1, 1, 0, 0}; int dy[4] = {0, 0, 1, -1}; struct node { int x, y; }; int n, m, d; void bfs() { memset(dis, 0x3f, sizeof dis); queue<node> q; // 1.定义队列 for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (g[i][j] == 'H') { // 将所有的起点入队 q.push({i, j}); st[i][j] = true; dis[i][j] = 0; } } } while (!q.empty()) { node t = q.front(); q.pop(); for (int i = 0; i < 4; ++i) { int nx = t.x + dx[i], ny = t.y + dy[i]; if (nx >= 0 && nx < n && ny >= 0 && ny < m && g[nx][ny] != '#' && !st[nx][ny]) { st[nx][ny] = true; dis[nx][ny] = dis[t.x][t.y] + 1; q.push({nx, ny}); } } } } int main() { cin >> n >> m >> d; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cin >> g[i][j]; } } bfs(); int ans = 0; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (dis[i][j] <= d) { ans++; } } } cout << ans << '\n'; return 0; } -
@ 2026-2-6 19:44:20#include<bits/stdc++.h> using namespace std; bool vis[1001]; int d[1001]; int main(){ int m,n,a,b,k[302]; set<int> s; cin >> m >> n; memset(d,0x3f,sizeof(d)); memset(k,0,sizeof(k)); for(int i = 0;i < m;i++){ cin >> a >> b; s.insert(a - b); k[ b - a] = min(k[b - a],a); } vector<int> v; for(int i = 0;i < s.size();i++){ v.push_back(*next(s.begin(),i)); } queue<int> q; q.push(1); while(!q.empty()){ int p = q.front(); for(int i = 0;i < v.size();i++){ if(k[v[i]] < p) continue; int r = p + v[i]; if(r <= 0 || r > 1000 || vis[r]) continue; vis[r] = 1; d[r] = d[p] + 1; if(r == n){ cout << d[r]; return 0; } q.push(r); } } cout << -1; return 0; } -
@ 2026-2-6 19:44:16
T2
#include <bits/stdc++.h> using namespace std; int n, t, a[20], sum = 12; bool vis[20]; bool flag = false; void dfs(int step) { if (step >= n + 1) { sum = 12; for (int i = 1; i <= n; i++) { if (vis[i]) { sum += a[i]; } else { sum -= a[i]; } } if (sum % 12 == 0) { flag = true; } return; } vis[step] = false; dfs(step + 1); vis[step] = true; dfs(step + 1); } int main() { cin >> t; for (int i = 1; i <= t; i++) { flag = false; cin >> n; for (int j = 1; j <= n; j++) { cin >> a[j]; } dfs(1); if (flag == true) { cout << "Yes" << endl; } else { cout << "No" << endl; } } return 0; }👍 1 -
@ 2026-2-6 19:35:33#include<bits/stdc++.h> using namespace std; bool vis[1001]; int d[1001]; int main(){ int m,n,a,b,k[302]; set s; cin >> m >> n; memset(d,0x3f,sizeof(d)); memset(k,0,sizeof(k)); for(int i = 0;i < m;i++){ cin >> a >> b; s.insert(a - b); k[ b - a] = min(k[b - a],a); } vector v; for(int i = 0;i < s.size();i++){ v.push_back(*next(s.begin(),i)); } queue q; q.push(1); while(!q.empty()){ int p = q.front(); for(int i = 0;i < v.size();i++){ if(k[v[i]] < p) continue; int r = p + v[i]; if(r <= 0 || r > 1000 || vis[r]) continue; vis[r] = 1; d[r] = d[p] + 1; if(r == n){ cout << d[r]; return 0; } q.push(r); } } cout << -1; return 0; }
🤔 1
- 1