首页 > 其他分享 >牛客小白月赛60

牛客小白月赛60

时间:2022-11-11 23:47:23浏览次数:65  
标签:nx ny int res d% long 60 牛客 小白月赛

补一下题,

  • c的状态方程都列出来了, 但没想通
  • d只剩几个样例没过没验出来,
    image
    应该是连通性的问题,刚才换了个写法,都初始化成0x3f过了

目录

C. 小竹关禁闭

C. 小竹关禁闭
DP

#include<iostream>
using namespace std;

const int N = 2010;
int dp[N];
int a[N];

inline int fmax(int a, int b) {
    return a < b ? b : a;
}
int main()
{
    int n, k;
    cin >> n >> k;

    for(int i = 1; i <= n; ++i) cin >> a[i];

    for(int i = 1; i <= n; ++i){
        if(i < k+1) dp[i] = fmax(dp[i-1], a[i]);
        else dp[i] = fmax(dp[i-1], dp[i-k-1]+a[i]);
    }

    int res = -1;
    for(int i = 1; i <= n; ++i)
        res = fmax(res, dp[i]);

    cout << res;
    return 0;
}

D 游戏购买!

D 游戏购买!
BFS

#include<iostream>
#include<queue>
#include<cstring>
#define x first
#define y second
using namespace std;

const int N = 2010;
typedef pair<int, int> PII;
int n, m, x;
int sx, sy, ex, ey;
int g[N][N];
int ds[N][N], de[N][N], d[N][N]; // 距离起点, 终点的距离
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};

void e_bfs(){
    memset(d, -1, sizeof d);
    queue<PII> q;
    d[ex][ey] = 0;
    q.push({ex, ey});

    while(!q.empty())
    {
        PII 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 || !ny || nx > n || ny > m || g[nx][ny]==-1) continue;
            //已访问, 跳过
            if(d[nx][ny] != -1) continue;
            q.push({nx, ny});
            d[nx][ny] = d[t.x][t.y]+1;
            if(g[nx][ny] > x) de[nx][ny] = d[nx][ny];
        }
    }
}

long long s_bfs(){
    memset(d, -1, sizeof d);
    queue<PII> q;
    d[sx][sy] = 0;
    q.push({sx, sy});

    long long res = 0x3f3f3f3f;
    while(!q.empty())
    {
        PII t = q.front();
        q.pop();
        if(g[t.x][t.y] > x) res = min(res, (long long)(ds[t.x][t.y]+de[t.x][t.y]));

        for(int i = 0; i < 4; ++i) {
            int nx = t.x+dx[i], ny = t.y+dy[i];
            if(!nx || !ny || nx > n || ny > m || g[nx][ny]==-1) continue;
            //已访问, 跳过
            if(d[nx][ny] != -1) continue;
            q.push({nx, ny});
            d[nx][ny] = d[t.x][t.y]+1;
            if(g[nx][ny] > x) ds[nx][ny] = d[nx][ny];
        }
    }
    return res == 0x3f3f3f3f ? -1 : res;
}
int main()
{
    memset(ds, 0x3f, sizeof ds);
    memset(de, 0x3f, sizeof de);
    scanf("%d%d%d", &n, &m, &x);
    scanf("%d%d%d%d", &sx, &sy, &ex, &ey);
    for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= m; ++j)
            scanf("%d", &g[i][j]);

    //终点
    e_bfs();
    printf("%lld", s_bfs());
}

标签:nx,ny,int,res,d%,long,60,牛客,小白月赛
From: https://www.cnblogs.com/Knight02/p/niu-xiaobai60.html

相关文章

  • 牛客小白月赛60 题解
    比赛通道:牛客小白月赛60前言第二次小白月赛没有AK,感觉自己可以原地退役了QAQ。这次F题理论上我能做出来,但是由于没有打表状态不佳,导致没有AK。A.小竹与妈妈思路这题......
  • 【题解】P2260 [清华集训2012]模积和(数学,整除分块)
    【题解】P2260[清华集训2012]模积和比较简单的一道推式子的题。(清华集训居然会出这种水题的吗)题目链接P2260[清华集训2012]模积和题意概述求\[\sum_{i=1}^{n}\sum......
  • 560.和为k的子数组
    给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 。示例1:输入:nums=[1,1,1],k=2输出:2示例2:输入:nums=[1,2,3......
  • 白嫖永久服务器1668060025667
    阿贝云服务器注册免费领取1核1g内存5m宽带10g内存的云服务器,对于个人来说完全够用了。还有免费备案和虚拟主机,免备案对于搭建个人博客就很方便,部署了小项目上去,运行流畅不......
  • 白嫖永久服务器1668060067460
    阿贝云服务器注册免费领取1核1g内存5m宽带10g内存的云服务器,对于个人来说完全够用了。还有免费备案和虚拟主机,免备案对于搭建个人博客就很方便,部署了小项目上去,运行流畅不......
  • ORA-00600 内部错误代码:
    发现对某个表进行操作时突然报改错(后面在其他生产环境也发现过其他表出现同样的报错),网上说是oracle11g本身的问题,不想动生产环境解决办法:导出数据,重新建表导入数据错误消......
  • 牛客小白月赛 54
    Asum把所有的数放进一个大根堆,然后每次取出最大的两个相加,累加到答案中去,并重新放回到大根堆。最大两数之和重新放入大根堆依旧是最大的数,所以可以优化成前缀和来做。#......
  • 牛客小白月赛55
    A至至子的等差中项#include<bits/stdc++.h>usingnamespacestd;int32_tmain(){inta,b;cin>>a>>b;cout<<b*2-a<<"\n";}B至至......
  • HDU 2660 Accepted Necklace
    ProblemDescriptionIhaveNpreciousstones,andplantouseKofthemtomakeanecklaceformymother,butshewon'tacceptanecklacewhichistooh......
  • HDU 3760 Ideal Path
    ProblemDescriptionNewlabyrinthattractionisopeninNewLostlandamusementpark.Thelabyrinthconsistsofnroomsconnectedbympassages.Eachpass......