7月30日模拟赛赛后总结

\[7月30日 \ \ 模拟赛 \ \ 赛后总结 \\ 2024年7月30日 \\ by \ \ \ hcy
\]

洛谷同步:点我

一、做题情况

  • 第一题比赛 \(100pts\) ,赛后\(AC\)

  • 第二题比赛 \(20pts\) ,赛后\(AC\)

  • 第三题比赛 \(0pts\) ,赛后\(AC\)

  • 第四题比赛 \(30pts\) ,赛后\(30pts\)

  • 比赛得分 \(150/400 \ pts\) ,赛后补题 \(330 / 400 \ pts\)

    二、比赛概况

    T1一道水题,花了15 min切掉了,预期分数:\(100pts\),实际分数:\(100pts\)

    T2看了眼题目,不敢直接用 map,怕被卡常,先离散化一下,再进行双指针,不知道为啥 \(WA\ 20pts\) ,很奇怪。 预期分数:\(100pts\) 实际分数:\(20pts\) ,用时30 min

    T3看起来像ZJOI2022的题(实则不是),看了眼题目,觉得有点难,先做T4,T4看着有些像线段树,但是不知道怎么写,只好写个暴力。 预期分数:\(30pts\) 实际分数:\(30pts\) ,用时30 min

    回来看T3,花了10 min才把题目读懂,正解不知道怎么写,只好自己整些歪魔邪道 预期分数:? 感觉 \(50pts\) 实际:\(0pts\) (不幸用C++98[XYD没写C++指的是C++98,以为是C++20],greater不能用,惨遭 \(CE\) 爆 \(0\))

三、题解报告

T1:

题面:

报数游戏Ⅱ

时间限制: 1s

空间限制: 512MiB

【题目描述】

外星幼儿园的小朋友按照老师的要求玩报数游戏Ⅱ,每个人手里有一张小纸条,上面写着一个数字,每个人都按照顺序报数,报数的方式是这样的 :

每个人听自己的前面一个人报数字的大小,加上自己纸条上的数字求和,并报出自己的数字。

对于第一个人来说,他听到的数字是由老师报出来的。

如果你是老师,请在确保每位同学报的数字是正数的情况下,报出一个最小的正数作为起始值。

【输入格式】

第一行有一个整数 \(n\),输入有多少个同学排队 第二行输入一个数组 \(nums\),数组长度为 \(n\),数字用空格分隔,代表同学按照报数字的顺序排好队以后,每个同学手里小纸条上的数字。

【输出格式】

输出一行,共一个数字,输出符合条件的起始值。

【样例输入1】

5

-3 2 -3 4 2

【样例输出1】

5

【样例解释1】

在你选择5作为起始值时,五名同学的报数均为正数,为 \([2,4,1,5,7]\)。

【数据范围】

对于 \(20\%\) 的数据来说: \(1 \le n \le 100,-100 \le nums_i \le 100\)

对于 \(100\%\) 的数据来说: \(1 \le n \le 10^5, -10^9 <= nums_i <= 10^9\)

做法:

一道 前缀和 板子题,只要加点数学,都可以做吹来。

个人体感难度:\(\color{#FE4C61}\text{入门}\)

附:AC代码

#include <bits/stdc++.h>
#define int long long
using namespace std ;
int n , a [100010] , b [100010] , mi ;
signed main () {
ios::sync_with_stdio (false) ;
cin.tie (NULL) ; cout.tie (NULL) ;
cin >> n ;
for (int i = 1 ; i <= n ; i ++) cin >> a [i] ;
for (int i = 1 ; i <= n ; i ++) b [i] = b [i - 1] + a [i] ;
mi = LONG_LONG_MAX ;
for (int i = 1 ; i <= n ; i ++) mi = min (mi , b [i]) ;
if (mi >= 0) cout << 1 ;
else cout << 1 + (- mi) ;
return 0 ;
}

T2:

题面:

百万富翁的第二次实验

时间限制: 1s

空间限制: 512MiB

【题目描述】

马克吐温有一本非常著名的小说《百万英镑》,这本小说中主角最后归还了百万英镑给两位富翁。但结果就是两位富翁依然有无穷的问题需要进行社会实验,于是,他们打算进行第二次社会实验。那就是不同财富值的人在一场舞会上会发生什么事情。为了满足自己的好奇,百万富翁们邀请了全伦敦所有人来自己的舞会。舞会开始后他们就后悔了,因为来的人太多了,而且很多人的财富都相同,统计起来太费事了。所以百万富翁们找到你,希望你根据来舞会的时间,找出在一段时间内,来舞会的所有人财富值都互不相同的人数。

【输入格式】

第一行输入一个 \(n\) 表示有 \(n\) 个人参与舞会。

按照时间顺序输入 \(n\) 个人的财富值。

【输出格式】

输出在一段时间内参加舞会的所有人财富值都互不相同的人数的最大值。

【样例】

Input 1

7

2 3 4 5 5 6 7

Output 1

4

【数据范围】

对于 \(100\%\) 的数据:

每个人的财富值不超过 \(100000000000\)。

\(0 \le n \le 1000000\)。

做法:

得用 unordered_map ,map 会被卡掉 \(70pts\),用个双指针,轻松做出

个人体感难度:\(\color{#FFC116}\text{普及/提高-}\)

附:AC代码

#include <bits/stdc++.h>
#define int long long
#pragma G++ optimize (2)
#pragma G++ optimize (3)
using namespace std ;
int n , l , r , ans , a [1000010] ;
unordered_map <int , int> f ;
signed main () {
ios::sync_with_stdio (false) ;
cin.tie (NULL) ; cout.tie (NULL) ;
cin >> n ;
for (int i = 1 ; i <= n ; i ++) cin >> a [i] ;
l = 1 ; r = 1 ;
while (r <= n) {
if (f [a [r]]) {
ans = max (ans , r - l) ;
while (l < r && f [a [r]]) {
f [a [l]] = 0 ;
l ++ ;
}
}
f [a [r]] = 1 ;
r ++ ;
}
cout << max (ans , r - l) ;
return 0 ;
}

T3:

题面:

做法:

用贪心推出(但需要花许多经历),进行预处理,然后就是道 二分 板子题,不用多说。

个人体感难度:\(\color{#52C41A}\text{普及+/提高}\)

附:AC代码

#include <bits/stdc++.h>
#define int long long
#pragma G++ optimize (2)
#pragma G++ optimize (3)
using namespace std ;
int n , T , x , y , a [500010] , l , r , mid , bao , b [500010] , c [500010] ;
signed main () {
ios::sync_with_stdio (false) ;
cin.tie (NULL) ; cout.tie (NULL) ;
cin >> n >> T ;
for (int i = 1 ; i <= n ; i ++) cin >> a [i] ;
sort (a + 1 , a + 1 + n , greater ()) ;
for (int i = 1 ; i <= n ; i ++) {
b [i] = b [i - 1] + a [i] ;
c [i] = c [i - 1] + a [i] * (n - i + 1) ;
}
while (T --) {
cin >> x >> y ;
l = 1 ; r = min (x , n) ;
while (l <= r) {
mid = l + r >> 1 ;
if (c [mid] + (x - n) * b [mid] >= y) bao = mid , r = mid - 1 ;
else l = mid + 1 ;
}
if (c [bao] + (x - n) * b [bao] >= y) cout << bao << "\n" ;
else cout << "-1\n" ;
}
return 0 ;
}

T4:

题面:

统计区间

时间限制: 3s

空间限制: 512MiB

【题目描述】

有一个长度为 \(n\) 的数列 \(a\),\(a\) 的值在 \([1,n]\) 中,现在要统计区间中出现的数都恰好出现 \(2\) 次的区间数。

【输入格式】

第一行一个整数 \(n\)。

第二行 \(n\) 个整数表示 \(a\)。

【输出格式】

一行一个整数 \(cnt\),表示满足条件的区间数。

【样例】

Input 1

7

5 3 5 5 4 4 3

Output 1

4

【样例解释】

样例中合法的区间有:\([3,4],[5,6],[3,6],[2,7]\)。

【数据范围】

对于 \(30\%\) 的数据:\(n\le10^3\).

对于 \(100\%\) 的数据:\(n\le10^6\).

做法:

下面AC代码是另一种做法

个人体感难度:\(\color{#3498DB}\text{提高+/省选-}\)

附:AC代码

#include<bits/stdc++.h>
#define L(i, j, k) for (int i = (j); i <= (k); i++)
#define R(i, j, k) for (int i = (j); i >= (k); i--)
#define sz(a) ((int) (a).size())
#define ll long long
#define vi vector < int >
#define ull unsigned long long
using namespace std;
const int N = 1 << 20;
int n, a[N];
int lst[N], llst[N];
ull w[N], pre[N], ret;
ll ns;
unordered_map < ull, int > mp;
mt19937_64 orz(time(0) ^ clock());
int main () {
ios :: sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n ;
L(i, 1, n) cin >> a[i];
L(i, 1, n) w[i] = orz();
int p = 0;
mp[0] += 1;
L(i, 1, n) {
while (p < llst[a[i]]) mp[pre[p]] -= 1, ++p;
llst[a[i]] = lst[a[i]], lst[a[i]] = i;
pre[i] = pre[i - 1] ^ w[a[i]], ns += mp[pre[i]], mp[pre[i]] += 1;
}
cout << ns << '\n';
return 0;
}

四、赛后总结

这把死得真惨,T2未知 \(WA\) ,T3用C++98惨遭 \(CE\) 。下次不知道会不会这样。

7月30日CSP-S模拟赛赛后总结的更多相关文章

  1. 2016年12月30日 星期五 --出埃及记 Exodus 21:25

    2016年12月30日 星期五 --出埃及记 Exodus 21:25 burn for burn, wound for wound, bruise for bruise.以烙还烙,以伤还伤,以打还打 ...

  2. 11月30日《奥威Power-BI智能分析报表制作方法》腾讯课堂开课啦

    这么快一周就过去了,奥威公开课又要与大家见面咯,上节课老师教的三种报表集成方法你们都掌握了吗?大家都知道,学习的结果在于实际应用,想要熟练掌握新内容的要点就在于去应用它.正是基于这一要点,每一期的课程 ...

  3. 2016年11月30日 星期三 --出埃及记 Exodus 20:21

    2016年11月30日 星期三 --出埃及记 Exodus 20:21 The people remained at a distance, while Moses approached the th ...

  4. 2016年10月30日 星期日 --出埃及记 Exodus 19:15

    2016年10月30日 星期日 --出埃及记 Exodus 19:15 Then he said to the people, "Prepare yourselves for the thi ...

  5. 2016年6月30日 星期四 --出埃及记 Exodus 14:27

    2016年6月30日 星期四 --出埃及记 Exodus 14:27 Moses stretched out his hand over the sea, and at daybreak the se ...

  6. 10 月 30 日新款 Mac mini 有望与新款 iPad Pro 一起发布

    苹果最新款的 Mac mini 是在 2014 年 10 月推出的版本,到现在已经过了 4 年.分析师郭明錤和彭博社的 Mark Gurman 都表示苹果会在今年晚些时候发布新款 Mac mini. ...

  7. 北京Uber优步司机奖励政策(3月30日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  8. 北京Uber优步司机奖励政策(1月30日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  9. 北京Uber优步司机奖励政策(12月30日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  10. 成都Uber优步司机奖励政策(3月30日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

随机推荐

  1. PI规划会,研发团队价值聚焦的一剂良方

    随着数字化建设如火如荼地推进,中大型企业的数字化建设团队规模也越来越大,团队规模的扩大一方面带来了更多产能与可能性,另一方面,不同的角色在不同的业务场景也带来了一些现实问题,例如: 作为CIO 或产品 ...

  2. mysql 联合表查询从表即使有索引依然ALL的一个原因-索引ALL解决,字符编码方式不一致导致全表搜索

    mysql 联合表查询从表即使有索引依然ALL的一个原因-索引ALL解决,字符编码方式不一致导致全表搜索那就是主表和从表的关联字段的编码方式不一样!!! 产生的现象: 解决之后,正确的使用了t2.or ...

  3. 【译】了解17.10 GA 中最新的 Git 工具特性

    我们相信提高开发和团队协作的生产力可以帮助您产生更好的软件解决方案.这就是为什么 Visual Studio 版本控制团队发布了新特性,简化了内部循环和代码审查体验.您将获得 AI 支持编写提交消息. ...

  4. Fake权限验证小例子

    前言 关于本地测试如何进行Fake权限验证 正文 在我们使用swagger调试本地接口的时候,我们常常因为每次需要填写token而耽误工作,不可能每次调试的时候都去本地测试环境请求一个token进行验 ...

  5. P3806 题解

    看到现有的一篇 DSU on tree 的题解复杂度假了,于是我来再写一篇. 首先重新梳理思路,维护每棵子树内深度为某个值的节点是否存在. 维护这个东西可以直接 DSU on tree 也就是把小的子 ...

  6. css 手稿

    CSS 网页的布局和外观的显示样式 没有一张图解决不了的事:https://www.processon.com/mindmap/5e368a8be4b0d27af184e118 选择器 * 通配符选择 ...

  7. 权威技术社区InfoQ列网易数帆为年度最有价值技术团队,技术实力获广泛认可

    近日,权威技术社区InfoQ公布数字化转型技术服务商网易数帆为2020年最有价值技术团队,并被授予"最佳技术社区驱动力奖",认可网易数帆在技术领域的突出成就和实力.     Inf ...

  8. leetcode简单(数组,字符串,链表):[168, 171, 190, 205, 228, 448, 461, 876, 836, 844]

    目录 168. Excel表列名称 171. Excel 表列序号 190. 颠倒二进制位 205. 同构字符串 228. 汇总区间 448. 找到所有数组中消失的数字 461. 汉明距离 876. ...

  9. Nginx $remote_addr和$proxy_add_x_forwarded_for变量详解

    $remote_addr 代表客户端IP.注意,这里的客户端指的是直接请求Nginx的客户端,非间接请求的客户端.假设用户请求过程如下: 用户客户端--发送请求->Nginx1 --转发请求-- ...

  10. ABC352

    A link \(x\)停不到,\(y\)能停到. 要先判断是从前往后还是从后往前. 点击查看代码 #include<bits/stdc++.h> using namespace std; ...