牛客编程巅峰赛S2第11场 - 钻石&王者 做题记录

牛客编程巅峰赛S2第11场 - 钻石&王者 做题记录

t1 差分数组

    public int oddnumber (int n, int m, int[] l, int[] r) {
        // write code here
        int[] book = new int[n+2];
        book[0]=m;
        for(int i=0;i<l.length;++i){
            book[l[i]]++;
            book[r[i]+1]--;
        }
        int ans =0;

        int sum = book[0];
        for(int i=1;i<book.length-1;++i){
            sum +=book[i];
            if((sum &1) ==1){
                ans++;
            }
        }
        return ans;
    }

t2 找规律+隔板法
x+y+z+2a+5b
y<=1
z<=4
分组 x + (2a+y) + (5b+z) 为三个任意整数之和
题目转化为三个任意整数之和为n 有几种情况

    public long wwork (int n) {
        // write code here
        return ((long)(n+2))*(n+1)/2;
    }

t3 带预处理的乘法逆元求组合数

    int mod =1000000007;
    long[] fac;
    public int[] city (int n, int k, int[] Point) {
        // write code here
        fac=new long[n+1];
        fac[1] = 1;
        for(int i = 2; i <= n; i++){
            fac[i] = fac[i - 1] * 1L * i % mod;
        }


        long max = inv(c(n,k));
        //按照位置  第i高的 出现 C(n-i,k-1)次
        long[] res = new long[n+1];
        for(int i=k;i<=n;++i){ //C(i-1,k-1)
            res[i]=c(i-1,k-1);
        }

        int[] paiming = Arrays.copyOf(Point, Point.length);
        Arrays.sort(paiming);
        Map<Integer,Integer> map = new HashMap<>();
        int mingci=1;
        for(int i= paiming.length-1;i>=0;--i){
            map.put(paiming[i],mingci++);
        }

        int[] ans = new int[n];
        for(int i=0;i<ans.length;++i){
            ans[i]=(int)((res[n-map.get(Point[i])+1]*max)%mod);
        }
        return ans;
    }

    public long c(int n, int m)
    {
        if(m > n || m < 0) return 0l;
        if(m == 0 || m == n) return 1l;
        long res = fac[n] * quickPow((fac[m] * fac[n - m]) % mod, mod - 2) % mod;
        return res;
    }
    public long quickPow(long base,long power){
        long result = 1;
        while(power>0){
            if( (power&1) ==1 ){
                result = (result*base)%mod;
            }
            power = power/2;
            base = (base*base )%mod;
        }
        return result;
    }

    public  long inv(long a){
        return quickPow(a,mod-2);
    }
全部评论

相关推荐

死在JAVA的王小美:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,我也是,让我免了一轮,但是硬气拒绝了
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务