蓝桥杯 1223 第 2 场 小白入门赛

news2024/11/26 1:42:54

蓝桥小课堂-平方和

  • 模拟 1 2 + 2 2 + 3 2 + ⋯ + n 2 = n    ⋅    ( n + 1 )    ⋅    ( 2 n + 1 ) 6 1^2+2^2+3^2+\cdots+n^2=\dfrac{n\;\cdot\;(n +1)\;\cdot\;(2n+1)}{6} 12+22+32++n2=6n(n+1)(2n+1)
 write(n * (n + 1) * (n * 2 + 1) / 6);

房顶漏水啦

  • m a x ( 最大的行 − 最小的行 , 最大的列 − 最小的列 ) + 1 max(最大的行-最小的行,最大的列-最小的列) + 1 max(最大的行最小的行,最大的列最小的列)+1

ps: 2 ≤ n ≤ 1 0 10 2\le n \le10^{10} 2n1010

signed main() {
    int T = 1;
//    T = read();
    while (T--) {
        int n = read(), m = read();
        int col1 = 1e12, col2 = -1e12, row1 = 1e12, row2 = -1e12;
        while (m--) {
            int u = read(), v = read();
            col1 = min(col1, u), col2 = max(col2, u);
            row1 = min(row1, v), row2 = max(row2, v);
        }
        write(max(col2 - col1 + 1, row2 - row1 + 1));
    }
    return 0;
}

质数王国

  • 思路:对每一个数找到其左右两个素数,最小操作次数就是较小差值。
  • 欧拉筛筛出 [ 1    ,    1 0 5 + 10 ] [1\;,\;10^5+10] [1,105+10] (范围大于 1 0 5 10^5 105 你不能保证右边的素数不超过 1 0 5 10^5 105)的质数装入 s e t set set
  • 二分找较小差值。
signed main() {
    int T = 1;
//    T = read();
    while (T--) {
        int n = read();
        vector<int> a(n + 1);
        for (int i = 1; i <= n; ++i) a[i] = read();
        vector<bool> isprime(N, false);
        vector<int> prime(N);
        set<int> s;
        int cnt = 0;
        for (int i = 2; i <= N; ++i) {
            if (!isprime[i]) prime[++cnt] = i, s.insert(i);
            for (int j = 1; j <= cnt && i * prime[j] <= N; ++j) {
                isprime[i * prime[j]] = 1;
                if (!(i % prime[j])) break;
            }
        }
        int ans = 0;
        for (int i = 1; i <= n; ++i) {
            if (s.count(a[i])) continue;
            auto it = s.lower_bound(a[i]);
            int l, r;
            if (it == s.end()) r = INF;
            else r = *it;
            if (it == s.begin()) l = -INF;
            else l = *prev(it);
            ans += min(r - a[i], a[i] - l);
        }
        write(ans);
    }
    return 0;
}

取余

  • 思路:枚举 b i b_i bi 。以 b i b_i bi 为模一定能将 A A A 分成 A    /    b i + 1 A\;/\;b_i+1 A/bi+1 份。
    在这里插入图片描述
  • 如上图可以清晰的看出答案。只需要取下面与 [ S    ,    T ] [S\;,\;T] [S,T] 重合的区间长度即可。你可以将其分成三部分思考(首,中间,尾)。
  • 对于 b i = 1 b_i =1 bi=1 的情况,只有当 S = 0 S = 0 S=0 时才有解,此时应该加上 A A A
signed main() {
    int T = 1;
//    T = read();
    while (T--) {
        int a = read(), b = read(), s = read(), t = read();
        int ans = 0;
        for (int i = 2; i <= b; ++i) {
            if (s > i - 1 || a < s) continue;
            int p = a / i + 1;
            if (p > 2) {
                ans += (p - 1) * (min(t, i - 1) - s + 1) - (s == 0);
                int cnt = a - (i - 1) - (p - 2) * i;
                if (cnt - 1 >= s) ans += min(t, cnt - 1) - s + 1;
            }
            else if (p == 2) {
                ans += min(t, i - 1) - s + 1 - (s == 0);
                int cnt = a - (i - 1);
                if (cnt - 1 >= s) ans += min(t, cnt - 1) - s + 1;
            }
            else ans += min(t, a) - s + 1 - (s == 0);
        ans += (s == 0) * a;
        write(ans);
    }
    return 0;
}

数学尖子生

  • 思路:容斥。
  • 不能被 a a a 整除,但一定能被 1 , 2 , ⋯   , 3 , a − 1 1,2,\cdots,3,a-1 1,2,,3,a1 整除。所以这个数一定是 1 , 2 , ⋯   , 3 , a − 1 1,2,\cdots,3,a-1 1,2,,3,a1 最小公倍数的倍数,考虑容斥,用 1 , 2 , ⋯   , 3 , a − 1 1,2,\cdots,3,a-1 1,2,,3,a1 最小公倍数的倍数的个数 − - 1 , 2 , ⋯   , 3 , a − 1 , a 1,2,\cdots,3,a-1,a 1,2,,3,a1,a 最小公倍数的倍数的个数。
int gcd(int a, int b) {return b? gcd(b, a % b): a;}
int lcm(int a, int b) {return a * b / gcd(a, b);}
signed main() {
    int T = 1;
    T = read();
    vector<int> p(N);
    int cnt = 0;
    p[cnt] = 1;
    while (p[cnt] < 1e16) {
        ++cnt;
        p[cnt] = lcm(p[cnt - 1], cnt);
    }
    while (T--) {
        int a = read(), n = read();
        if (a > cnt) puts("0");
        else writeln(n / p[a - 1] - n / p[a]);
    }
    return 0;
}

魔术师

  • 思路:线段树 + 矩阵
  • 举例: [    a    ,    b    ,    c    ] [\;a\;,\;b\;,\;c\;] [a,b,c]
    • o p t 1    a    b opt_1\;a\;b opt1ab [    a b c    ] × [    0 1 0       1 0 0       0 0 1    ] \begin{bmatrix}\;a\quad b\quad c\;\end{bmatrix}\times\begin{bmatrix}\;0\quad 1\quad 0\;\\\;1\quad 0\quad 0\;\\\;0\quad 0\quad 1\;\end{bmatrix} [abc]× 010100001
    • o p t 2    a    b opt_2\;a\;b opt2ab [    a b c    ] × [    0 0 0       1 1 0       0 0 1    ] \begin{bmatrix}\;a\quad b\quad c\;\end{bmatrix}\times\begin{bmatrix}\;0\quad 0\quad 0\;\\\;1\quad 1\quad 0\;\\\;0\quad 0\quad 1\;\end{bmatrix} [abc]× 000110001
    • o p t 3    a    b opt_3\;a\;b opt3ab [    a b c    ] × [    2 0 0       0 1 0       0 0 1    ] \begin{bmatrix}\;a\quad b\quad c\;\end{bmatrix}\times\begin{bmatrix}\;2\quad 0\quad 0\;\\\;0\quad 1\quad 0\;\\\;0\quad 0\quad 1\;\end{bmatrix} [abc]× 200010001

ps:要用懒标记,其实和一般线段树下放懒标记没太大区别,第一次接触可能需要自己体会一下。

#include <bits/stdc++.h>
#define il inline
#define get getchar
#define put putchar
#define is isdigit
#define int long long
#define dfor(i,a,b) for(int i=a;i<=b;++i)
#define dforr(i,a,b) for(int i=a;i>=b;--i)
#define dforn(i,a,b) for(int i=a;i<=b;++i,put(10))
#define mem(a,b) memset(a,b,sizeof(a))
#define memc(a,b) memcpy(a,b,sizeof(a))
#define pr 114514191981
#define gg(a) cout<<a,put(32)
#define INF 0x7fffffff
#define tt(x) cout<<x<<'\n'
#define tf(x) cout << "-> " << x << " <-" << '\n';
#define endl '\n'
#define ls i<<1
#define rs i<<1|1
#define la(r) tr[r].ch[0]
#define ra(r) tr[r].ch[1]
#define lowbit(x) (x&-x)
#define ct cin.tie(nullptr),ios_base::sync_with_stdio(false)
using namespace std;
typedef unsigned int ull;
typedef pair<int, int> pii;
int read(void) {
    int x=0,f=1;char c=get();
    while(!is(c)) (f=c==45?-1:1),c=get();
    while(is(c)) x=(x<<1)+(x<<3)+(c^48),c=get();
    return x*f;
}
void write(int x) {
    if (x < 0) x = -x, put(45);
    if (x > 9) write(x / 10);
    put((x % 10) ^ 48);
}
#define writeln(a) write(a), put(10)
#define writesp(a) write(a), put(32)
#define writessp(a) put(32), write(a)
const int N = 1e5 + 10, M = 2e5 + 10, SN = 1e3 + 10, mod = 1e8, MOD = 998244353;
int c[N], a[N << 2][3], base[3][3], lazy[N << 2][3][3];
void init(int p[3][3]) {
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) p[i][j] = i == j;
    }
}
void pushup(int i, int a[][3]) {
    for (int j = 0; j < 3; ++j) a[i][j] = (a[ls][j] + a[rs][j]) % MOD;
}
void pushdown1(int a[3][3], int b[3][3]) {
    int t[3][3];
    mem(t, 0);
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) {
            for (int k = 0; k < 3; ++k) t[i][j] = (t[i][j] + a[i][k] * b[k][j]) % MOD;
        }
    }
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) a[i][j] = t[i][j];
    }
}
void pushdown2(int a[3], int b[3][3]) {
    int t[3];
    mem(t, 0);
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) t[i] = (t[i] + a[j] * b[j][i]) % MOD;
    }
    for (int i = 0; i < 3; ++i) a[i] = t[i];
}
void build(int i, int l, int r) {
    init(lazy[i]);
    if (l == r) { a[i][c[l] - 1] = 1; return ;}
    int mid = (l + r) >> 1;
    build(ls, l, mid), build(rs, mid + 1, r);
    pushup(i, a);
}
void modify(int i, int l, int r, int L, int R) {
    if (L <= l && r <= R) {
        pushdown1(lazy[i], base);
        pushdown2(a[i], base);
        return ;
    }
    pushdown1(lazy[i << 1], lazy[i]), pushdown1(lazy[i << 1 | 1], lazy[i]);
    pushdown2(a[ls], lazy[i]), pushdown2(a[rs], lazy[i]);
    init(lazy[i]);
    int mid = (l + r) >> 1;
    if (L <= mid) modify(ls, l, mid, L, R);
    if (R > mid) modify(rs, mid + 1, r, L, R);
    pushup(i, a);
}
signed main() {
    int T = 1;
//    T = read();
    while (T--) {
        int n = read(), m = read();
        for (int i = 1; i <= n; ++i) c[i] = read();
        build(1, 1, n);
        while (m--) {
            int l = read(), r = read(), op = read(), cla = read() - 1;
            init(base);
            if (op == 3) {
                base[cla][cla] = 2;
            }
            else {
                int clb = read() - 1;
                if (op & 1) {
                    base[cla][cla] = base[clb][clb] = 0;
                    base[cla][clb] = base[clb][cla] = 1;
                }
                else base[cla][cla] = 0, base[cla][clb] = 1;
            }
            modify(1, 1, n, l, r);
            writesp(a[1][0]), writesp(a[1][1]), writeln(a[1][2]);
        }
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1332608.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DevC++ 用C语言的多线程 实现简单的客户端和服务器

知识来源一&#xff1a; 使用Dev-C实现简单的客户端和服务器-CSDN博客 此先生的博客使用的是win32 SDK来创建多线程&#xff0c;然后鄙人对这个版本的多线程细节不明。于是又重新用C语言的线程替代win32API,以此继续学习服务器代码。 知识来源二&#xff1a;DevC 多线程创建…

[Netty实践] 简单WebSocket服务实现

目录 一、介绍 二、依赖导入 三、基础类准备 四、Handler实现 五、WebSocketChannelInitializer实现 六、WebSocketServer实现 七、前端实现 八、测试 九、参考链接 一、介绍 关于WebSocket此处不进行过多介绍&#xff0c;本章主要着重通过Netty实现WebSocket通信服务…

在线客服系统:解决常见问题的实用工具与解决方案

市场得不断发展促使着消费者服务意识的觉醒&#xff0c;越来越多的消费者在购买产品的时候不仅看产品的功能、外观、性能&#xff0c;还关注品牌的服务质量。在线客服系统的出现帮助企业解决了客户服务难的问题。接下来&#xff0c;我们具体聊一聊在线客服系统能解决哪些问题&a…

每日一题——LeetCode888

方法一 个人方法&#xff1a; 交换后要达到相同的数量&#xff0c;那么意味着这个相同的数量就是两个人总数的平均值&#xff0c;假设A总共有4个&#xff0c;B总共有8个&#xff0c;那么最后两个人都要达到6个&#xff0c;如果A的第一盒糖果只有1个&#xff0c;那么B就要给出6…

铁山靠之——HarmonyOS基础 - 1.0

HarmonyOS学习第一章 一、HarmonyOS简介1.1 安装和使用DevEco Studio1.2 环境配置1.3 项目创建1.4 运行程序1.5 基本工程目录1.5.1 工程级目录1.5.2 模块级目录1.5.3 app.json51.5.4 module.json51.5.5 main_pages.json 二、TypeScript快速入门2.1 简介2.2 基础类型2.2.1 布尔值…

通过 Nginx 代理实现网页内容替换

突发奇想&#xff0c;用 Nginx 代理一个网站&#xff0c;把网站的一些关键字替换掉&#xff0c;蛮有意思的。 如下图&#xff1a; 一、编译安装 Nginx 一般 Nginx 中不包含 subs_filter 文本替换的模块&#xff0c;需要自己手动编译安装&#xff0c;步骤如下。 克隆 subs_fi…

linux cpu调度分析

一、cpu调度调试方法 echo 0 > /sys/kernel/debug/tracing/tracing_on echo > /sys/kernel/debug/tracing/trace echo 30720 > /sys/kernel/debug/tracing/buffer_size_kb echo nop > /sys/kernel/debug/tracing/current_tracer echo sched_switch sched_wakeup s…

移除石子使总数最小(LeetCode日记)

LeetCode-1962-移除石子使总数最小 题目信息: 给你一个整数数组 p i l e s piles piles &#xff0c;数组 下标从 0 0 0 开始 &#xff0c;其中 p i l e s [ i ] piles[i] piles[i] 表示第 i i i 堆石子中的石子数量。另给你一个整数 k k k &#xff0c;请你执行下述操作…

Win11右键菜单显示全部的方法

Win11右键菜单显示全部的方法&#xff1a;1. 用鼠标右键点击“开始”按钮&#xff08;或者按WinX键&#xff09;&#xff0c;选择点击 “Windows 终端&#xff08;管理员&#xff09;”。 2.在终端应用程序里粘贴这串代码【reg.exe add “HKCU\Software\Classes\CLSID{86ca1aa…

实现一个最简单的内核

更好的阅读体验&#xff0c;请点击 YinKai s Blog | 实现一个最简单的内核。 ​ 这篇文章带大家实现一个最简单的操作系统内核—— Hello OS。 PC 机的引导流程 ​ 我们这里将借助 Ubuntu Linux 操纵系统上的 GRUB 引导程序来引导我们的 Hello OS。 ​ 首先我们得了解一下&a…

burpsuite与sqlmap联动(sqlipy配置)

首先我们需要在burpsuite的 扩展-选项 里配置两个路径&#xff1a; 第一个路径为 jython-standalone-2.7.3.jar 的路径 这个jar文件我们需要自己下载&#xff0c;下载地址&#xff1a;https://www.jython.org/ 点击 download 点击 Jython Standalone 下载好之后将这个jar文件…

Django之DRF框架三,序列化组件

一、序列化类的常用字段和字段参数 常用字段 字段名字段参数CharFieldmax_lengthNone, min_lengthNone, allow_blankFalse, trim_whitespaceTrueIntegerFieldmax_valueNone, min_valueNoneFloatFieldmax_valueNone, min_valueNoneBooleanFieldNullBooleanFieldFloatFieldmax_…

基于Python的音乐数据可视化与推荐系统开发

基于Python的音乐数据可视化与推荐系统开发 导言&#xff1a; 音乐是人们生活中不可或缺的一部分&#xff0c;而对于音乐数据的收集、分析和可视化正逐渐成为技术领域的热点。本文介绍了一款基于Python开发的音乐数据可视化与推荐系统&#xff0c;通过爬取千千音乐网站的数据&a…

C# 实现虚拟数字人

随着Ai技术的提升和应用&#xff0c;虚拟数字人被广泛应用到各行各业中。为我们的生活和工作提供了非常多的便利和色彩。 通过设置虚拟数字人的位置大小&#xff0c;可以让数字人可以在电脑屏幕各个位置显示&#xff1a; 虚拟数字人素材&#xff1a; 虚拟数字人(实际有语音&am…

双向A*算法-python

GitHub - LittleFox99/B_A_star: Bidirectional A Star 其中a&#xff0c;b分别为双向A*搜索的权重 #-*- coding:utf-8 -*- # Time : 2020/11/11 1:21 下午 # Author : LittleFox99 # File : a_star.py # 参考&#xff1a; # https://blog.csdn.net/lustyoung/article/d…

前缀和+单调双队列+贪心:LeetCode2945:找到最大非递减数组的长度

本文涉及知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 单调双队列 贪心 题目 给你一个下标从 0 开始的整数数组 nums 。 你可以执行任意次操作。每次操作中&#xff0c;你需要选择一个 子数组 &#xff0c;并将这个子数组用它所…

资深13年测试整理,性能测试指标-评估方法,一篇搞懂...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、软件性能的关注…

深入探讨DNS数据包注入与DNS中毒攻击检测 (C/C++代码实现)

DNS数据包注入和DNS中毒攻击是网络安全领域中的两个重要主题。DNS&#xff08;域名系统&#xff09;是互联网中的一项核心服务&#xff0c;负责将域名转换为与之相对应的IP地址。 DNS数据包注入是指攻击者通过篡改或伪造DNS请求或响应数据包来干扰或破坏DNS服务的过程。攻击者…

webots仿真报警[ERROR] [1703399199.459991029]: Sampling period is not valid.

一、故障现象 在运行interace传感器使能程序时&#xff0c;报警[ERROR] [1703399199.459991029]: Sampling period is not valid. [ERROR] [1703399199.460080083]: Failed to enable lidar.并发生崩溃。 二、解决方式 1、尝试将程序中的TIME_STEP数值改为与WOrldInfo中的bas…

LeetCode 1954. 收集足够苹果的最小花园周长

一、题目 1、题目描述 给你一个用无限二维网格表示的花园&#xff0c;每一个 整数坐标处都有一棵苹果树。整数坐标 (i, j) 处的苹果树有 |i| |j| 个苹果。 你将会买下正中心坐标是 (0, 0) 的一块 正方形土地 &#xff0c;且每条边都与两条坐标轴之一平行。 给你一个整数 need…