Problem 2238 Daxia & Wzc's problem 1627 瞬间移动

Posted stupid_one

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Problem 2238 Daxia & Wzc's problem 1627 瞬间移动相关的知识,希望对你有一定的参考价值。

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1627

http://acm.fzu.edu.cn/problem.php?pid=2238

对应的51NOD这个题,先把n--和没m--

再套公式

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <assert.h>
#define ios ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;


#include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
LL quick_pow(LL a, LL b, LL MOD) {  //求解 a^b%MOD的值
    LL base = a % MOD;
    LL ans = 1; //相乘,所以这里是1
    while (b) {
        if (b & 1) {
            ans = (ans * base) % MOD; //如果这里是很大的数据,就要用quick_mul
        }
        base = (base * base) % MOD;    //notice。注意这里,每次的base是自己base倍
        b >>= 1;
    }
    return ans;
}
LL C(LL n, LL m, LL MOD) {
    if (n < m) return 0; //防止sb地在循环,在lucas的时候
    if (n == m) return 1;
    LL ans1 = 1;
    LL ans2 = 1;
    LL mx = max(n - m, m); //这个也是必要的。能约就约最大的那个
    LL mi = n - mx;
    for (int i = 1; i <= mi; ++i) {
        ans1 = ans1 * (mx + i) %MOD;
        ans2 = ans2 * i % MOD;
    }
    return (ans1 * quick_pow(ans2, MOD - 2, MOD) % MOD); //这里放到最后进行,不然会很慢
}
const int MOD = 1e9 + 7;
void work() {
    int n, m;
    cin >> n >> m;
    cout << C(n + m - 4, n - 2, MOD) << endl;
}
int main() {
#ifdef local
    freopen("data.txt", "r", stdin);
//    freopen("data.txt", "w", stdout);
#endif
    work();
    return 0;
}
51NOD
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;

#include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
LL a, d, m, i;
const int MOD = 1000000007;
LL quick_pow (LL a, LL b, LL MOD) {
    //求解 a^b%MOD的值
    LL base = a % MOD;
    LL ans = 1; //相乘,所以这里是1
    while (b) {
        if (b & 1) {
            ans = (ans * base) % MOD; //如果这里是很大的数据,就要用quick_mul
        }
        base = (base * base) % MOD;    //notice
        //注意这里,每次的base是自己base倍
        b >>= 1;
    }
    return ans;
}
LL C (LL n, LL m, LL MOD) {
    if (n < m) return 0; //防止sb地在循环,在lucas的时候
    if (n == m) return 1;
    LL ans1 = 1;
    LL ans2 = 1;
    LL mx = max(n - m, m); //这个也是必要的。能约就约最大的那个
    LL mi = n - mx;
    for (int i = 1; i <= mi; ++i) {
        ans1 = ans1 * (mx + i) % MOD;
        ans2 = ans2 * i % MOD;
    }
    return (ans1 * quick_pow(ans2, MOD - 2, MOD) % MOD); //这里放到最后进行,不然会很慢
}
LL Lucas (LL n, LL m, LL MOD) {
    LL ans = 1;
    while (n && m && ans) {
        ans = ans * C(n % MOD, m % MOD, MOD) % MOD;
        n /= MOD;
        m /= MOD;
    }
    return ans;
}

void work () {
    if (i == 1) {
        printf ("%lld\\n", a);
        return;
    }
    LL ans = (C(m + i - 1, m, MOD) * a % MOD + C(m + i - 1, i - 2, MOD) * d % MOD) % MOD;
    printf ("%lld\\n", ans);
    return ;
}
int main() {
#ifdef local
    freopen("data.txt", "r", stdin);
#endif
    while (scanf("%lld%lld%lld%lld", &a, &d, &m, &i) != EOF) work();
    return 0;
}
FZUOJ

 

以上是关于Problem 2238 Daxia & Wzc's problem 1627 瞬间移动的主要内容,如果未能解决你的问题,请参考以下文章

Fixed Partition Memory Management UVALive - 2238 建图很巧妙 km算法左右顶点个数不等模板以及需要注意的问题 求最小权匹配

Problem E: 向量的运算

mysql主从同步错误代码1008

java https://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=2133

UVA 11991Easy Problem from Rujia Liu?STL

BZOJ3339:Rmq Problem & BZOJ3585 & 洛谷4137:mex——题解