U242845 正方形

题目

题目描述

你有 qq 个相同颜色的颜料,和一个 nn 行 mm 列的棋盘。

你计划在棋盘上涂 qq 个格子,对于第 ii 个要涂的格子,用 (x_i, y_i,t_i)(xi​,yi​,ti​) 表示 在 t_iti​ 时刻涂一个位于 (Xi, Yi)(xi​,yi​) 的格子。

问,最早什么时候棋盘上会形成一个边长至少为 kk 的正方形。

输入格式

第一行有 4个整数, n, m, k,q(1 <= n,m<= 500, 1 <=k <=min(n,m), 0<=q <=n*m)n,m,k,q(1≤n,m≤500,1≤k≤min(n,m),0≤q≤n∗m)。
接下来的 qq 行,每行三个整数 Xi,Yi, Ti(1 <= Xi <= n, 1 <= y_i <= m, 0 <= t <= 10^9 )xi​,yi​,ti​(1≤xi​≤n,1≤yi​≤m,0≤t≤109)。

输出格式

输出一个整数,表示棋盘上形成一个边长至少为 kk 的正方形的最早时刻,如果不存在输出 -1−1。

 题目解析

 本题采用前缀和+二分的思路,二分时间,根据时间的早晚将对应二维数组的值化为一,利用结构体把一组x,y,t储存起来,根据t小于check中的时间依次填入,在每次check时都要求一次前缀和,后利用所求前缀和求出给定边长的正方形,直到发现有num=k*k。

#include <bits/stdc++.h>
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define endl "\n"
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const int N = 510;
int n,m,k,q;
struct PIII
{
    int x;
    int y;
    int t;
}p[N * N];
bool check(int x)
{
    vector<vector<int>> a(n + 1,vector<int>(m + 1));
    for(int i = 1; i <= q; i ++)
    {
    if(p[i].t > x) continue;
    a[p[i].x][p[i].y] = 1;
    // 判断时间的有效性
    }
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= m; j ++)
            a[i][j] += a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1];
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= m; j ++)
        {
            if(i + k - 1 > n || j + k - 1 > m) continue;
            //找左上角的数字
            int res = a[i + k - 1][j + k - 1] - a[i - 1][j + k - 1] - a[i + k -1][j - 1] + a[i - 1][j - 1];
            if(res == k * k) return true;
        }
    return false;
}
void solve()
{
    cin >> n >> m >> k >> q;
    for(int i = 1; i <= q; i ++)
        cin >> p[i].x >> p[i].y >> p[i].t;
    int l = 0,r = 1e9;
    while(l < r)
    {
        int mid = l + r >> 1;
        if(check(mid)) r = mid;
        else l = mid + 1;
    }
    if(check(l)) cout << l << endl;
    else cout << "-1" << endl;
    return;
}
int main()
{
    IOS;
    int t = 1;
 // cin >> t;
    while(t --)
    solve();
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Matlab中,U-Net是一种用于图像分割的深度学习模型。它的参数包括输入图像的尺寸、批量大小、网络层数、滤波器的大小和数量等。 首先,输入图像的尺寸是U-Net模型的重要参数。这个尺寸决定了输入图像的大小,通常为正方形。对于U-Net模型来说,输入图像的大小应该能够被网络的卷积和上采样层正好整除。 接下来,批量大小也是一个重要的参数。批量大小决定了每次网络更新时用来计算梯度的样本数量。较大的批量大小可以加速训练过程,但同时也会占用更多的内存。 网络层数是U-Net模型的另一个关键参数。网络层数决定了U-Net模型的深度,通常越深的网络可以学习到更高层次的特征,但在一定程度上也会增加过拟合的风险。 滤波器的大小和数量也是U-Net模型的重要参数。滤波器的大小决定了模型能够识别的最小特征的大小,而滤波器的数量决定了模型能够学习的特征的丰富程度。 除此之外,U-Net模型还有其他一些参数,如激活函数、优化器和学习率等。激活函数用于引入非线性属性,优化器用于更新网络的权重,学习率决定了更新权重的步幅大小。 总之,U-Net模型的参数包括输入图像的尺寸、批量大小、网络层数、滤波器的大小和数量,以及其他一些与训练过程相关的参数。通过调整这些参数,可以使U-Net模型在图像分割任务上取得更好的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值