0
点赞
收藏
分享

微信扫一扫

服务器中了360后缀勒索病毒怎么解决,勒索病毒解密,数据恢复

三次方 2023-10-26 阅读 16
算法

解题思路:这题题目也说了就是一道排列组合题。 有哪些组合,可以让三份的糖果总数恰好能被三人均分?   

1:三份糖果 模3余数均为1 的 糖果;

2:三份糖果 模3余数均为2 的 糖果;

3:三份糖果 模3余数均为0 的 糖果;

4:一份糖果 模3余数为1 的 糖果 + 一份糖果 模3余数均为2 的 糖果 + 一份糖果 模3余数均为0 的 糖果。

最后对这4种情况的组合数求和就行了。   (注意取模 和 爆int )

AC代码:

#include <stdio.h>

const int Mod = 1e9+7;
int compute(__int64 s){                         // 组合数公式 C(n,3)
    return (s*(s-1)*(s-2)/6) % Mod;
}

int main()
{
    int n,N;
    __int64 x,y,z;
    __int64 ans1,ans2,ans3,ans;
    while (scanf("%d",&N) != EOF && N != 0)
    {
        x = N/3;                                // x:3的倍数的 个数
        y = z = x;
        n = N%3;
        if (n == 1)         y += 1;             // y:模3余1的数 的个数
        else if (n == 2)    y += 1, z += 1;     // z:模3余2的数 的个数
        ans1 = compute(x);
        ans2 = compute(y);
        ans3 = compute(z);
        ans = (ans1+ans2+ans3+x*y*z) % Mod;
        printf("%I64d\n",ans);
    }
    return 0;
}
举报

相关推荐

0 条评论