C. Shinju and the Lost Permutation
作者:互联网
C. Shinju and the Lost Permutation
题目大意:
这题目题意贼绕
给一个1~n的排列p,根据p做数列b,bi表示p1~pi中的最大值。b数列中不同的数值数量就是排列p的力量。
现在给出数列c,ci表示p向左循环右移i-1位所得到的力量值。问给出的c有没有可能被一种p得到。
思路和代码:
需要做几组数据模亿下。
当然,模的时候数据越怪越好。模之后可以发现:
当n在第一个的时候,力量就是1 。而有且只有这一种情况力量值会是1。
之后如果数据非降序,则一定上升值不大于1 。
string solve(){
cin >> n ;
vct<ll> a(n + 1 , 0) ;
rep(i , 1 , n ) cin >> a[i] ;
ll one = 0 , num = 0 ;
rep(i , 1 , n) if(a[i] == 1){
one = i ;
num ++ ;
}
if(num != 1) return "NO\n" ;//必定存在一个1
vct<ll> b ;
rep(i , one , n) b.pb(a[i]) ;
rep(i , 1 , one - 1) b.pb(a[i]) ;
rep(i , 1 , n ){
ll nxt = i + 1 > n ? 1 : i + 1 ;
if(a[nxt] > a[i] && a[nxt] - a[i] > 1) return "NO\n" ;
}
return "YES\n" ;
}//code_by_tyrii
小结:
环遍历的题目,要把一个循环走完来找出规律。
当然,要找出最初始的状态,在这道题里就是最大值在第一个时力量值是1的状态。
这样的话,就像我们在模像“42513”这样的奇怪数据时,就可以把最大值5放到最前面变成“51342”,这样c序列的初始值就是1,可能可以比较好想。
标签:nxt,return,数列,Lost,rep,Shinju,num,Permutation,最大值 来源: https://www.cnblogs.com/tyriis/p/16066266.html