zoukankan      html  css  js  c++  java
  • CF1455D Solution

    题目链接

    题解

    可以发现,如果(a_i>x)且不对(a_i)执行操作,(a_{i+1}-a_n)便无法执行操作。这个性质可以保证下述方法的正确性与最优性:

    找到第一个满足(a_{pos})之后序列单调不降的(pos),依次对所有(1le ile pos)(a_i>x)的元素将(x)(a_i)互换。因为(x)在操作过程中始终是单调递增的,因此所有进行过操作的元素一定满足单调不降。如果遇到(a_i<a_{i-1})的情况,则判定无法实现,因为(a_{i-1})已经是满足单调递增情况下的最小值。如果所有(1le ile pos)全部执行完毕,但是(a_{pos}>a_{pos+1})也判定无法实现,因为此时一定(x<a_{pos}<a_{pos+1}),无法进行后续操作。

    AC代码

    #include<bits/stdc++.h>
    using namespace std;
    const int N=510,inf=0x3f3f3f3f;
    int a[N]; 
    int main()
    {
    	int t,n,x;
    	scanf("%d",&t);
    	while(t--)
    	{
    		int ans=0,pos=0; 
    		bool flag=0;
    		scanf("%d%d",&n,&x);
    		for(int i=1;i<=n;i++) 
    		{
    			scanf("%d",&a[i]); 
    			if(a[i]<a[i-1]) pos=i;
    		}
    		for(int i=1;i<pos;i++)
    		{
    			if(a[i]>x) {ans++; swap(a[i],x);}
    			else if(a[i]<a[i-1]) {flag=1; break;}
    		}
    		if(a[pos-1]>a[pos] || flag) printf("-1
    ");
    		else printf("%d
    ",ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    大数减法
    MySQL配置的一些坑
    最大流_Edmonds-Karp算法
    最小生成树两连
    最短路三连
    对拍
    Broadcast
    Intent
    Custom Views
    Fragment
  • 原文地址:https://www.cnblogs.com/violetholmes/p/14162881.html
Copyright © 2011-2022 走看看