CodeForces - 954C - Matrix Walk

2023-05-16

坑题
题目:CodeForces - 954C
题意:矩阵的每一元素可以用 Ai, j = y*(i - 1) + j 来表示,(就是二维数组用一维指针表示的方法),给你一个路径序列,问这样的序列能否在前述矩阵中实现。能输出YES和x,y值(x的值不是必须最优),否则输出NO。
坑点:不能站着不动,任意的a[i] != a[i-1];

思路:

  1. for循环找a数组中有没有相同的元素,有直接退出,顺便求出y值,当a中相邻元素绝对值不相差1时,y = abs(a[i] - a[i-1]);因为增减1则就一列(y = 1)没问题,如果是1,2,3,4,6 这种也没关系,之后再for循环检查一遍,看是不是所有a[i] 都在 a[i-1] 旁边就ok了。
  2. 做题WA了好多次,WA在第7组的提供个样例
    10
    1 2 3 4 5 6 7 8 9 11
    参考了一篇博客(博客链接),但是它的代码WA了,我给他改AC了,在此也提供他的思路,并给出AC代码。他的思路是两个点要么差1,要么差y,如果差1,但是不相邻,就特判一下。但是他没有考虑到for循环找y值时,y值会被多次修改,以及当只有一列(y == 1)时不需要做判断。

代码实现me:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAXN = 200010;
int n,a[MAXN];

int dir[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};
bool check(int a1,int a2,int y){
    LL a1x = a1/y + ((a1%y)?1:0);
    LL a1y = a1 - (a1x-1)*y;
    if(a1y > y || a1y < 1)//a[i]超范围 
        return false;
    LL a2x = a2/y + ((a2%y)?1:0);
    LL a2y = a2 - (a2x-1)*y;
    bool flag = 0;
    for(int i=0;i<4;i++){
        LL a2x_ = a2x+dir[i][0];
        LL a2y_ = a2y+dir[i][1];
        if(a2y_ > y || a2y_<1)
            continue;
        if(a2x_ == a1x && a2y_ == a1y){
            flag = 1;
            break;
        }
    }
    if(flag)
        return true;
    return false;
}

int main(int argc, char const *argv[])
{
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>a[i];
    LL y = 1;
    bool ans = 1;
    for(int i=1;i<n;i++){
        if(a[i] == a[i-1]){
            ans = 0;
            break;
        }
        if(y==1 && abs(a[i]-a[i-1])!=1){//不增减一,则可确定y
            y = abs(a[i] - a[i-1]);
        }
    }
    for(int i=1;i<n;i++){
        if(!check(a[i],a[i-1],y)){//a[i]不在a[i-1]旁边,输出错误信息
            ans = 0;
            break;
        }   
    }
    if(ans) 
        cout<<"YES"<<endl<<1000000000<<' '<<y<<endl;
    else 
        cout<<"NO"<<endl;
    return 0;
}

代码实现he:

#include<bits/stdc++.h>
using namespace std;
const int N = 3e5 + 10;
int a[N];
int main(){
    ios_base::sync_with_stdio(0);
    int n;cin>>n;
    int y = 1;
    for (int i = 0; i < n; i++) {
        cin>>a[i];
        if(i == 0) continue;
        if(a[i] == a[i - 1]) {
            cout<<"NO"<<endl;return 0;
        }
        if(y==1 && abs(a[i] - a[i - 1] != 1)) {//修改为只有在y为1时修改
            y = abs(a[i] - a[i - 1]);
        }
    }
    for (int i = 1; i < n; i++) {
        if(y == 1) continue;//y==1时不做判断
        if((abs(a[i] - a[i - 1]) != 1 && abs(a[i] - a[i - 1]) != y)){
            cout<<"NO"<<endl;return 0;
        }
        if(a[i] % y == 0 && a[i - 1] - a[i] == 1) {
            cout<<"NO"<<endl;return 0;
        } else if(a[i] % y == 1 && a[i] - a[i - 1] == 1) {
            cout<<"NO"<<endl;return 0;
        }
    }
    cout<<"YES"<<endl<<1000000000<<' '<<y<<endl;
    return 0;
}

小结:这道题Debug的时间比我想象的要长的多,做了一晚上,醉了,太菜,看不懂英文,理解错题意,无话可说。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CodeForces - 954C - Matrix Walk 的相关文章

  • 在matlab中对矩阵元素求和的有效(最快)方法

    让我们有矩阵A say A magic 100 我见过两种计算矩阵所有元素之和的方法A sumOfA sum sum A Or sumOfA sum A 其中一个比其他更快 或更好的练习 吗 如果有的话是哪一个 或者它们都同样快 看来你无法
  • Tensorflow 中的张量乘法

    我正在尝试在 NumPy Tensorflow 中进行张量乘法 我有 3 个张量 A M X h B h X N X s C s X T 我相信A X B X C应该产生一个张量D M X N X T 这是代码 同时使用 numpy 和 t
  • 不使用 Numpy 的矩阵求逆

    我想在不使用的情况下反转矩阵numpy linalg inv 原因是我使用 Numba 来加速代码 但不支持 numpy linalg inv 所以我想知道是否可以使用 经典 Python 代码反转矩阵 With numpy linalg
  • 连接每第 n 行

    我在矩阵中得到了一个数据集 如下所示 从 Excel 导入 matrix Cat1 1 2 3 4 Cat2 9 10 11 12 Cat3 17 18 19 20 Cat1 5 6 7 8 Cat2 13 14 15 16 Cat3 21
  • 如何在 MATLAB 中调整矩阵大小?

    假设我有一个1 by 12矩阵 我想将其调整为4 by 3矩阵 我怎么能这样做呢 我当前的解决方案有点丑陋 for n 1 length mat 3 out n 1 3 mat n 1 3 1 n 1 3 3 end 有一个更好的方法吗 r
  • 由两个向量 (n,1) 构建的 R 距离矩阵

    我有两个向量 x n 1 and y n 1 真实值 我想创建一个矩阵M n n 这些向量包含每两对之间的距离 您可以使用outer功能 x lt sample 5 y lt sample 5 x 1 1 5 3 4 2 y 1 2 3 5
  • 将矩阵从 3d 重塑为 2d 并保持特定顺序

    我想将 4x3x5 形式的矩阵调整为 20x3 的二维矩阵 但同时保留顺序 如下所示 功能reshape 不保留这个特定的顺序 我怎样才能以最简单的方式实现这一点 让我们一劳永逸地解决这些跨越三维的串联和切割问题吧 第一部分 3D 到 2D
  • matlab中的分箱

    我一直无法在 matlab 或 Octave 中找到函数来完成我想要的操作 我有一个两列的矩阵 m x 和 y 值 我知道我可以通过执行 m 1 或 m 2 来提取列 我想将其分成 可能 大小相等的较小矩阵 并绘制这些矩阵的平均值 换句话说
  • 从上三角初始化对称 Theano dmatrix

    我正在尝试拟合一个部分由对称矩阵参数化的 Theano 模型A 为了加强对称性A 我希望能够构建A通过仅传入上三角形中的值 等效的 numpy 代码可能如下所示 import numpy as np def make symmetric p
  • rbind 命名向量到不同长度的矩阵

    我正在尝试将命名向量绑定到矩阵上 命名向量的长度与矩阵不同 gt m lt matrix data c 1 2 3 nrow 1 ncol 3 dimnames list c c column 1 column 2 column 3 gt
  • 在Python中沿特定轴广播操作

    在Python中 假设我有一个正方形numpy matrix X 尺寸n x n我有一个numpy vector a尺寸的n 很简单 我想执行广播减法X a 但我希望能够指定沿哪个维度 以便我可以指定沿轴 0 或轴 1 进行减法 如何指定轴
  • 矩阵求逆 (3,3) python - 硬编码与 numpy.linalg.inv

    对于大量矩阵 我需要计算定义为的距离度量 尽管我确实知道强烈建议不要使用矩阵求逆 但我没有找到解决方法 因此 我尝试通过对矩阵求逆进行硬编码来提高性能 因为所有矩阵的大小均为 3 3 我预计这至少会是一个微小的改进 但事实并非如此 为什么
  • 指向二维数组的指针和手动内存管理 - C

    我认为用纯 C 语言构建一个库来处理各种矩阵计算将是一个很好的挑战 现在 尽管我在 Objective C 和 Cocoa 方面有一些很好的经验 但我对 C 的了解正是我所需要的与 Objective C 一起工作 仅此而已 例如 我熟悉
  • opencv中矩阵的超快中值(与matlab一样快)

    我正在 openCV 中编写一些代码 想要找到一个非常大的矩阵数组 单通道灰度 浮点数 的中值 我尝试了几种方法 例如对数组进行排序 使用 std sort 和选择中间条目 但与 matlab 中的中值函数相比 它非常慢 准确地说 在 ma
  • 如何创建随机矩阵?

    我想创建一个随机矩阵 如 100 50 25 22 75 195 我的代码是 n 1 r 2 e 3 sup for i in range n sup1 for c in range r sup0 list random randint 2
  • 使用 OpenGL 着色器进行数学计算 (C++)

    我有一个矩阵 例如 100x100 尺寸 我需要对每个元素进行计算 matrix i j tt 8 5例如 我有一个巨大的矩阵 我想使用 OpenGL 着色器来实现该算法 我想使用着色器 例如 uniform float val unifo
  • 使用 sapply 的列表和矩阵

    我有一个也许是基本的问题 我在网上搜索过 我在读取文件时遇到问题 尽管如此 我还是按照 Konrad的建议设法读取了我的文件 我很欣赏这一点 How to get R to read in files from multiple subdi
  • 再现频率矩阵图

    我想在 R 中重新创建一个情节 情节如下 来源 Boring E G 1941 作为动态平衡的统计频率 心理学评论 48 4 279 这略高于我的工资等级 能力 因此在这里询问 无聊的状态 第一次 A 只能出现 从不 0 或 总是 1 在
  • 指向特征矩阵的指针数组

    我在代码中使用 Eigen 的 MatrixXd 矩阵 在某个时刻我需要一个 3D 矩阵 由于 Eigen 没有三维矩阵类型 因为它仅针对线性代数进行了优化 因此我创建了一个 MatrixXd 类型的指针数组 Eigen MatrixXd
  • 使用 Matrix.setPolyToPoly 选择位图上具有 4 个点的区域

    我正在 Android 上使用位图 在使用 4 个点选择位图上的区域时遇到问题 并非所有 4 点组都适合我 在某些情况下 结果只是一个空白位图 而不是裁剪后的位图 如图所示 并且 logcat 中没有任何错误 甚至是内存错误 这是我用来进行

随机推荐

  • 【Git】规范化 Git 提交信息 Commitizen

    nodejs 安装 nodejs npm scoop span class token function install span nodejs nvm Commitizen commitizen cz cli 我们需要借助它提供的 git
  • 【Java 后端开发】JMeter 压测工具的使用

    目录 JMeter 压测工具的使用1 添加线程组2 HTTP请求3 查看结果树4 聚合报告实战Jmeter平均响应时间和TPS的计算方法 JMeter 压测工具的使用 发现性能瓶颈 xff0c 优化的方式 时间节点 xff1a 项目完成之后
  • 【Java】面试代码题 多线程

    CONTENT 1 实现一个死锁 快手一面8 11实现一实现二 xff08 提取相同逻辑更简洁 xff09 2 两个线程交替打印 0 1003 三个线程交替打印 xff0c 线程0打印零 xff0c 线程1打印奇数 xff0c 线程0打印0
  • 【二叉树】前、中、后 序遍历(递归+迭代)

    CONTENT leetcode 练习题目二叉树定义1 先序遍历递归迭代直接做法标记法 2 中序遍历递归迭代直接做法标记法 3 后序遍历递归迭代直接做法标记法反转类前序遍历结果 Reference leetcode 练习题目 144 二叉树
  • 【Java】代理模式(静态代理&动态代理)

    CONTENT 代理模式静态代理动态代理JDK 动态代理 xff08 基于接口 xff09 CGLIB 动态代理 xff08 基于类继承 xff09 JDK 动态代理 v s CGLIB 动态代理JDK 动态代理为什么必须基于接口 Refe
  • 【Java】面试代码题 手写 HashMap(参考 JDK7 拉链头插法实现)

    这是一个参考 JDK7 实现的非常简单的 HashMap xff0c 只实现了最最基础的 get put remove containsKey 方法 解决冲突用的是最简单的拉链法 xff0c hash 用的是 JDK 自带的 hashCod
  • Win10微信查看图片卡顿或发送图片卡顿的原因和解决方法

    1 引言 我是Windows11系统 xff0c 本篇文章同样适用于Windows10 该现象包括点击放大查看pc端微信中别人发送的图片会卡顿 在微信中发送图片时会卡顿 拖动图片或其他文件至微信聊天窗口发送时会卡顿 卡顿的表现为pc端微信无
  • 【lombok @Slf4j】报错 SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“.

    CONTENT 事件来源具体报错原因解决Reference 事件来源 正常 用 SLF4J 写 log xff0c 每次写新的类 xff0c 就需要重新写 logger xff0c 非常麻烦 span class token keyword
  • 【Java】JDK 7 HashMap 头插法在并发情况下的成环问题

    CONTENT 问题描述成因详解总结Reference 问题描述 JDK 7 的 HashMap 解决冲突用的是拉链法 xff0c 在拉链的时候用的是头插 xff0c 每次在链表的头部插入新元素 resize 的时候用的依然是头插 xff0
  • Uva-11768 Lattice Point or Not题解

    知识 xff1a 扩展gcd 题目 xff1a 题目链接 Now a days a very common problem is The coordinate of two points in Cartesian coordinate sy
  • CodeForces - 225B题解

    知识 xff1a 无 题目 xff1a CodeForces 225B链接 Numbers k bonacci k is integer k gt 1 are a generalization of Fibonacci numbers an
  • HDU 2177 取(2堆)石子游戏题解

    知识 xff1a 博弈论 威佐夫博弈 xff08 Wythoff Game xff09 题目 xff1a HDU 2177 链接 有两堆石子 xff0c 数量任意 xff0c 可以不同 游戏开始由两个人轮流取石子 游戏规定 xff0c 每次
  • 浙江省赛2015 _ L _ ZOJ 3880

    水题 题目 xff1a ZOJ 3880 There is a popular multiplayer online battle arena game called Demacia of the Ancients There are lo
  • 浙江省赛2015 _ J - Convert QWERTY to Dvorak -> ZOJ 3878

    模拟水题 题目 xff1a ZOJ 3878 Edward a poor copy typist is a user of the Dvorak Layout But now he has only a QWERTY Keyboard wi
  • 浙江省赛2015 _ G - Lunch Time -> ZOJ - 3875

    水题 这道题比赛当时没有做出来 原因是 ends xff0c C 43 43 对ends的处理是在缓冲区插入 0 然后刷新 xff0c 而不是空格 xff0c 能输出空格是因为Windows对 0 默认的处理方式是输出一个空格 xff0c
  • 贪心算法

    算法导引 xff1a 问题 xff1a 有1元 5元 10元 100元 500元的硬币 xff08 假设所有面值硬币都足够 xff09 现在要找给顾客620元 xff0c 最少需要多少枚硬币 xff1f xff08 改编自挑战程序设计竞赛
  • 蓝桥杯_PREV-34_矩阵翻硬币

    题目 xff1a 矩阵翻硬币 链接 问题描述 小明先把硬币摆成了一个 n 行 m 列的矩阵 随后 xff0c 小明对每一个硬币分别进行一次 Q 操作 对第x行第y列的硬币进行 Q 操作的定义 xff1a 将所有第 i x 行 xff0c 第
  • ONL(open network linux) from OCP

    https opennetlinux org github xff1a https github com OpenComputeProject OpenNetworkLinux Open Network Linux is a Linux d
  • C++ string数组注意事项

    string xff1a 经实践string数组 xff0c 如string s 10100 xff0c 不能使用s j k 61 这种方法赋值 具体原因未知 求教为什么 xff1f
  • CodeForces - 954C - Matrix Walk

    坑题 题目 xff1a CodeForces 954C 题意 矩阵的每一元素可以用 Ai j 61 y i 1 43 j 来表示 xff0c xff08 就是二维数组用一维指针表示的方法 xff09 xff0c 给你一个路径序列 xff0c