ARC 076 C

来源:互联网 发布:php 分页偏移量 编辑:程序博客网 时间:2024/06/15 09:22

题意:
有两种类别的人排成一列,同类别的人不能相邻,求方案数。
算法:阶乘….
代码:
#include <bits/stdc++.h>/*#include <algorithm>#include <cstring>#include <cmath>#include <cstdio>#include <iostream>#include <map>#include <queue>#include <vector>#include <set>*/using namespace std;typedef long long LL;typedef double DB;typedef unsigned int UI;typedef pair<int, int> PII;const int inf = 0x7f7f7f7f;#define rdi() read<int>()#define rdl() read<LL>()#define rds(a) scanf("%s", a)#define mk(i, j) make_pair(i, j)#define pb push_back#define fi first#define se second#define For(i, j, k) for (int i = j; i <= k; i ++)#define Rep(i, j, k) for (int i = j; i >= k; i --)#define Edge(i, u) for (int i = head[u]; i; i = e[i].nxt)template<typename t> t read() {    t x = 0; int f = 1; char c = getchar();    while (c > '9' || c < '0') f = c == '-' ? -1 : 1 , c = getchar();    while (c >= '0' && c <= '9') x = x * 10 + c - 48 , c = getchar();    return x * f;}template<typename t> void write(t x) {    if (x < 0){        putchar('-'), write(-x);        return;    }    if (x >= 10) write(x / 10);    putchar(x % 10 + 48);}const int P = 1e9 + 7;int n, m, ans;int main() {//  freopen(".in", "r", stdin);//  freopen(".out", "w", stdout);    n = rdi(), m = rdi();    if (n < m) swap(n, m);    if (n - m > 1) return puts("0"), 0;    ans = 1;    for (int i = 1; i <= n; i ++) ans = (1ll * ans * i) % P;    for (int i = 1; i <= m; i ++) ans = (1ll * ans * i) % P;    if (n == m) ans = (2ll * ans) % P;    printf("%d\n", ans);    return 0;}
原创粉丝点击