牛客网-数列还原

数列还原

解题思路:稍加分析,根据数据规模,先对模糊的数字全排列吗,然后组成完整的数组,再判断完整的数组是否满足条件。 

失误:把简单的问题想的有点复杂了。

import java.util.*;
public class Main {
    public static List<ArrayList<Integer>> res=new ArrayList<ArrayList<Integer>>();
    public static List<Integer> temp=new ArrayList<Integer>();
    public static void main(String args[]){
        Scanner in=new Scanner(System.in);
        while(in.hasNext()){
            int n=in.nextInt();
            int k=in.nextInt();
            int num[]=new int[n+1];
            int visit[]=new int[n+1];
            List<Integer> list=new ArrayList<Integer>();
            for(int i=1;i<=n;i++){
                num[i]=in.nextInt();
                visit[num[i]]=1;
            }
            for(int i=1;i<=n;i++){
                if(visit[i]==0){
                    list.add(i);
                }
            }
            res.clear();
            temp.clear();
            int visit2[]=new int[list.size()];
            dfs(visit2,list);
            int rescnt=0;
            for(int i=0;i<res.size();i++){
                List<Integer> temp2=res.get(i);
                int cnt3=0;
                int tempnum[]=new int[n+1];
                for(int j=1;j<=n;j++){
                    if(num[j]==0){
                        tempnum[j]=temp2.get(cnt3++);
                    }else{
                        tempnum[j]=num[j];
                    }
                }
                if(f1(tempnum)==k)
                    rescnt++;
            }
            System.out.println(rescnt);
        }
    }
    public static int f1(int num[]){
        int cnt=0;
        for(int i=1;i<num.length;i++){
            for(int j=i+1;j<num.length;j++){
                if(num[j]>num[i])
                    cnt++;
            }
        }
        return cnt;
    }
    public static void dfs(int visit[],List<Integer> list){
        if(temp.size()==list.size()){
            res.add(new ArrayList(temp));
        }else{
            for(int i=0;i<list.size();i++){
                if(visit[i]==0){
                    visit[i]=1;
                    temp.add(list.get(i));
                    dfs(visit,list);
                    visit[i]=0;
                    temp.remove(temp.size()-1);
                }
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/anhuibozhoushatu/article/details/83930261