• codeforces 659F . Polycarp and Hay 搜索


    题目链接

    遍历每个点, 如果这个点的值能被k整除并且k/a[i][j]后小于等于n*m, 那么就对这个点进行搜索。
    将这个点加入队列, 将周围的所有大于等于这个点的值的点也加入队列。 不断重复, 直到队列空或者数量满足要求。
    可以加一个额外的数组, 如果搜索的过程中, 这个值和a[i][j]相同, 那么就把这个格子标记, 减少额外的操作。

    #include <iostream>
    #include <vector>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <complex>
    #include <cmath>
    #include <map>
    #include <set>
    #include <string>
    #include <queue>
    #include <stack>
    #include <bitset>
    using namespace std;
    #define pb(x) push_back(x)
    #define ll long long
    #define mk(x, y) make_pair(x, y)
    #define lson l, m, rt<<1
    #define mem(a) memset(a, 0, sizeof(a))
    #define rson m+1, r, rt<<1|1
    #define mem1(a) memset(a, -1, sizeof(a))
    #define mem2(a) memset(a, 0x3f, sizeof(a))
    #define rep(i, n, a) for(int i = a; i<n; i++)
    #define fi first
    #define se second
    typedef complex <double> cmx;
    typedef pair<int, int> pll;
    const double PI = acos(-1.0);
    const double eps = 1e-8;
    const int mod = 1e9+7;
    const int inf = 1061109567;
    const int dir[][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };
    const int maxn = 1005;
    int vis[maxn][maxn], a[maxn][maxn], used[maxn][maxn];
    int n, m;
    ll sum;
    int solve() {
        for(int i = 1; i <= n; i++) {
            for(int j = 1; j <= m; j++) {
                int cnt = 0;
                if(sum % a[i][j] == 0 && sum/a[i][j] <= n*m && !vis[i][j]) {
                    queue <pll> q;
                    q.push(mk(i, j));
                    mem(used);
                    while(!q.empty()) {
                        int x = q.front().fi, y = q.front().se;
                        q.pop();
                        if(used[x][y])
                            continue;
                        cnt++;
                        used[x][y] = 1;
                        if(cnt == sum/a[i][j]) {
                            return a[i][j];
                        }
                        for(int k = 0; k < 4; k++) {
                            int tmpx = x+dir[k][0];
                            int tmpy = y+dir[k][1];
                            if(tmpx<=0||tmpx>n||tmpy<=0||tmpy>m||a[tmpx][tmpy]<a[i][j]) {
                                continue;
                            }
                            if(a[tmpx][tmpy] == a[i][j]) {
                                vis[tmpx][tmpy] = 1;
                            }
                            q.push(mk(tmpx, tmpy));
                        }
                    }
                }
            }
        }
        return -1;
    }
    int main()
    {
        cin>>n>>m>>sum;
        for(int i = 1; i <= n; i++) {
            for(int j = 1; j <= m; j++) {
                scanf("%d", &a[i][j]);
            }
        }
        int ans = solve();
        if(ans == -1) {
            puts("NO");
        } else {
            puts("YES");
            for(int i = 1; i <= n; i++) {
                for(int j = 1; j <= m; j++) {
                    if(used[i][j]) {
                        printf("%d ", ans);
                    } else {
                        printf("0 ");
                    }
                }
                puts(" ");
            }
        }
        return 0;
    }
    
    
  • 相关阅读:
    $().each() 与 $.each()区别,以及 jquery ajax 应用
    sql 随机获取数据
    Content type 'text/plain;charset=UTF-8' not supported
    mvn 安装jar到本地仓库
    idea 插件(字母顺序)
    adb连接逍遥模拟器,并自动设置和清除代理
    git仓库重新创建master分支
    js 日期格式化
    java 去除url中指定参数
    okhttp使用post出现:RFC 7230 and RFC 3986错误
  • 原文地址:https://www.cnblogs.com/yohaha/p/5341017.html
Copyright © 2020-2023  润新知