zoukankan      html  css  js  c++  java
  • 牛客多校第六场 J Heritage of skywalkert 随即互质概率 nth_element(求最大多少项模板)

    链接:https://www.nowcoder.com/acm/contest/144/J
    来源:牛客网

    skywalkert, the new legend of Beihang University ACM-ICPC Team, retired this year leaving a group of newbies again.

    Rumor has it that he left a heritage when he left, and only the one who has at least 0.1% IQ(Intelligence Quotient) of his can obtain it.

    To prove you have at least 0.1% IQ of skywalkert, you have to solve the following problem:

    Given n positive integers, for all (i, j) where 1 ≤ i, j ≤ n and i ≠ j, output the maximum value among . means the Lowest Common Multiple.

    输入描述:

    The input starts with one line containing exactly one integer t which is the number of test cases. (1 ≤ t ≤ 50)

    For each test case, the first line contains four integers n, A, B, C. (2 ≤ n ≤ 10

    7

    , A, B, C are randomly selected in unsigned 32 bits integer range)

    The n integers are obtained by calling the following function n times, the i-th result of which is ai, and we ensure all ai > 0. Please notice that for each test case x, y and z should be reset before being called.
    No more than 5 cases have n greater than 2 x 10

    6

    .

    输出描述:

    For each test case, output "Case #x: y" in one line (without quotes), where x is the test case number (starting from 1) and y is the maximum lcm.

    示例1

    输入

    复制
    2
    2 1 2 3
    5 3 4 8

    输出

    复制
    Case #1: 68516050958
    Case #2: 5751374352923604426

    分析:由于数据看上去像是随机⽣成的,只需要选出前 100 ⼤的数平⽅暴⼒即可。 随机两个正整数互质的概率为 6/π。
    比赛的时候想到应该是枚举前面最大的多少项,但是因为不知道怎么快速计算前面多少项没有试一发了!!
    结束后补题知道了nth_element求数组中最大的前多少项
    AC代码:
    #include <map>
    #include <set>
    #include <stack>
    #include <cmath>
    #include <queue>
    #include <cstdio>
    #include <vector>
    #include <string>
    #include <bitset>
    #include <cstring>
    #include <iomanip>
    #include <iostream>
    #include <algorithm>
    #define ls (r<<1)
    #define rs (r<<1|1)
    #define debug(a) cout << #a << " " << a << endl
    using namespace std;
    typedef unsigned long long ll;
    const ll maxn = 1e7+10;
    const ll mod = 998244353;
    unsigned x, y, z, a[maxn];
    ll n;
    unsigned gcd( unsigned a, unsigned b ) {
        if( a == 0 ) {
            return b;
        } else if( b == 0 ) {
            return a;
        } else {
            return gcd( b, a%b );
        }
    }
    unsigned rnd() {
        unsigned t;
        x ^= x << 16;
        x ^= x >> 5;
        x ^= x << 1;
        t = x;
        x = y;
        y = z;
        z = t ^ x ^ y;
        return z;
    }
    int main() {
        ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    	ll T, t = 1;
    	scanf("%llu",&T);
    	while( T -- ) {
            scanf("%llu%u%u%u",&n,&x,&y,&z);
            for( ll i = 0; i < n; i ++ ) {
                a[i] = rnd();
            }
            ll m = min( (ll)n, (ll)100 );
            nth_element( a, a+n-m, a+n );
            ll ans = 0;
            for( ll i = n-m; i < n; i ++ ) {
                for( ll j = i+1; j < n; j ++ ) {
                    ans = max( ans, (ll)a[i]*a[j]/gcd(a[i],a[j]) );
                }
            }
            printf("Case #%llu: %llu
    ", t++, ans);
    	}
    	return 0;
    }
    

      

    彼时当年少,莫负好时光。
  • 相关阅读:
    九九乘法表
    数据汇总特殊处理-标题都在第N行
    Python库——Faker 安装及用法
    faker库 生成数据导入文件
    faker库的使用 faker是一个第三方Python包,为您生成你所需要的任何(假)数据。 安装:pip install faker
    生成随机数据:faker库
    运算符
    初识编码
    网页设计基础(二)
    网页设计基础
  • 原文地址:https://www.cnblogs.com/l609929321/p/9426160.html
Copyright © 2011-2022 走看看