首页 > 其他分享 >2024.1.16做题纪要

2024.1.16做题纪要

时间:2024-01-16 21:33:07浏览次数:27  
标签:std 2024.1 val 16 int ll long queue 做题

硬币

多少有些人类智慧了。。。。。

题解写的还行。

具体就是每次把当前这一位代表的质数 \(i\) 向后每隔 \(i\) 个数除上 \(i\)。

这一位肯定是一个质数,因为若是合数则前面一定会被除上质数。

Kaiserredux
#include <bits/stdc++.h>

long long num[1100000];
long long answer[1100000];

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);

    freopen("coins.in", "r", stdin);
    freopen("coins.out", "w", stdout);

    for (long long i = 1; i <= 1e6; ++ i) {
        answer[i] = num[i] = 1ll * i * i + 1ll;

    }
    for (long long i = 1; i <= 1000000; ++ i) {
        if (num[i] == 1)
            continue;
        long long x = num[i];
        for (long long j = i; j <= 1000000; j += x) {
            answer[j] = std::min(answer[j], x);
            while (num[j] % x == 0)
                num[j] /= x;
        }
    }
    long long Q, N;
    std::cin >> Q;
    while (Q --) {
        std::cin >> N;
        if (answer[N] == N * N + 1ll) 
            std::cout << -1 << '\n';
        else
            std::cout << answer[N] << ' ' << (N * N + 1) / answer[N] << '\n';
    }
    return 0;
}

猜数

逆天单调队列优化dp + 大眼观察法。

根本不会证QAQ。

56 Road
// ubsan: undefined
// accoders
#include <bits/stdc++.h>

int N;
long long sum[52100], dp[4000][4000];

class Monotonic_Queue {
public:
    int l, r;
    std::pair<int, long long> value[52100];

    Monotonic_Queue() {
        l = 1, r = 0;
    }

    void pop_from_range(int rRange) {
        while (l <= r && value[l].first > rRange)
            l ++;
    }
    
    void emplace(long long val, int pos) {
        while (l <= r && value[r].second > val)
            r --;
        value[++ r] = std::make_pair(pos, val); 
    }

    long long front() {
        return value[l].second;
    }

    int front_first() {
        return value[l].first;
    }

    void clear() {
        l = 1, r = 0;
    }
}queue;

int to[51000];

int Len(int l, int r) {
    return r - l + 1;
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);

    freopen("guess.in", "r", stdin);
    freopen("guess.out", "w", stdout);

    int S = 3750;
    std::cin >> N;
    for (int r = S + 110; r >= 1; -- r) 
        for (int l = 2; l <= S; ++ l)
            dp[r][l] = 1e18;
    for (int i = 1; i <= N; ++ i)
        to[i] = i % 3800, sum[i] = 1e18;
    sum[1] = 0;
    long long answer = 0;
    for (int r = 2; r <= N; ++ r) {
        int mid = r;
        queue.clear();
        for (int l = r - 1; r - l + 1 <= std::min(r, S); -- l) {
            queue.emplace(dp[to[r]][Len(l + 1, r)] + l, l);
            while (mid > l && dp[to[mid - 1]][Len(l, mid - 1)] >= dp[to[r]][Len(mid + 1, r)]) {
                mid --;
                queue.pop_from_range(mid);
            }
            dp[to[r]][Len(l, r)] = std::min(queue.front(), dp[to[mid]][Len(l, mid)] + mid + 1);
            sum[r] = std::min(sum[r], std::max(sum[l - 1], dp[to[r]][Len(l + 1, r)]) + l);
        }
        answer += sum[r];
    }
    std::cout << answer << '\n';
    return 0;
}

P3403 跳楼机

同余最短路板子题。

我们先设 \(f_i\) 表示我们只用操作 \(2,3\) 使得 \(f_i \% x = i\),并且让 \(f_i\) 最小。每次将 \(i\) 连向 \((i+y)\%x\) 和 \((i+z)\%x\),边权分别为 \(y\) 和 \(z\)。然后跑最短路就行了。

燃烧的世界
#include <bits/stdc++.h>

typedef long long ll;

class Point {
public:
    ll val, poi;

    bool operator <(const Point &b) const {
        return val > b.val;
    }

    Point(ll _val, ll _poi) {
        val = _val;
        poi = _poi;
    }
};

int cnt, head[110000], next[210000], to[210000];
ll value[210000];

void AddEdge(int u, int v, ll val) {
    ++ cnt;
    next[cnt] = head[u];
    head[u] = cnt;
    to[cnt] = v;
    value[cnt] = val;
}

ll f[110000];
bool visit[110000];
ll H, X, Y, Z;

void Dijkstra(int begin) {
    memset(visit, 0, sizeof(visit));
    for (int i = 0; i < X; ++ i)
        f[i] = 2e18;
    f[1] = 1;
    std::priority_queue<Point> queue;

    queue.emplace(f[1], 1);

    while (queue.size()) {
        int now = queue.top().poi;
        queue.pop();

        if (visit[now])
            continue;

        visit[now] = true;
        for (int i = head[now]; i; i = next[i]) {
            if (f[to[i]] > f[now] + value[i]) {
                f[to[i]] = f[now] + value[i];
                queue.emplace(f[to[i]], to[i]);
            }
        }
    }
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);

    std::cin >> H >> X >> Y >> Z;
    if (X == 1 || Y == 1 || Z == 1) {
        std::cout << H << '\n';
        return 0;
    }
    if (X > Y)
        std::swap(X, Y);
    if (X > Z)
        std::swap(X, Z);
    for (int i = 0; i < X; ++ i) {
        AddEdge(i, (i + Y) % X, Y);
        AddEdge(i, (i + Z) % X, Z);
    }
    Dijkstra(1);
    ll answer = 0;
    for (int i = 0; i < X; ++ i) {
        if (f[i] > H)
            continue;
        answer += (H - f[i]) / X + 1;
    }
    std::cout << answer << '\n';
    return 0;
}

标签:std,2024.1,val,16,int,ll,long,queue,做题
From: https://www.cnblogs.com/jueqingfeng/p/17968538

相关文章

  • 2024-1-16
    0这里是我的博客平台。接下来的博客时间将以学习编程为主题,多多关照。1学习编程的目标——学会编程,实在的插足新领域自夸。#include<stdio.h>intmain(void){charc;do{c=getchar();}while(c!='');printf("\a");printf("helloC\n");p......
  • 1.16寒假每日总结7
     对接口的参数进行合法性校验。  如果不符合参数校验,会报错,但是不合符接口文档要求,所以要进行异常处理 ......
  • C++学习日记 2024-1-16
    开始学习C++几天了,之前没有记录,从现在开始,记录一下学习过程复习与回忆:1.引用与指针共同优点:只用引用与指针,在传递参数时,可以减少拷贝,减少内存消耗,提高效率指针优点:指针比引用更强大,所有引用能做的事,指针都能做,指针缺点:危险,指针可以为空,指针指向地址,同一地址可以......
  • 2024.1.16
    写些不知道写在哪的东西。看了一下THUSC2023Day1T1。有一个长度为\(n\)的序列,\(q\)次操作,形如区间加和询问区间内至少几次区间±1使得区间内所有数等于\(x\)结论是把区间两边接上\(x\),答案是差分序列的绝对值之和除以\(2\)是这样的,考虑区间加在差分序列上的改变,即为一......
  • 2024.1.16日报
    今天继续学习spark,不过今天有些特殊,因为有些同学回来了,大伙在一起交流了一下总体上考研的居多,所以自己也有些犹豫到底是要考研还是就业,需要深入的思考一下 总结:RDD是一个数据集的表示,不仅表示了数据集,还表示了这个数据集从哪来,如何计算,主要属性包括:分区列表计算函数依赖关系......
  • Solution Set【2024.1.16】
    A.硬币首先根据周长最大的要求不难发现我们实际上要求的是\(n^2+1\)的最小质因子,记作\(f_n\),通过观察可以发现若对于个\(t\),满足存在\(p\)使得\[p\midt^2+1\]那么对于所有\(k\ge0\),一定有\[p\mid\left(t+k\cdotp\right)^2+1\]因此我们可以维护一个序......
  • 2024-01-16-recall
    想起一些非常久的事情Subtitle:2024-01-16recallCreated:2024-01-16T18:52+08:00Published:2024-01-16T20:08+08:00Categories:EssayTags:Diary可能是看书的影响,也可能是前天被我妈嘱咐要吃好点(至于为什么是前天,检查日历和身份证),也可能是看了某公众号的文章,晚上(凌晨)醒......
  • 16_Java基础-包
    包机制包=文件夹语法格式:packagepkg1[.pkg2[.pkg3…]];一般利用公司域名倒置作为包名:com.baidu.www域名:www.baidu.com为了能够使用一个包的成员,需要在Java中导入该包,用“import”完成importpackge1*(通配符):导入这个包下所有的类!推荐《阿里巴巴开发......
  • P6667 [清华集训2016] 如何优雅地求和
    P6667[清华集训2016]如何优雅地求和Problem给定最高次幂为\(x^{m}\)的多项式函数\(g(x)\)和整数\(n,q\),其中\(g\)以点值形式给出,即给定\(g(0),g(1),\dots,g(m)\)。求:\[\begin{aligned}Q(g,n,q)=\sum\limits_{k=0}^{n}g(k)\binom{n}{k}q^{k}(1-q)^{n-k......
  • 1.16学习进度
    sparkde四大特点   速度快:比hadoop的mapreduce快100倍;spark处理数据时,可以将中间处理结果存储到内存中;spark提供了非常丰富分算子,可以做到复杂任务在一个spark程序中完成   易于使用   通用性强:spark提供了sparksql、sparkstreaming、mlib及graphx在内的多个工具库......