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.这道题的题意主要就是让你对一个数组进 ...
随机推荐
- Django Forms实例
# Django的Form主要具有一下几大功能: # # 生成HTML标签 # 验证用户数据(显示错误信息) # HTML Form提交保留上次提交数据 # 初始化页面显示内容 # forms组件生成 ...
- Vue以CDN方式调用Swiper轮播异常
问题概览: 有一个小型单页应用项目,嫌用组件式调用vue-swiper麻烦,因此以CDN的方式调用swiper,结果轮播的图不动了! 爬了半天百度和谷歌都无解决方案,最后曲线救国的方式解决了问题. 解 ...
- 记录一次优化mysql查询语句的方法
今天在数据库中导入大量的数据,大概有25万条,结果在查询的时候优化没有做好,因此导致查询意外停止或者是直接查询程序中止,很是苦恼.所以才有了优化查询的方法总结 1.首先是查看一下数据量 2.接下来按照 ...
- 乘风破浪:LeetCode真题_028_Implement strStr()
乘风破浪:LeetCode真题_028_Implement strStr() 一.前言 这次是字符串匹配问题,找到最开始匹配的位置,并返回. 二.Implement strStr() 2.1 ...
- Java AWT
AWT是抽象窗口工具包,是API为Java 程序提供的建立图形用户界面GUI (Graphics User Interface)工具集,AWT可用于Java的applet和applications中. ...
- 实例化list
List<String> lists = new ArrayList<String>();list.add("123");
- MySql详解(七)
MySql详解(七) MySql视图 一.含义 mysql5.1版本出现的新特性,本身是一个虚拟表,它的数据来自于表,通过执行时动态生成. 好处: 1.简化sql语句 2.提高了sql的重用性 3.保 ...
- CentOS7+Nginx设置Systemctl restart nginx.service服务
centos 7上是用Systemd进行系统初始化的,Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度.关于 ...
- 离线安装Cloudera Manager 5和CDH5(最新版5.9.3) 完全教程(一)环境说明
关于CDH和Cloudera Manager CDH (Cloudera's Distribution, including Apache Hadoop),是Hadoop众多分支中的一种,由Cloud ...
- linux 的常用命令---------第十阶段
虚拟机三种网络模式 相同模式下的各个虚拟机之间都可以通信----两台虚拟机若都是 nat模式 或 桥接模式 或 仅主机模式,则这两台虚拟机之间是可以通信的. 桥接模式: (配置桥接模式的虚拟机可作为独 ...