题解:CF954C Matrix Walk
tangtianyao0123 · · 题解
这么简单为什么评绿?????
题目传送门,CF题目传送门。
通过分析:
- 当
(i,j)\to(i,j\pm1) 时,权值\pm1 。 - 当
(i,j)\to(i\pm1,j) 时,权值\pm y 。
所以,
显然,如果
当求出
对于
code
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 1;
int n, a[N], num = 0;
int main(){
ios::sync_with_stdio(0), cin.tie(0);
cin >> n;
for(int i = 1; i <= n; i++)
cin >> a[i];
for(int i = 2; i <= n; i++){
if(abs(a[i] - a[i - 1]) == 1) continue;
if(a[i] == a[i - 1]) return cout << "NO", 0;
if(num && abs(a[i] - a[i - 1]) != num) return cout << "NO", 0;
num = abs(a[i] - a[i - 1]);
}
if(!num) num = 1e9;
for(int i = 2; i <= n; i++){
if(abs(a[i] - a[i - 1]) == 1 && (a[i] - 1) / num != (a[i - 1] - 1) / num) return cout << "NO", 0;
}
cout << "YES\n1000000000 " << num;
return 0;
}