日常刷题2025-2-6

日常刷题2025-2-6

小红的二叉树

rating:round C

https://ac.nowcoder.com/acm/contest/100902/C

思路:推公式

简单的推公式问题,不必多言

代码

#include <bits/stdc++.h>

using u64 = unsigned long long;
using i64 = long long;
typedef std::pair<int, int> pii;
const int INF = 0x3f3f3f3f;
const int mod = 1e9+7;
const long long LINF = 1e18;

i64 expit(i64 b, i64 e)  
{  
    i64 r = 1;  
    while (e)  
    {  
        if (e & 1){ r *= b; r %= mod;}  
        b *= b; b %= mod;  
        e >>= 1;  
    }  
    return r;  
}

void solve(){
    int n;
    std::cin >> n;

    if (n == 1){
        std::cout << 0 << '\n';
        return;
    }

    i64 ans = expit(2, n-1) % mod - 1 + (expit(2, n - 2) - 1) * 4 % mod;
    ans %= mod;

    std::cout << std::max(ans, 0ll) << '\n';
}

signed main(){
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout<<std::setiosflags(std::ios::fixed)<<std::setprecision(15);

    int t = 1, i;
    for (i = 0; i < t; i++){
        solve();
    }

    return 0;
}

小红的“质数”寻找

rating:round D

https://ac.nowcoder.com/acm/contest/100902/D

思路:构造

在1~9这九个数中,思考每个数开头时的构造方式。

评述

让我们在范围内找一个数,和构造一个在范围内的数是等价的,这道题没做出来很大程度就是因为这个转换没有想清楚。

代码

#include <bits/stdc++.h>

using i64 = long long;
using u64 = unsigned long long;

typedef std::pair<long long, long long> PII;
const int mod = 998244353;
const int N = 2e6 + 1000;
const int INF = 0x3f3f3f3f;
const long long LINF = 1e18;
const double eps = 1e-12;
const double pi = std::acos(-1);
std::mt19937_64 rnd(std::chrono::steady_clock::now().time_since_epoch().count());
std::uniform_int_distribution<u64> dist_rand(mod / 2, mod - 1);

void solve() {

    std::string s;
    std::cin >> s;
    int n = s.size();
    if (s.front() > '5') {
        std::cout << "1";
        for (int i = 1; i <= n - 1; i++) std::cout << "0";
        std::cout << "1";
    } else if (s.front() >= '4') {
        std::cout << "7";
        for (int i = 1; i < n; i++) std::cout << "0";
    } else if (s.front() == '3') {
        std::cout << "5";
        for (int i = 1; i < n; i++) std::cout << "0";
    } else if (s.front() == '2') {
        std::cout << "3";
        for (int i = 1; i < n; i++) std::cout << "0";
    } else {
        std::cout << "2";
        for (int i = 1; i < n; i++) std::cout << "0";
    }
    std::cout << "\n";
}

signed main() {
    std::ios::sync_with_stdio(false), std::cin.tie(nullptr), std::cout.tie(nullptr);
    
    int tmp = 1;
    
    std::cin >> tmp;

    while (tmp--)
        solve();

    return 0;
}

C. Sasha and the Casino

思路:小巧思

https://www.bilibili.com/video/BV12m411D7Bc?spm_id_from=333.788.videopod.episodes&vd_source=4a339d299e165d8fe38b9926c5240eae&p=4

代码

#include <bits/stdc++.h>

using u64 = unsigned long long;
using i64 = long long;
typedef std::pair<int, int> pii;
const int INF = 0x3f3f3f3f;
const int mod = 998244353;
const long long LINF = 1e18;

void solve(){
    i64 k, x, a;
    std::cin >> k >> x >> a;

    i64 zhi = 1;
    bool key = false;
    if (zhi >= a){
        std::cout << "NO\n";
        return;
    }
    for (int i = 1; i <= x - 1; i++){
        int shu = (zhi + 1) / (k - 1);
        if ((zhi+1)%(k-1) != 0){
            shu++;
        }
        zhi += shu;
        if (zhi >= a){
            std::cout << "NO\n";
            return;
        }
    }
    if (k*(a-zhi)<=a){
        std::cout << "NO\n";
        return;
    }
    std::cout << "YES\n";
}

signed main(){
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout<<std::setiosflags(std::ios::fixed)<<std::setprecision(15);

    int t = 1, i;
    std::cin >> t; 
    for (i = 0; i < t; i++){
        solve();
    }

    return 0;
}
posted @ 2025-02-06 14:01  califeee  阅读(15)  评论(0)    收藏  举报