列表

详情


NC202231. 牛牛与组合数学

描述

    牛牛并不是一个擅长组合数学的选手,但是这并不妨碍他喜欢做组合数学。虽然他人是菜,但是他嘴巴不菜。

    众所周知,计算组合数是组合数学中最简单的事情.现在牛牛遇到了一个难题,给出,他想知道是否等于

输入描述

一行三个数分别代表.

输出描述

如果,输出.否则输出

示例1

输入:

4 2 6

输出:

Yes!

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 23ms, 内存消耗: 1376K, 提交时间: 2020-03-17 19:56:04

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
string p;
ll n,m,pp=0,c=1;
int main()
{
    cin>>n>>m>>p;
    for(int i=0; i<p.size(); i++)
        pp=(pp*10+p[i]-'0')%mod;
    for(int i=n-m+1; i<=n; i++)
        c=c*i%mod;
    for(int i=2; i<=m; i++)
        pp=pp*i%mod;
    if(c==pp)
        puts("Yes!");
    else
        puts("No!");
    return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 15ms, 内存消耗: 896K, 提交时间: 2020-02-22 22:38:36

#include<iostream>
#include<cstring>
using namespace std;
#define ll long long
const int mod=1e9+7;
string p;
ll n,m,pp=0,c=1;
int main(){
	cin>>n>>m>>p;
	int l=p.size();
	for(int i=0;i<l;i++)pp=(pp*10+p[i]-'0')%mod;
	for(int i=n-m+1;i<=n;i++)c=c*i%mod;
	for(int i=2;i<=m;i++)pp=pp*i%mod;
	if(c==pp)puts("Yes!");
	else puts("No!");
	return 0;
} 

上一题