阿里笔试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-25 12:05
已编辑
湖南科技大学 Java
若梦难了:我有你这简历,已经大厂乱杀了
点赞 评论 收藏
分享
2 2 评论
分享
牛客网
牛客企业服务