Codeforces 954C Matrix Walk (思维)
题目链接:Matrix Walk
题意:设有一个N×M的矩阵,矩阵每个格子都有从1~n×m的一个特定的数,具体数的排列如图所示。假设一个人每次只能在这个矩阵上的四个方向移动一格(上下左右),给出一条移动的轨迹上的数字,求出满足这个人移动轨迹的一格矩阵的N和M。
题解:首先可以确定的是左右移动的话,相邻格子之间数字相差的绝对值一定是1,而向上或向下移动的数字只差的绝对值一定相等。按照这个思路,判断给出的轨迹相邻格子之间的差值,看是否差值的绝对值只有1和另外一个数字就可以基本解决问题了。但是这里还要进行特判,首先是轨迹中差值只有1的情况,就直接输出YES并将轨迹中的最大值取出,输出1,max。还要判定的是另一种情况,就是假设现在向上向下移动的数值确定了,假设为x,就有M = x。要注意的是差值为1的情况中,行尾的格子是不能移动到行头的(行头的格子同理不能移动到行尾)。所以遍历一下,看一下有没有这种情况。
#include<bits/stdc++.h>
using namespace std;
const int MAX_N = 2e5+;
const int INF = 1e9+;
int N,M,S;
int vec[MAX_N];
int main(){
while(cin>>N){
int maxn = -;
for(int i=;i<N;i++){
scanf("%d",&vec[i]);
maxn = max(maxn,vec[i]);
}
int pos = -;
bool flag = true;
for(int i=;i<N;i++){
int t = max(vec[i] - vec[i-],vec[i-] - vec[i]);
if(t != ){
if(t == ){
flag = false;
break;
}
if(pos == -) pos = t;
else if(pos != t){
flag = false;
break;
}
}
} if(!flag){
cout<<"NO"<<endl;
}else{
if(pos == -){
cout<<"YES"<<endl;
cout<<<<" "<<maxn<<endl;
}
else{
int pre = maxn / pos;
if(maxn % pos) pre++; bool f = true;
for(int i=;i<N-;i++){
if(vec[i]%pos == && vec[i] - vec[i+] == -){
f = false; //cout<<"??"<<endl;
break;
}
else if(vec[i] %pos == && vec[i]-vec[i+] == ) {
//cout<<vec[i]<<"...."<<vec[i+1]<<endl;
f = false; //cout<<"?????????"<<endl;
break;
}
}
if(!f){
cout<<"NO"<<endl;
}else {
cout<<"YES"<<endl;
cout<<pre<<" "<<pos<<endl;
}
}
} }
return ;
}
Codeforces 954C Matrix Walk (思维)的更多相关文章
- Educational Codeforces Round 40 C. Matrix Walk( 思维)
Educational Codeforces Round 40 (Rated for Div. 2) C. Matrix Walk time limit per test 1 second memor ...
- Codeforeces 954C Matrix Walk
题目大意 考虑一个 $x\times y$ 的矩阵 $A_{x\times y}$ ,$A_{i,j} = (i-1)x+y$ . 从矩阵中的某个位置出发,每次可向上下左右移动一步,每到一个位置,记录 ...
- Matrix Walk CodeForces - 954C
题意: 就是给出一连串的数字 这些数字是从第一个数字依次走过的 emm..就是这样.. 然后让你判断这个矩阵是否存在 如果存在输出行和列的数量 其中行..开到最大就好了...主要是判断列 在输入 ...
- Codeforces 1332 D. Walk on Matrix(构造矩阵)
怎么构造呢? \(首先我们不可能去构造一个2000*2000的矩阵,那太复杂了\) \(也许我们可以看看2*2的矩阵??\) \[\left[ \begin{matrix} x&y\\ z&a ...
- Codeforces 364A - Matrix
原题地址:http://codeforces.com/problemset/problem/364/A 题目大意: 给定一个数字a(0 ≤ a ≤ 109)和一个数列s(每个数都是一位,长度不超过40 ...
- Educational Codeforces Round 60 C 思维 + 二分
https://codeforces.com/contest/1117/problem/C 题意 在一个二维坐标轴上给你一个起点一个终点(x,y<=1e9),然后给你一串字符串代表每一秒的风向, ...
- Educational Codeforces Round 61 F 思维 + 区间dp
https://codeforces.com/contest/1132/problem/F 思维 + 区间dp 题意 给一个长度为n的字符串(<=500),每次选择消去字符,连续相同的字符可以同 ...
- [Codeforces 1178D]Prime Graph (思维+数学)
Codeforces 1178D (思维+数学) 题面 给出正整数n(不一定是质数),构造一个边数为质数的无向连通图(无自环重边),且图的每个节点的度数为质数 分析 我们先构造一个环,每个点的度数都是 ...
- Sorted Adjacent Differences(CodeForces - 1339B)【思维+贪心】
B - Sorted Adjacent Differences(CodeForces - 1339B) 题目链接 算法 思维+贪心 时间复杂度O(nlogn) 1.这道题的题意主要就是让你对一个数组进 ...
随机推荐
- Httprunner学习
一.简介 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份YAML/JSON脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种测试需求. 核心特性: 继 ...
- PHP检查当前数组为几维数组
本文出至:新太潮流网络博客 /** * [TestArray 检测数组是一维还是二维] * @E-mial wuliqiang_aa@163.com * @TIME 2017-04-07 * @WEB ...
- If TransactionScope will close database connections
问 Do TransactionScope work with closed database connections? using (var transaction = new Transactio ...
- Sql server 的float和real类型会产生科学计数法,如何消除科学计数法
sqlserver 查询的 float 类型 如果是0.00000000001的话,会被显示为1E-11,请问怎么才能让查询出的结果显示为正常显示方式而不是科学计数法? 答案: float 和 rea ...
- TCP是如何实现三次握手的?
什么是三次握手 TCP是网络传输层的协议,提供面向连接的可靠的字节流服务,要通信得先建立连接 所谓三次握手就是指,建立一个TCP连接时,需要CLient与Server发送三个包,确认连接的建立 这一过 ...
- MySQL分析函数实现
| MySQL分析函数实现还好MySQL8.0已经实现了与Oracle相同的分析函数. 1. 实现rownumSET @rn:=0;SELECT @rn:=@rn+1 AS rownum ,e.* F ...
- IP解析计算机名称
#-*- coding: UTF-8 -*- import subprocess,sys,threading reload(sys) sys.setdefaultencoding('utf-8') d ...
- 【11】python 递归,深度优先搜索与广度优先搜索算法模拟实现
一.递归原理小案例分析 (1)# 概述 递归:即一个函数调用了自身,即实现了递归 凡是循环能做到的事,递归一般都能做到! (2)# 写递归的过程 1.写出临界条件 2.找出这一次和上一次关系 3.假设 ...
- CSS布局(三) 布局模型
布局模型 在网页中,元素有三种布局模型:1.流动模型(Flow) 默认的2.浮动模型 (Float)3.层模型(Layer) 1.流动模型(Flow) 流动(Flow)模型是默认的网页布局模式.也就是 ...
- Jenkins 在mac平台的安装与配置
1. 安装: 强烈推荐直接下载war包方式安装,方便修改项目工作目录.首先确保电脑上安装了java,接着下载tomcat(任意版本).将tomcat安装在任意想要的目录,然后下载jenkins war ...