#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 条评论

  • @ 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