首页 > 其他 > 详细

Codeforces Round #655 (Div. 2) C. Omkar and Baseball (思维)

时间:2020-07-16 15:29:41      阅读:29      评论:0      收藏:0      [点我收藏+]

技术分享图片

  • 题意:有一个数组,每次可以修改子数组,但是修改后每个元素的位置都必须变化,求最少修改多少次使得这个数组有序.

  • 题解:假如这个数组本来就有序,我们直接输出0.否则,对于数组两端,假如它们有序,那么我们可以不用做任何操作,直接看中间部分,所以我们分别扫一遍两端,分别找到两端第一个不满足条件的位置,然后我们遍历中间这个部分,如果没有任何一个位置的下标等于自己,那么操作数就是\(1\),如果有,我们就要先把它们打乱,然后再排序,所以操作数是\(2\).

  • 代码:

    int t;
    int n;
    int a[N];
     
    int main() {
        ios::sync_with_stdio(false);cin.tie(0);
      	cin>>t;
      	 while(t--){
      	 	cin>>n;
      	 	 for(int i=1;i<=n;++i){
      	 	 	cin>>a[i];
      	 	 }
      	 	 int l=1,r=n;
      	 	 while(l<=n && l==a[l]) l++;
      	 	 while(r>=1 && r==a[r]) r--;
      	 	 if(l==n+1 && r==0){
      	 	 	cout<<0<<endl;
      	 	 }
      	 	 else{
      	 	 	bool ok=0;
      	 	 	for(int i=l;i<=r;++i){
      	 	 		if(a[i]==i){
      	 	 			ok=1;
      	 	 			break;
      	 	 		}
      	 	 	}
      	 	 	if(ok) cout<<2<<endl;
      	 	 	else cout<<1<<endl;
      	 	 }
      	 }
     
        return 0;
    }
    

Codeforces Round #655 (Div. 2) C. Omkar and Baseball (思维)

原文:https://www.cnblogs.com/lr599909928/p/13322322.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!