其他分享
首页 > 其他分享> > C. Shinju and the Lost Permutation

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