zoukankan      html  css  js  c++  java
  • 2016级算法期末上机-E.中等·ModricWang's Fight with DDLs II

    1125 ModricWang's Fight with DDLs II

    思路

    圆内被划分部分数的计算方式如下:

    圆内部的每一个交点都使得总份数增加了一;除此之外,每一根直线段最后抵达圆周时,总份数也增加了一。

    因此:

    总份数应该是 (1+圆内部的交点数量+直线段的数量)

    直线段的数量等于 (C_n^2)

    交点数量的求法需要一些思维量。可以把圆内部的每个交点看成是某个圆内接四边形的对角线交点,于是在n个点中,任意四个点的组合都对应了圆内部的某个交点。因此,交点数量等于 (C_n^4)

    最后的答案就是:

    (1+C_n^2+C_n^4=frac{1}{24}(n^4+6n^3+23n^2-18n+24))

    时间复杂度(O(1)) ,空间复杂度(O(1))

    代码

    #include <iostream>
    
    using namespace std;
    
    const int Mod = 100007;
    
    long long inv24, k;
    
    long long inv(long long a, long long m) {
        if (a == 1)return 1;
        return inv(m % a, m) * (m - m / a) % m;
    }
    
    int main() {
    #ifdef ONLINE_JUDGE
        ios_base::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
    #endif
        inv24 = inv(24, Mod);
        cin >> k;
        while (k--) {
            long long n, ans;
            cin >> n;
            n %= Mod;
            ans = n * (n + Mod - 6) % Mod;
            ans = n * (ans + 23) % Mod;
            ans = n * (ans + Mod - 18) % Mod;
            ans = (ans + 24) % Mod;
            ans = ans * inv24 % Mod;
            cout << ans << "
    ";
        }
    }
    
  • 相关阅读:
    MySQL DATE_SUB和SUBDATE函数:日期减法运算
    stream将list转化为map
    HackLab-脚本1
    隐写术-2
    Bug-变量
    Bug-you must stop it
    Bug-域名解析
    Bug-web3
    Bug-矛盾
    Bug-web基础$_POST 30
  • 原文地址:https://www.cnblogs.com/AlvinZH/p/8215830.html
Copyright © 2011-2022 走看看