CSP 2021 总结
CSP 2021 总结
PJ
开题顺序:1342
应该先做 T2 ,导致我 T2 直接看错
T1、T3
T1 :直接推规律即可,考场的想法应该正确
T3 :好家伙直接 map 走起
T2
最崩溃的来了 :\(5000\times8000=4e7\) 是吧,愣是给我看成了 \(4e8\)
然后想打插入排序(正解)骗分,发现插入排序不对,就直接 sort
。。。。。。。。
。。。。。。。。
。。。。。。。。
心 态 炸 裂
退役吧
T4
考试时想到双链表,过了小数据,但没过大数据
浪费了太多时间,导致了 T2 直接挂
总结
考试的心态不好,太急了,连 T1 都要好久才沉下心来想
今年的 pj 比较水,没有说什么没想到。
但是代码实现弱 —— T4 挂了,并浪费大量时间
眼花缭乱——四千万看成四亿
TG
T1
直接枚举廊桥+堆,暴力 \(O(nm\log n)\)
正解:设 \(c_i\) 表示 \(i\) 个廊桥能停靠的飞机,则 \(ans=\max c_{1,i}+c_{2,n-i}\)
考虑到每一个廊桥加入都会使得飞机可以停靠。
即 \(c_i=c_{i-1}+x\) , 因为 \(c_0=0\) ,于是可以通过已知 \(c_{i-1}\) 推出 \(c_i\)
考虑求 \(x\) ,因为先到先得,原有的廊桥是被占满的,于是新加的廊桥只会影响没有停廊桥的飞机
模拟,若当前飞机停靠的结束时间是 \(t\) ,每次查询停靠开始时间最接近 \(t\) 的停靠,用一个 set 即可
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n,m1,m2,c1[N],c2[N],ans;
struct rg {
int l,r;
bool operator <(rg A) const {
return l<A.l;
}
}x[N],y[N];
set<rg>S;
set<rg>::iterator it;
int main() {
freopen("airport.in","r",stdin);
freopen("airport.out","w",stdout);
scanf("%d%d%d",&n,&m1,&m2);
for(int i=1;i<=m1;i++)scanf("%d%d",&x[i].l,&x[i].r);
for(int i=1;i<=m2;i++)scanf("%d%d",&y[i].l,&y[i].r);
sort(x+1,x+m1+1);
sort(y+1,y+m2+1);
S.clear();
for(int i=1;i<=m1;i++)S.insert(x[i]);
for(int i=1,vl,p;i<=n;i++) {
vl=p=0;
while(1) {
it=S.lower_bound((rg){p,0});
if(it==S.end())break;
++vl,p=it->r,S.erase(it);
}
c1[i]=c1[i-1]+vl;
}
S.clear();
for(int i=1;i<=m2;i++)S.insert(y[i]);
for(int i=1,vl,p;i<=n;i++) {
vl=p=0;
while(1) {
it=S.lower_bound((rg){p,0});
if(it==S.end())break;
++vl,p=it->r,S.erase(it);
}
c2[i]=c2[i-1]+vl;
}
for(int i=0;i<=n;i++)
ans=max(ans,c1[i]+c2[n-i]);
printf("%d",ans);
}
T2
区间 dp ,想到后直接放弃
T3
大模拟,对于第一个是 \(L\) 或 \(R\) 分类讨论
问题简化为两个栈,如何轮流弹出栈顶使序列是个回文序列
可通过奇怪证明,发现若能弹出则一定可以弹出。
于是按照字典序枚举情况即可
考场就想到了正解,但是一些奇怪的错误被 hack 了
。。。。。。。。
。。。。。。。。
。。。。。。。。
心 态 炸 裂
退役吧
参考网络题解:这里可以把栈变成双端队列,每次弹出一对相同的数,组成回文
#include<bits/stdc++.h>
using namespace std;
const int N=500005;
int T,n,x[N<<1],fl,p,ans[N<<1];
struct que {
int q[N<<1],l,r;
inline void clear() { l=1,r=0; }
inline void push(int a) { q[++r]=a; }
inline int Fr() { return q[l]; }
inline int Bk() { return q[r]; }
inline bool empty() { return l>r; }
inline void Pf() { ++l; }
inline void Pb() { --r; }
inline int Sz() { return r-l+1; }
}A,B;
void make(int op) {
int p1=1,p2=n;
if(op==1)++p1;
else --p2;
A.clear(),B.clear();
for(int i=p-1;i>=p1;i--)A.push(x[i]);
for(int i=p+1;i<=p2;i++)B.push(x[i]);
for(int i=2;i<=n/2;i++) {
if(A.empty() && B.empty())break;
if(B.empty()) {
if(A.Fr()!=A.Bk())
return;
ans[i]=ans[n-i+1]=1;
A.Pb(),A.Pf();
} else if(A.empty()) {
if(B.Fr()!=B.Bk())
return;
ans[i]=ans[n-i+1]=2;
B.Pb(),B.Pf();
} else {
if(A.Sz()>1 && A.Fr()==A.Bk())
ans[i]=ans[n-i+1]=1,A.Pb(),A.Pf();
else if(A.Bk()==B.Fr())
ans[i]=1,ans[n-i+1]=2,A.Pb(),B.Pf();
else if(A.Fr()==B.Bk())
ans[i]=2,ans[n-i+1]=1,A.Pf(),B.Pb();
else if(B.Sz()>1 && B.Fr()==B.Bk())
ans[i]=ans[n-i+1]=2,B.Pb(),B.Pf();
else return;
}
}
fl=1;
}
int main() {
scanf("%d",&T);
while(T--) {
scanf("%d",&n),n<<=1;
for(int i=1;i<=n;i++) {
scanf("%d",&x[i]);
}
ans[n]=1;
fl=0;
ans[1]=1;
for(int i=2;i<=n;i++)
if(x[i]==x[1]) {
p=i; break;
}
make(1);
if(!fl) {
ans[1]=2;
for(int i=1;i<n;i++)
if(x[i]==x[n]) {
p=i; break;
}
make(n);
}
if(!fl)puts("-1");
else {
for(int i=1;i<=n;i++) {
if(ans[i]==1)putchar('L');
else putchar('R');
}
puts("");
}
}
}
T4
What?
看懂大意后直接再见
总结
很好——暴力没有挂,至少能有分
我* —— 实现上的失误,还是代码实现能力差
大总结
- 代码实现能力弱
- 思维不够发散,一些结论不难的题想不到
- 考试的心态不够好,过于心急,导致半天一筹莫展
过去的都过去了,希望本蒟蒻以后能专注于训练思维、代码实现
noip 2021 保佑
CSP 2021 总结的更多相关文章
- 【游记】CSP 2021 J2
这次是第一次参加CSP的复赛,所以考的就很LJ. \(DAY-\infty\) 到 \(DAY-14\) 知道了自己苟过了初赛,像个SB一样. (我初赛66分,旁边那位63.5,cao着线过去的) \ ...
- CSP 2021 游记
\(\text{Day -INF}\) 看见了 \(\text{SCP2021}\) 的报名通知,想着应该教练会让我们统一报名,就没放在心上 然后-- 然后过了二十多天教练根本没有提报名的事情,搞得我 ...
- [游记]CSP 2021 J/S
这一次,也许是我的OI生涯的转折点了--能过,学习OI的时间就不会减少:但不能过,就会减少学习OI的时间-- 上午(S组) 6:00起床.去吃早餐,结果因为边喝粥边喝牛奶导致肚子疼.(我在这里劝大家, ...
- 后缀自动机(SAM)奶妈式教程
后缀自动机(SAM) 为了方便,我们做出如下约定: "后缀自动机" (Suffix Automaton) 在后文中简称为 SAM . 记 \(|S|\) 为字符串 \(S\) 的长 ...
- 2021.10.19 CSP 模拟赛 总结
T1 题意: \(n\) 个人摘苹果,跳起高度为 \(a_i\),苹果高度为 \(h_i\),高度小的先摘,摘了就没了 直接排序+双指针,复杂度 \(O(n+m)\) T2 题意:要轰炸一个有向图的所 ...
- CSP-J 2021 游记
今年是本人第一次参加CSP组的竞赛. Day 0 晚上复习了几套初赛试卷,做到晚上十点多结束.其实暑假已经做过不少了. Day 1 早上继续复习noip历年真题,在洛谷有题上面自己做题,一向只能考十几 ...
- 【OWASP TOP10】2021年常见web安全漏洞TOP10排行
[2021]常见web安全漏洞TOP10排行 应用程序安全风险 攻击者可以通过应用程序中许多的不同的路径方式去危害企业业务.每种路径方法都代表了一种风险,这些风险都值得关注. 什么是 OWASP TO ...
- CSP J/S 初赛总结
CSP J/S 初赛总结 2021/9/19 19:29 用官方答案估计 J 涂卡的时候唯一的一支 2B 铅笔坏了,只能用笔芯一个个涂 选择 \(-6\ pts\) 判断 \(-3\ pts\) 回答 ...
- CSP的今世与未来
一.从两个工具说起 最近Google又推出了两款有关CSP利用的小工具,其一为CSP Evaluator,这是一个能够评估你当前输入的CSP能否帮助你有效避免XSS攻击的工具,其用法非常简单,在输入框 ...
随机推荐
- Hadoop-集群运行
目录 步骤一.NameNode 格式化 步骤二.启动 NameNode 步骤三.启动 SecondaryNameNode 步骤四.slave 启动 DataNode 步骤五.查看 HDFS 的报告 步 ...
- MySQL---什么是事务
什么是事务 一个数据库事务通常包含对数据库进行读或写的一个操作序列.它的存在包含有以下两个目的: 为数据库操作提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方 ...
- hashlib加密模块、logging日志模块
hashlib模块 加密:将明文数据通过一系列算法变成密文数据 目的: 就是为了数据的安全 基本使用 基本使用 import hashlib # 1.先确定算法类型(md5普遍使用) md5 = ha ...
- msyql查看版本号、最大连接数、当前连接数等
1.查看版本号 select version(); 2.查看最大连接数 show variables like 'max_connections'; 3.查看当前连接数(如果是root帐号,你能看到所 ...
- Java学习day28
为什么要只用Lambda表达式:1.可以避免匿名内部类定义过多.2.可以让代码变简洁.3.去掉无意义代码,保留核心逻辑 函数式接口(Functional Interface)定义:1.任何接口,如果只 ...
- 我发现 Linux 文档写错了
作者:小林coding 图解计算机基础网站:https://xiaolincoding.com 大家好,我是小林. 周末的时候,有位读者疑惑为什么 Linux man 手册中关于 netstat 命令 ...
- python学习-Day37
目录 今日内容详细 GIL全局解释器锁 GIL与普通互斥锁区别 GIL对程序的影响 验证多线程作用 两个大前提 关于CPU的个数 关于任务的类型 死锁现象 避免死锁的解决: 添加超时释放锁 信号量 自 ...
- 企业应用架构研究系列二十八:身份认证 Beginning Out With IdentityServer4
在.Netcore 技术栈中,一直在使用了开源组件IdentityService4进行身份管理,其功能的强大和易用性的确很受开发者喜欢,但是最近其开源组织Duende Software 开始对其进行商 ...
- FreeRTOS --(13)任务管理之空闲任务
转载自 https://blog.csdn.net/zhoutaopower/article/details/107180016 创建完毕任务,启动调度器,任务控制,系统 SysTick 来临后判断是 ...
- Linux中几个正则表达式的用法
开源Linux 长按二维码加关注~ 上一篇:盘点提高国内访问Github的速度的9种方案 正则表达式就是用于匹配每行输入的一种模式,模式是指一串字符序列.拥有强大的字符搜索功能.也非常方便的搜索过滤出 ...