美文网首页
hihocoder58

hihocoder58

作者: GoDeep | 来源:发表于2018-05-07 20:53 被阅读0次

    http://hihocoder.com/contest/offers58/problems
    题目1 : 最大的K-偏差排列
    遍历从大到小,如果剩下的数满足条件就说明这个数就是当前位置的最佳值

    
    import java.util.Scanner;
    import java.util.TreeSet;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n=sc.nextInt(), k=sc.nextInt();
            int[] res=new int[1+n];
            TreeSet<Integer>left=new TreeSet<Integer>();
            boolean[] vis=new boolean[1+n];
            for(int i=1;i<=n;i++)left.add(i);
            for(int i=1;i<=n;i++) {
                int j=Math.min(i+k, n);
                while(true) {
                    while(vis[j]) j--;
                    boolean ok=true;
                    left.remove(j);
                    int q = 0;
                    for(int p:left) {
                        if(Math.abs(p-(i+q+1))>k) {
                            ok = false;
                            break;
                        }
                        q ++;
                    }
                    if(ok) break;
                    left.add(j);
                    j--;
                }
                res[i]=j;
                vis[j]=true;
                left.remove(j);
            }
            for(int i=1;i<n;i++) System.out.print(res[i]+" ");
            System.out.println(res[n]);
        }
    }
    
    

    题目2 : 孤独的字符
    就是不久前的LC contest,focus在每个字符的有效count

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            char[] cs=sc.next().toCharArray();
            int res=0;
            Map<Character, ArrayList<Integer>>m=new HashMap<Character, ArrayList<Integer>>();
            for(int i=0;i<cs.length;i++) {
                if(!m.keySet().contains(cs[i])) {
                    ArrayList<Integer> t=new ArrayList<Integer>();
                    t.add(-1);
                    m.put(cs[i], t);
                }
                m.get(cs[i]).add(i);
            }
            
            for(char c:m.keySet()) m.get(c).add(cs.length);
            
            for(char c:m.keySet()) {
                for(int i=1;i<m.get(c).size()-1; i++) {
                    int a=m.get(c).get(i-1),b=m.get(c).get(i),d=m.get(c).get(i+1);
                    res += (b-a)*(d-b);
                }
            }
            System.out.println(res);
        }
    }
    

    题目3 : 秋天来了
    TODO;感觉类似于之前求最多公共interval


    image.png

    相关文章

      网友评论

          本文标题:hihocoder58

          本文链接:https://www.haomeiwen.com/subject/qvfbrftx.html