阿里笔试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);
    }

}

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

相关推荐

不愿透露姓名的神秘牛友
昨天 16:41
妈妈,我被应届生身份压得喘不过气,真的好想你们。我不知道该往哪走,也不知道该怎么努力,甚至开始怀疑是不是自己根本就不够聪明。从小,大家都说我是个笨小孩,只有拼尽全力才能读好书。我很少像其他孩子那样肆意玩耍,因为转学到乡村小学,连方言都不会说,别人说什么我都傻乎乎地相信。但我一直努力着,从乡村小学到初中尖子生,考上重点高中,选择文科,进入&nbsp;985&nbsp;高校,再到转专业,参加演出、担任学生干部。本想努力保研,却被疫情打乱计划,那段日子,我仿佛被黑暗笼罩,花了好久才走出来。后来我积极参加比赛、大创项目,大量阅读,还以为自己有文学天赋,于是决定考研。我想去上海,想去看看更大的世界,想用自己的文字为那些真诚...
wuwuwuoow:工作可以慢慢找,因为急也没用。根据我的经验,工作主要还是看运气,慢慢来吧。比起找工作,我觉得更重要的是调整下心态。我就直说吧,你目前状态肯定找不到工作,感觉处于崩溃边缘了。 现在有两种选择:一种是找不到工作每天又很焦虑,一种是找不到工作但每天很开心。你选择哪个呢? 可能会觉得奇怪,没工作怎么会开心呢?至少对我而言,工作很重要,但绝对不是生活的全部。你有摄影和画画的兴趣爱好,这点已经要比绝大部分人强了。很多人虽然有工作,或者在读硕士博士,但他们唯一的“兴趣爱好”就是玩手机。你的精神世界至少比我要丰富,我每天只会玩手机。我也想学画画,但又不想动手去学,哈哈。 我相信你一开始学摄影和画画,不是为了赚钱才去学的,而是因为自己喜欢才去学的。所以没有必要这么功利,非得从兴趣爱好里赚钱。因为和钱相关的事情,不叫兴趣爱好,这叫工作,工作怎么会让人快乐?所以纯粹点,把兴趣爱好当成兴趣爱好本身,作为一种休闲娱乐的方式,不要想着从里面赚钱。就像我前面所说的一样,工作不是生活的全部。 平时的话,可以多陪妈妈聊聊天,妈妈肯定不指望你赚大钱,只希望你每天开开心心。就像最后只能回家当老师,又有什么不好的呢,可以多花时间陪陪家人。 也可以多试试冥想,闭上眼,专注呼吸,学会“活在当下”。没必要对过去的事情后悔,没必要对未来没发生的事情焦虑。因为你没法改变他们,你只能专注眼前的事情。 新疆的教育资源不算好,你能考上 985 足以证明你比大部分学习能力强了,所以你很聪明,你根本就不笨。只是你需要试试接纳自己,接纳自己是个普通人,接纳自己不可能什么都会,接纳自己也会犯错,也要接纳比自己更强的人存在。这才是实实在在的你。 所以,我建议你可以给自己休息一个月,调整一下心情。旅游,冥想,运动,规律作息。等心情好了,再来烦恼下工作的事情,好吗? 加油哦
点赞 评论 收藏
分享
03-31 18:02
门头沟学院 Java
白日梦想家_等打包版:不要的哦佛给我
点赞 评论 收藏
分享
评论
2
2
分享

创作者周榜

更多
牛客网
牛客企业服务