京东笔试第二题

第二题

大佬求助,为啥我这个解法是错误的呢?0%通过lü'b
数据范围: n <= 1e5;
思路: 统计odd、even。然后求组合数。

#include 
#include 
#include 
using namespace std;
typedef long long LL;
const int N = 1e5 + 10, mod = 1e9 + 7;
int fact[N],infact[N];
int n;
int a[N];
//快速幂求逆元
int qmi(int a, int k, int p)
{
    int res = 1;
    while(k){
        if(k & 1) res = (LL) res * a % p;
        a = (LL)a * a % p;
        k >>= 1;
    }
    return res;
}
int main()
{
    cin >> n;
    int even = 0, odd = 0;
    for(int i = 0; i < n; i ++)
    {
        cin >> a[i];
        if(a[i] % 2 == 0) even ++;
        else odd ++;
    }
    LL ans = 0;
    fact[0] = infact[0] = 1;
    for(int i = 1; i < N; i ++){
        fact[i] = (LL)fact[i - 1] * i % mod;
        infact[i] = (LL)infact[i - 1] * qmi(i, mod - 2, mod) % mod;
    }
    if(odd >= 2){
        for(int i = 2; i <= odd ; i += 2){
        ans += (LL)fact[odd] * infact[i] % mod * infact[odd - i] % mod;
        }
    }
    if(even >= 2){
         for(int i = 2; i <= even; i ++){
        ans += (LL)fact[even] * infact[i] % mod * infact[even - i] % mod;          
        }
    }
    cout << ans << endl;
    return 0;
}
#京东笔试##京东2023秋招笔试好难啊#
全部评论
同楼主,我也是统计奇数偶数,然后求组合数,死活 0%白给一上午
1 回复 分享
发布于 2022-09-09 12:07 广东
可能连续偶数是连续五个2,组合数就有点问题了。来不及做了直接求2^n-n-1 50%
1 回复 分享
发布于 2022-09-09 12:09 江苏
1<<even-1-even + 1<<odd-1-odd; 只过了50%
点赞 回复 分享
发布于 2022-09-09 12:14 北京
这个题我用DP直接ac了 第三题是怎么做的 然后想问问单选题这种一般会看分数吗 感觉单选题瞎猜
点赞 回复 分享
发布于 2022-09-09 12:27 广东

相关推荐

一天代码十万三:实习东西太少了,而且体现不出你业务,3个月不可能就这点产出吧,建议实习多写点,玩具项目面试官都不感兴趣的
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客企业服务