阿里笔试AK(9月9日)

T2 四元环形构造

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] a = new int[n + 1];

        if (n % 4 == 0 || n % 4 == 1) {
            for (int i = 1; i <= n / 2; i += 2) {
                a[i] = i + 1;
                a[i + 1] = n - i + 1;
                a[n - i + 1] = n - i;
                a[n - i] = i;
            }
            if (n % 2 == 1) {
                a[n / 2 + 1] = n / 2 + 1;
            }

            for (int i = 1; i <= n; ++i) {
                System.out.print(a[i] + " ");
            }
        } else {
            System.out.print(-1);
        }

        scanner.close();
    }
}

T3 组合数学

import java.util.Scanner;

public class Main {
    static int Mod = 1000000007;
    static int cmbN = 1000000;
    static long[] cmbfact = new long[cmbN + 1];
    static long[] cmbfactinv = new long[cmbN + 1];
    static long[] cmbinv = new long[cmbN + 1];
    public static long quickPow(long a, long b) {
        long ans = 1;
        while (b > 0) {
            if ((b & 1) == 1) {
                ans = ans * a % Mod;
            }
            b >>= 1;
            a = a * a % Mod;
        }
        return ans;
    }
    public static long cmb(int n, int r) {
        if (n < r) {
            return 0;
        } else {
            return cmbfact[n] * cmbfactinv[r] % Mod * cmbfactinv[n - r] % Mod;
        }
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.next();
        int n = s.length();


        cmbfact[0] = 1;
        cmbfactinv[0] = 1;
        cmbinv[0] = 0;
        cmbfact[1] = 1;
        cmbfactinv[1] = 1;
        cmbinv[1] = 1;
        for (int i = 2; i <= cmbN; i++) {
            cmbfact[i] = (cmbfact[i - 1] * i) % Mod;
            cmbinv[i] = (Mod - cmbinv[Mod % i] * (Mod / i) % Mod) % Mod;
            cmbfactinv[i] = (cmbfactinv[i - 1] * cmbinv[i]) % Mod;
        }

        long[] c = new long[26];
        for (int i = 0; i < n; i++) {
            c[s.charAt(i) - 'a']++;
        }

        long[] two = new long[26];
        long[] another = new long[26];

        for (int i = 0; i < 26; i++) {
            two[i] = cmb((int) c[i], 2);
            another[i] = (quickPow(2, c[i]) - two[i] + Mod) % Mod;
        }
        long ans = 0;
        for (int i = 0; i < 26; i++) {
            long count = 1;
            for (int j = 0; j < 26; j++) {
                if (i != j) {
                    count = count * another[j] % Mod;
                }
            }
            ans += count * two[i] % Mod;
            ans %= Mod;
        }

        System.out.println(ans);
    }

}

#笔试##笔试题解##阿里##阿里笔试##秋招#
全部评论

相关推荐

10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
2 2 评论
分享
牛客网
牛客企业服务