首页 > 其他分享 >10 月 12 日模拟赛总结

10 月 12 日模拟赛总结

时间:2023-10-12 17:36:23浏览次数:40  
标签:10 12 int ll 自然数 le 复杂度 模拟

Before

本文章在洛谷博客同步发布

Contest-Link

预期 \(20 + 10 + 30 + 10 = 70\)。

实际 \(100 + 30 + 35 + 0 = 165\)。

挂分 \(-95\)。

rk8/totrk9。菜。

T1 鉴定,5min 写完测了几组数据没问题就跳了;T2 一眼丁真鉴定为线段树,风风火火打了个线段树结果 \(x \le 10^9\),立即想题,结果发现区间无交,随便写了个二分对拍过了。

然后看第三题,鉴定为神秘线段树,然后发现绝对值没有分配律,好像分块,不会,寄。打了个暴力跑路。因为没开龙龙导致暴力一分没拿,寄。

第四题看了一眼,鉴定为图论,但是不太清楚有什么东西能维护,打了个暴力跑路。

然后开始摆摆摆摆摆摆摆摆摆摆摆摆摆,T3 好像可以直接线段树维护前后缀最大最小!然后就没时间写了。哈哈。

T1

Description

给定一条水平直线和两个点,求经过水平线的两点的最短距离。

输入一行五个整数 \(k,x_1,y_1,x_2,y_2\)。

一行一个自然数,表示平方后的答案。

\(0 \le |k|,|x1|,|y1|,|x2|,|y2|\le 5×10^8\)。

Solution

经典将军饮马,不会的看这里

考场想法:将军饮马。

考场寄因:没寄。

时间复杂度 \(O(1)\),空间复杂度 \(O(1)\)。

Code

\(\text{100pts:}\)

// 2023/10/9 PikachuQAQ

#include <iostream>
#include <cmath>

using namespace std;

typedef long long ll;

ll k, xa, ya, xb, yb;

ll dist(ll xa, ll ya, ll xb, ll yb) {
    return (xa - xb) * (xa - xb) + (ya - yb) * (ya - yb);
}

int main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cin >> k >> xa >> ya >> xb >> yb;
    if (ya >= k && yb <= k || ya <= k && yb >= k) {
        cout << dist(xa, ya, xb, yb) << '\n';
    } else {
        cout << dist(xa, 2 * k - ya, xb, yb) << '\n';
    }

    return 0;
}

T2

Description

数轴上有一些靶子,对应一些不交的区间,每个靶子有个红心区间,按顺序进行射击,根据重靶、丢靶、红心、非红心输出对应的消息。

第一行三个自然数 \(n,m,k\),含义如题面所述。 接下来 \(n\) 行,每行四个自然数 \(l_i,x_i,y_i,r_i\),描述了靶子的信息。 接下来一行 \(k\) 个自然数,表示每次射击的坐标。

对于每个询问,输出一行一个对应的结果。

\(1 \le n, k \le 10^5, 1 \le l_i \le x_i \le y_i \le r_i \le m \le 10^9\)。

Solution

因为区间无交集,所以我们可以直接二分,一个靶子一定会有四个坐标,对于一个坐标我们分类讨论即可。

考场想法:二分。

考场寄因:没寄。

时间复杂度 \(O(k \log n)\),空间复杂度 \(O(n \log n)\)。

Code

\(\text{100pts:}\)

// 2023/10/9 PikachuQAQ

#include <iostream>
#include <algorithm>
#include <map>

using namespace std;

typedef long long ll;

const int kMaxN = 4e5 + 7, kMaxM = kMaxN << 2;

int n, m, k, a[kMaxN], len;
bool vis[kMaxN];
map<int, int> mp;

int main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cin >> n >> m >> k;
    for (int i = 1, l, x, y, r; i <= n; i++) {
        cin >> l >> x >> y >> r;
        a[++len] = l, a[++len] = r, a[++len] = x, a[++len] = y;
        mp[l] = mp[r] = 1, mp[x] = mp[y] = 2;
    }
    sort(a + 1, a + len + 1);
    for (int i = 1, x; i <= k; i++) {
        cin >> x;
        ll p = lower_bound(a + 1, a + len + 1, x) - a, g = p % 4, q = (p - 1) / 4 + 1;
        if (g == 1 && mp[x] == 0) {
            cout << "Failed\n";
        } else if (vis[q]) {
            cout << "Again\n";
        } else if (g == 1 && mp[x] == 1 || g == 2 && mp[x] != 2 || g == 0) {
            cout << "Normal\n";
            vis[q] = 1;
        } else {
            cout << "Perfect\n";
            vis[q] = 1;
        }
    }

    return 0;
}

T3

Description

给定一个序列,求子段和绝对值的最大值。

第一行两个自然数 \(n,m\)。 接下来一行 \(n\) 个整数,表示序列的初始值。 接下来 \(m\) 行,每行两个自然数,描述了一个查询。

对于每个询问,输出一行一个自然数,表示答案。

\(1 \le n \le 2 \times 10^5, 1\le m \le 3 \times 10^6,0 \le |a_i| \le 10^9\)

Solution

显然线段树是可以的,但是好像卡不过去,只能拿 \(70\) 分。普通线段树的做法是 \(O(m \log n + n)\) 的。

所以我们可以用一种特殊的线段树——猫树维护,其仅支持 \(O(1)\) 查询,不能修改,建树复杂度 \(O(n \log n)\)。

然后就达到了 \(O(n \log n + m)\) 的时间复杂度。

但是我赛后没写出来,但我们还有一种数据结构:ST 表。其实现后时间复杂度为 \(O(n \log n + m)\)。

考场想法:暴力。

考场寄因:没寄。

时间复杂度 \(O(n \log n + m)\),空间复杂度 \(O(n \log n)\)。

Code

\(\text{100pts:}\)

// 2023/10/9 PikachuQAQ

#include <iostream>
#include <cmath>

using namespace std;

typedef long long ll;

const ll kMaxN = 2e5 + 7, LgMax = 28, INF = 4e18;

ll n, q, a[kMaxN], pre[kMaxN], minn[kMaxN][LgMax], maxn[kMaxN][LgMax], lg[kMaxN];

ll QueryMin(ll l, ll r) {
    if (l > r) {
        return INF;
    } else if (l == 0) {
        return min(QueryMin(l + 1, r), 0ll);
    } else {
        int k = lg[r - l + 1];
        return min(minn[l][k], minn[r - (1 << k) + 1][k]);
    }
}

ll QueryMax(ll l, ll r) {
    if (l > r) {
        return -INF;
    } else if (l == 0) {
        return max(QueryMax(l + 1, r), 0ll);
    } else {
        int k = lg[r - l + 1];
        return max(maxn[l][k], maxn[r - (1 << k) + 1][k]);
    }
}

int main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cin >> n >> q;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        lg[i] = log2(i), pre[i] = pre[i - 1] + a[i], minn[i][0] = maxn[i][0] = pre[i];
    }
    for (int j = 1; (1 << j) <= n; j++) {
        for (int i = 1; i + (1 << j) - 1 <= n; i++) {
            minn[i][j] = min(minn[i][j - 1], minn[i + (1 << (j - 1))][j - 1]);
            maxn[i][j] = max(maxn[i][j - 1], maxn[i + (1 << (j - 1))][j - 1]);
        }
    }
    for (int i = 1, x, y; i <= q; i++) {
        cin >> x >> y;
        cout << QueryMax(x - 1, y) - QueryMin(x - 1, y) << '\n';
    }

    return 0;
}

T4

Description

给定 \(n\) 个二元组 \((a_i, b_i)\) ,求字典序最小的排列,使得相邻二元组之间的 \(a\) 或者 \(b\) 相同,且不能连续出现三个相同的二元组。

第一行一个自然数 \(n\)。 接下来 \(n\) 行,每行两个自然数 \(a, b\)。

第一行一个字符串 YesNo ,表示是否存在方案。 如果存在方案,接下来一行 \(n\) 个自然数,第 \(i\) 个自然数表示第 \(i\) 个二元组。

\(1 \le a,b \le n,2 \le n \le 5 \times 10^5\),保证不存在两个完全一样的二元组。

Solution

咕咕咕。

Code

咕咕咕。

Summary

需要掌握的:龙龙

标签:10,12,int,ll,自然数,le,复杂度,模拟
From: https://www.cnblogs.com/PikachuQAQ/p/10-12-contest-ji-yin.html

相关文章

  • ASEMI整流桥KBU810参数,KBU810特性
    编辑-ZKBU810参数描述:型号:KBU810最大直流反向电压VR:1000V最大工作峰值反向电压VRWM:700V最大平均正向电流IF:8A非重复正向浪涌电流IFSM:300A操作和储存温度范围TJ,TSTG:-55to150℃正向电压VF:1.1V最大反向泄漏电流IRM:10uA每个元件的典型热阻RthJA:2.7℃/W KBU810封装规格:封装:KBU-4总......
  • ASEMI整流桥KBU1510与GBJ1510能通用吗?
    编辑-Z在电子元器件领域,KBU1510和GBJ1510序列都是扮演着主要角色的整流桥。虽然它们在很多性能参数上存在相似之处,但它们是否可以通用的问题,却在很多应用场景中有着不同的答案。我们必须熟知每个元器件的特性和专利技术,才能妥善运用它们而不会引发不良影响。 首先,我们来介绍一下KB......
  • 10.12算法
    最大子序和给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。 示例1:输入:nums=[-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1]的和最大,为 6。示例2:输入:nums=[1]输出:1示例3......
  • 【noip赛前20天冲刺集训 day4】正在出模拟赛
    题目描述想象学竞赛网站CodeFancy举办了\(m\)场比赛。你在CodeFancy上关注了\(n\)个账号,编号为\(1\)到\(n\)。你知道这\(n\)个账号分别参加了\(m\)场比赛中的哪些。但是你发现可能存在一个人使用多个账号的情况,你想知道这\(n\)个账号的使用者最少共有多少人。......
  • Debian12安装elasticsearch实践及问题解决方案
    一、安装安装其实很简单,直接上官网链接:下载地址,官网提供了所有安装方式,总一款适合你。我的目标系统是Debian12,包管理是apt-get,所以就以这个为示例,仅供参考。1、先选择需要安装的版本2、导入ElasticsearchPGP密钥wget-qO-https://artifacts.elastic.co/GPG-KEY-elastic......
  • 2023.10.9NOIPSIM1总结
    ##T1区分度先手算一下找下规律,发现数列呈现$1,2,2,3,3,4,4,4,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,8......$的规律。数据范围到$1e13$,考虑数论分块,每块的块长由前一块块长递推得到。在块内累$\Omicron$(1)累计答案,跳块时间复杂度$\Omicron$($\sqrtn$),总复杂度$\Omicron(t\sqr......
  • 10.12模拟赛总结
    缝合怪传送门总结考场估分:\([20,60]+[0,100]+[40,100]+[0,45]=[60,305]\)。实际得分:\(100+100+50+0=250\),怎么感觉在骂我,与“积蚕鸭”机惨鸭并列第一/jy/jy/jy今天爆搜场?!\(\texttt{T1switch}\)题意一个序列\(a_1,a_2,\ldots,a_n\),求有没有一种可......
  • 测试4 20211102尹子扬静态库的测试
    1.首先,编译你的模块源代码成为目标文件(.o文件)。例如,如果有一个模块名为mymath.c,你可以使用以下命令来生成目标文件:点击查看代码gcc-cmymath.c-omymath.o请确保你以适当的方式编译所有的模块源代码文件。2.将所有目标文件打包成一个静态库文件。你可以使用ar命令来......
  • Chrome之F12小技巧
    悬停定位右键检查通过快捷键ctrl+shift+c firefox点击inspector后一样可以出现悬停效果 TRANSLATEwithxEnglishArabicHebrewPolishBulgarianHindiPortugueseCatalanHmongDawRomanianChineseSimplifiedHungarianRussian......
  • S12700 CSS主备倒换
    导致集群主备倒换的原因较多,在此主要介绍由于主控板故障引起的主备倒换以及通过命令行执行的主备倒换。主控板故障引起的主备倒换集群系统主控板的故障可能会引起集群系统内角色的变化。集群系统主用主控板故障集群系统主用主控板故障后,集群系统角色的变化如图3-21所示。图3-21 集......