zoukankan      html  css  js  c++  java
  • 国庆集训 || Wannafly Day4

    链接:https://www.nowcoder.com/acm/contest/205#question

    一场题面非常 有趣 但是题目非常 不友好的比赛

    QAQ

    L.数论之神   思维(?)

    题意:求对给定的n,中有多少个不同的数,并且这些不同的数中第k大的是多少

    思路:打表找了找规律(感觉自己天天都在找规律。。),对于不同的n,不同的结果中,≤sqrt(n)的一定都有,剩下的直接除就ok了

    整数除法:https://blog.csdn.net/qq_39792342/article/details/82783100

    艾玛说不明白话,还是适合直接找规律(哭

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    using namespace std;
    typedef long long LL;
    int main()
    {
        int T;
        scanf("%d", &T);
        while(T--)
        {
            LL n, k, sq, cnt;
            scanf("%lld%lld", &n, &k);
            sq = (LL)sqrt(double(n));
            if(n < sq*(sq+1)) cnt = sq+sq-1;
            else cnt = sq+sq;
            printf("%lld ", cnt);
            if(k <= cnt-sq) printf("%lld
    ", n/k);
            else printf("%lld
    ", cnt+1-k);
        }
    }
    View Code

    G.贵族用户   暴力嘤嘤嘤

    勾起了我一年前玩奇迹暖暖养女儿的回忆QAQ (女儿你还好吗~~

    题意:花x元获得10x个钻石,ai个钻石可以使得原价为di的服装价格变为,要买ci件价格为di的衣服,问最少氪多少钱

    思路:暴力枚举得到每一档的打折,求最少的钱数

    注意1.可能不氪金反而更便宜

    2.享受pi折扣的时候,要保证氪的钻石>=a[i],因此所需的钻石是max(钻石, a[i])

    3.向上取整的时候可以,比如除以100然后向上取整 -> (x+99)/100

    4.好坑啊好坑啊

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    using namespace std;
    int c[22], d[22], a[22], p[22];
    int main()
    {
        int T;
        scanf("%d", &T);
        while(T--)
        {
            int m, k;
            scanf("%d%d", &m, &k);
            for(int i = 0; i < m; i++)
                scanf("%d%d", &a[i], &p[i]);
            int sum = 0;
            for(int i = 0; i < k; i++)
                scanf("%d%d", &c[i], &d[i]), sum += c[i]*d[i];
            int ans = 1000000000, ans_novip = sum;
            for(int i = 0; i < m; i++)
            {
                int sum_vip = 0;
                for(int j = 0; j < k; j++)
                    sum_vip += (d[j] * (100-p[i]) + 99) / 100 * c[j];
                sum_vip = min(max(sum_vip, a[i]), ans_novip);
                ans = min(ans, sum_vip);
            }
            printf("%d
    ", (ans+9)/10);
        }
        return 0;
    }
    View Code

    B.电音之王   快速乘操作666

    题意:已知a0,a1,m0,m1,c,定义an=m0an-1+m1an-2+c (n≥ 2)

    ,(保证

    思路:直接暴力是O(10^8)的,又有模运算,so 优化叭

    太高级了。。。64位模,板子收下了orz

    #include <iostream>
    #include <cstdio>
    #include <cassert>
    #include <cmath>
    using i64 = long long;
    using u64 = unsigned long long;
    using u128 = __uint128_t;
    struct Mod64
    {
        Mod64() : n_(0) {}
        Mod64(u64 n) : n_(init(n)) {}
        static u64 modulus() { return mod; }
        static u64 init(u64 w) { return reduce(u128(w) * r2); }
        static void set_mod(u64 m)
        {
            mod = m;
            assert(mod & 1);
            inv = m;
            for (int i = 0; i < 5; ++i)
                inv *= 2 - inv * m;
            r2 = -u128(m) % m;
        }
        static u64 reduce(u128 x)
        {
            u64 y = u64(x >> 64) - u64((u128(u64(x) * inv) * mod) >> 64);
            return i64(y) < 0 ? y + mod : y;
        }
        Mod64 &operator+=(Mod64 rhs)
        {
            n_ += rhs.n_ - mod;
            if (i64(n_) < 0)
                n_ += mod;
            return *this;
        }
        Mod64 operator+(Mod64 rhs) const { return Mod64(*this) += rhs; }
        Mod64 &operator*=(Mod64 rhs)
        {
            n_ = reduce(u128(n_) * rhs.n_);
            return *this;
        }
        Mod64 operator*(Mod64 rhs) const { return Mod64(*this) *= rhs; }
        u64 get() const { return reduce(n_); }
        static u64 mod, inv, r2;
        u64 n_;
    };
    u64 Mod64::mod, Mod64::inv, Mod64::r2;
    
    inline u64 mod128_64_small(u128 a, u64 b)
    {
        u64 q, r;
        __asm__(
            "divq	%4"
            : "=a"(q), "=d"(r)
            : "0"(u64(a)), "1"(u64(a >> 64)), "rm"(b));
        return r;
    }
    
    u64 fact_mod_fast(int N, u64 mod)
    {
        Mod64::set_mod(mod);
        Mod64 ret = Mod64(1), one = ret, t = one;
        for (int i = 1; i <= N; ++i)
        {
            ret *= t;
            t += one;
        }
        return ret.get();
    }
    int main()
    {
        int T;
        scanf("%d", &T);
        while(T--)
        {
            u64 a0_, a1_, m0_, m1_, c_, M, k;
            scanf("%llu%llu%llu%llu%llu%llu%llu", &a0_, &a1_, &m0_, &m1_, &c_, &M, &k);
            Mod64 :: set_mod(M);
            Mod64 a0 = Mod64(a0_);
            Mod64 a1 = Mod64(a1_);
            Mod64 m0 = Mod64(m0_);
            Mod64 m1 = Mod64(m1_);
            Mod64 c = Mod64(c_);
            Mod64 ans = a0*a1;
            Mod64 a2;
            for(int i = 2; i <= k; i++)
            {
                a2 = m0*a1+m1*a0+c;
                ans = ans * a2;
                a0 = a1;
                a1 = a2;
            }
            printf("%llu
    ", ans.get());
        }
    }
    View Code

    快速乘的模板↓

    LL multi(LL x,LL y,LL mod)
    {
        LL tmp = (x * y - (LL)((long double) x / mod * y + 1.0e-8) * mod);
        return tmp < 0 ? tmp+mod : tmp;//x*y%mod
    }
    View Code
  • 相关阅读:
    mybaits源码分析--事务管理(八)
    mybaits源码分析--binding模块(五)
    mybaits源码分析--自定义插件(七)
    mybaits源码分析--缓存模块(六)
    2021年9月
    golang-reflect实战ini配置文件
    ECC加密原理详解
    RFID 随手记
    计算机实现加法
    公钥加密算法 RSA
  • 原文地址:https://www.cnblogs.com/pinkglightning/p/9746175.html
Copyright © 2011-2022 走看看