备战

2021.10.18

下午班主任找到我,告诉了我一个消息——这一周的下午和晚修全部上信息

我当时十分高兴,但三秒后....

妈耶,我文化课要垮了QAQ

到机房时,老师开始讲强连通分量,太监(tarjan)算法

我傻掉了QAQ

(初赛都这么变态,base64四毛子,复赛怕会普及出黑题.....)

后来晚上初一几个自学三角函数,这是我奋斗的足迹


2021.10.19

在Panda的帮助下搞懂了太监算法,然后做比赛

提高难度,我们进复赛的四个初一全部西内

当中最高是教授和某兔子爱好者,切了一题105

我和王梓烨垫底了QAQ

有一题我以为是树状数组,结果是模拟,痛失15分


不过没事,我们与其他初一又一起做了牛客的模拟赛

(当然并不是同步赛)

然后....全员200可还行

我突然觉得一等无望了....


晚上突然对魔法猪学院起了兴趣.....

72,A* 过不了啊!!

于是暂时放下,安心复习


2021.10.20

又做了做魔法猪学院

发了个贴

想不到有个犇犇告诉我有A* 能过的

秒切


偶然发现中山原来有这么多普及红名大佬?我被暴踩


搞了一会博客园,投入到学习中

老师开了几个复习专题,我先做了高精,切了几道

数据结构,我不会银河英雄传说,我太菜了

在这里复习一下种类并查集

比如食物链

我们用x与y+n有关系表示x吃y

x与y+2*n表示y吃x

这样去连,到时候判断即可

好的,然后是数论,exgcd忘干净了,赶紧复习

推了几次式子,会求\(ax+by=1\)了,不会\(ax+by=c\)


2021.10.21

上午刚好有节信息课,拿来复习

欧拉函数搞懂了!!!又A两道,Great!

复习欧拉函数


中午去做核酸,和王梓烨和教授聊天,不亦乐乎

(我还说我是IFW——International Feet Washing (世界洗脚大赛)的冠军哈哈哈)


下午继续刷题

Panda梅开二度,教我\(ax+by=c\),Orz

复习了哈希

好紧张呀,加油!!!


2021.10.22

参加模拟赛,倒数第二

重测一次,倒数第一

难受,晚饭没吃

然后在vjudge做练习,还是太监算法

我被虐菜

晚上回班收拾作业,好...多...

路上看见一个同学,说,只要我AK了,就请他喝炖汤

怎么可能(AK)?

比赛当日

早上

\(5:50\)醒了,去吃早餐

\(6:45\)出发

\(7:25\)左右到了

想进去看看,结果XC不让进,于是各个学校的OIer就闲聊

线下见面

见到了洛谷上两个大佬!!

之前在洛谷上约好的,终于见面了

非常尬:

“你平常登洛谷吗”

“哦,你是xx”

“啊哈啊哈”

“额哈额啊哈”

正文

开始前上了个厕所,结果xc大声说:

“你干嘛进进出出的”

“我...才出去一次”

然后xc对考官说:

“这种出去的一定要好好查一下”

我 被 搜 身

好强的压迫感....

比赛开始后,老师让我们输密码(结果老师自己打错了)

谢谢JZ提供了一个卡死的Linux模拟机,还没windows稳定....


第一题不是很确定,没想出来(我太菜了)

然后打了一个能过样例的公式,先做其他题

第二题真就题如其名,

一开始以为是树状数组,浪费10分钟

其实不是很难,个人认为最简单(Because 不会第一题)

做完第二题,出去喝了杯牛奶,回去做第三题

第三题其实就是输入恶心,

我调了50分钟的输入

结果灵光一闪————不就scanf的妙用吗

但为了判断前导零,要用sscanf

然后半个小时切了

这时差不多\(11:15\)

啊!!要不是这里浪费了太多时间,第一题我可能就调出来了!!!!

第四题我用了链表做,节省时间

感觉会超时.....

(P.S:我有一个朋友说他用并查集,不知道怎么做的,样例全过Orz)

只对了一下样例,没来得及对拍

然后看第一题,改了一下,搞了一个对拍

对到\(11:45\),老师收各种东西,然后去打文操了

发现第二题调试没删,差点爆零....


比赛后

回家了

测了一下第四题,70分TLE QAQ

一等没了

结果一测其他题:\(100+100+100+70=370\)?!

其他网站都差不多,第四题不同

xx小灵通:第四题50,其他AC

计蒜客:第四题90,其他AC

诡异啊!!!大佬都说我第一题公式不对,对拍也不对,但各个网站都过了?

如果准的话,一等了.....(2021.10.30:说的真准)

估计实际第一题70左右(2021.10.31:其实是60)

赛后总结与讲解

2021.10.30:Ohhhhhh!!360!!

感谢教练!!

三年了!!我出息了!!

简单总结

题目名 得分 个人定位 检查 暴力 数据全过
candy \(100\) 数学,思维 YES NO YES
sort \(100\) 时间复杂度,排序,模拟 YES NO YES
network \(100\) 模拟,哈希,输入技巧 YES NO YES
fruit \(60\) 链表,模拟 YES YES MAYBE

一开始先把题都看了,所以没有因小失大

第二,第三题发挥稳定,但第三题输入想了\(50min\),是一个巨大的失误

第一题未能推出正解,对排每20个测试点错1个

但是,数据,它!!过!!了!!

第四题暴力顺利水到60分

Candy

小结

第一题未能推出正解,对排每20个测试点错1个

但是,数据,它!!过!!了!!

(感谢CCF出了这么水的数据点!!)

题解

我还是认为我会被强数据hack,不拿自己的trash思路忽悠人了

这是别的犇犇的思路:

其实我们想,最优情况是拿\(n-1\)个——再拿一个就又要分了

但有时不足\(n-1\),我们拿不到那么多,怎么办呢?

我们拿\(r\)个就好了,

因为拿不到\(n-1\)就说明\([ l , r ]\)能拿到的是一个\([1,n-2]\)的一个子区间

也就是说,越往后越优

所以保证拿\(r\)个是最优解

(我考场没想出来QAQ)

参考代码

#include<bits/stdc++.h>
using namespace std;
long long n,l,r;
int main()
{
cin>>n>>l>>r;
if(l%n+r-l>=n)//如果能拿n-1个
{
cout<<n-1;
}
else
{
cout<<r%n;
}
}

赛时代码(可能有错)

只可意会,不可言传

很垃圾,自己看吧.....

#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
long long n,l,r;
inline long long read()//手打小垃圾快读
{
char c=getchar();
int f=1;
long long sum=0;
while(c!='-'&&(c<'0'||c>'9'))c=getchar();
if(c=='-')
{
f=-1;
c=getchar();
}
do
{
sum=(sum<<3)+(sum<<1)+c-'0';
c=getchar();
}while(c>='0'&&c<='9');
return sum*f;
}
int main()
{
n=read(),l=read(),r=read();
long long mn=l/n,mx=(l+n-1)/n;
mn*=n,mx*=n;
long long ans=r-mn,ans2=r-mx;
//printf("%d %d %d\n",mn,ans,r);
if(ans>=n||ans2>=n)
{
printf("%d",n-1);
}
else
{
printf("%d",max(ans,max(0*1ll,ans2)));
}
}

优点:

  • 该放手时就放手,在作不出时换题,保证了比赛的 节奏稳定 ,是一个 很好的习惯

  • 最后回来对排,但未找出正解,对排是个好习惯

缺点

  • 思维题能力欠缺 ,尤其是这种打卡题

Sort

小结&题解

考前蒙对了,猜中有 时间复杂度 的题

各位想想,有三种做法(正常的)

第一种

暴力,每次修改排一次序,用一个数组记录

这个数组的第x项表示第x项排序后到了哪里,查询\(O(1)\)

复杂度约为:

\(O(mnlog_n+m)\)

但修改最多5000次,所以更正为

\(O(5000nlog_n+m)\)

显然TLE

第二种

对于修改,直接改,\(O(1)\)

对于查询,找一遍所有小于它的,\(O(n)\)

复杂度:

\(O(nm)\)甚至慢过暴力

正解:第三种

先用sort排,

然后对于每次修改,去重新定位这个修改的数,跟插入排序差不多,复杂度\(O(n)\)

查询,只需要输出准备好的一个数组,同做法一,复杂度\(O(1)\)

注意看题,修改最多\(5000\)次,盲猜一堆人以为我这个修改会超,因为他们以为极端数据会修改\(200000\)次,

复杂度:

\(O(nlog_n+5000n+m)\)不会超

所以要 好好看题 呀!!!

话说貌似每年的第二题都要估算时间复杂度....大家可以专门练一下这种题

参考代码:

#include<bits/stdc++.h>
using namespace std;
struct node
{
int num,no;
}b[8005];
long long x,y,z,n,m,a[8005],c[8005];
int cmp(node x,node y)//如果相等,比较编号
{
if(x.num==y.num)
{
return x.no<y.no;
}
return x.num<y.num;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
b[i].num=a[i];
b[i].no=i;
}
sort(b+1,b+n+1,cmp);
for(int i=1;i<=n;i++)
{
c[b[i].no]=i;//预处理数组
}
b[n+1].num=1e10,b[0].num=-1e10;//用来返回的边界
for(int i=1;i<=m;i++)
{
cin>>x>>y;
if(x==2)
{
cout<<c[y]<<endl;
continue;
}
if(x==1)
{
cin>>z;
b[c[y]].num=z;
for(int j=c[y];j<=n;j++)//调整位置
{
if(b[j].num>b[j+1].num||(b[j].num==b[j+1].num&&b[j].no>b[j+1].no))
{
swap(b[j],b[j+1]);
c[b[j].no]--;
}
else
{
c[y]=j;
break;
}
}
for(int j=c[y];j>=1;j--)//注意两边都要试
{
if(b[j].num<b[j-1].num||(b[j].num==b[j-1].num&&b[j].no<b[j-1].no))
{
swap(b[j],b[j-1]);
c[b[j].no]++;//交换后,预处理数组也要更改
}
else
{
c[y]=j;
break;
}
}
}
}
}

优点:

  • 仔细看题,找出解题的关键要素,不漏每个细节,这也是我能AC本题的原因

  • 百折不挠,认真调试,在比赛时,有一个好的心态,去进行复杂的调试

  • 在发现正解,有敢于推翻旧解的心态,我发现正解后立刻删除了旧代码,毫无感情

缺点

  • 一言不合暴力,开局打了一个树状数组+离散化,显然不对

Network

小结&题解

这道题是可以\(20min\)搞定的水题

But我浪费了很多时间

难点是输入

但仔细想想也不难

单独发在博客了,会投稿题解

放个网址:

博客园:THIS

Luogu博客:THIS

优点:

  • 无,如果非说有,知道的函数(sscanf)救了自己一命

缺点

  • 花了太多时间,\(1h10min\)本场比赛最大失误
  • 在耗费大量时间时,没有及时跳题,与第一题相反

Fruit

小结

打了暴力

用链表模拟

赛时代码

#include<bits/stdc++.h>
using namespace std;
int n,s,t,sum;
struct node
{
int num,l,next;
}a[200005];
inline long long read()
{
char c=getchar();
int f=1;
long long sum=0;
while(c!='-'&&(c<'0'||c>'9'))c=getchar();
if(c=='-')
{
f=-1;
c=getchar();
}
do
{
sum=(sum<<3)+(sum<<1)+c-'0';
c=getchar();
}while(c>='0'&&c<='9');
return sum*f;
}
int main()
{
n=read();
s=1,t=n;
for(int i=1;i<=n;i++)
{
a[i].num=read();
a[i].l=i-1;
a[i].next=i+1;
}
while(sum!=n)
{
int k=-1;
for(int i=s;i<=t;i=a[i].next)
{
if(a[i].num!=k)
{
k=a[i].num;
sum++;
cout<<i<<' ';
a[a[i].next].l=a[i].l;
a[a[i].l].next=a[i].next;
if(i==s)
{
s=a[i].next;
}
if(i==t)
{
t=a[i].l;
}
}
}
cout<<endl;
}
}

正解

其实大概想到了,但没时间打。

再加一个链表,每项表示一个“水果链”,

每次直接跳下一个水果链,快很多。

优点:

  • 能水一分是一分,一种良好的比赛态度

缺点

  • 正解很好推,但时间不够(第三题的锅)

总结

根据上述,下次要做到:

  • 该放手时就放手,在作不出时换题
  • 强化思维题能力
  • 仔细看题,找出解题的关键要素,不漏每个细节
  • 百折不挠,认真调试
  • 在发现正解,有敢于推翻旧解的心态
  • 不要一言不合暴力
  • 能水一分是一分
  • 还是要说——诚信考试!!!

2021 CSP-J复赛 我的备战与游记的更多相关文章

  1. CSP J/S 初赛总结

    CSP J/S 初赛总结 2021/9/19 19:29 用官方答案估计 J 涂卡的时候唯一的一支 2B 铅笔坏了,只能用笔芯一个个涂 选择 \(-6\ pts\) 判断 \(-3\ pts\) 回答 ...

  2. 【游记】CSP J/S 2019 游记

    J 组 \(2:30\)开始, \(2:13\)还在酒店的我看了看手表...飞奔考场. T1 数字游戏 秒切. 下午某中学某大佬说可用线性基(%) T2 公交换乘 用单调队列思想,秒切. T3 纪念品 ...

  3. CSP J/S 2019受虐记

    一枚蒟蒻的游记~ 提高组DAY1 不是说每场考试都有一道签到题吗 那我tm读了三遍题硬是没找到一道水题是怎么回事(是我太弱了吗) 没办法,硬着头皮做T1 暴力写法...期望得分30pts 于是...在 ...

  4. 【游记】CSP 2021 J2

    这次是第一次参加CSP的复赛,所以考的就很LJ. \(DAY-\infty\) 到 \(DAY-14\) 知道了自己苟过了初赛,像个SB一样. (我初赛66分,旁边那位63.5,cao着线过去的) \ ...

  5. [游记]2020/CSP - S总结

    2020 / C S P − S 总 结 2020/CSP - S总结 2020/CSP−S总结 这年的 C S P CSP CSP考的不是很理想,本来稳进的 C S P − J CSP-J CSP− ...

  6. 背水一战——CSP2021/NOIP2021 游记

    洛谷 version 转载本文章的其他链接: 1(S00021 提供) 2(Ew_Cors 提供) \[\texttt{2021.9.10} \] 终于开坑了. 笑死,初赛根本还没开始复习,反正初赛也 ...

  7. OI记录

    这里是蒟蒻xsl的OI记录. 2017 2017.03.?? 开始接触OI 2017.10.14 参加NOIP2017普及组初赛,踩着分数线进入了复赛 2017.11.11 参加NOIP2017普及组 ...

  8. emacs考场短配置

    (set-background-color "gray15") (set-foreground-color "gray") ;;设置颜色 (global-set ...

  9. 最优运输(Optimal Transfort):从理论到填补的应用

    目录 引言 1 背景 2 什么是最优运输? 3 基本概念 3.1 离散测度 (Discrete measures) 3.2 蒙日(Monge)问题 3.3 Kantorovich Relaxation ...

随机推荐

  1. MySQL 如何优化 DISTINCT?

    DISTINCT 在所有列上转换为 GROUP BY,并与 ORDER BY 子句结合使用. SELECT DISTINCT t1.a FROM t1,t2 where t1.a=t2.a;

  2. java中线程池创建的几种方式

    java中创建线程池的方式一般有两种: 通过Executors工厂方法创建 通过new ThreadPoolExecutor(int corePoolSize, int maximumPoolSize ...

  3. Eclipse建立Web项目,手动生成web.xml文件

    相关文章:https://blog.csdn.net/ys_code/article/details/79156188(Web项目建立,手动生成web.xml文件

  4. Java 面试问题列表包含的主题?

    多线程,并发及线程基础 数据类型转换的基本原则 垃圾回收(GC) Java 集合框架 数组 字符串 GOF 设计模式 SOLID 抽象类与接口 Java 基础,如 equals 和 hashcode ...

  5. 分享一波dubbo mybatis plus百度云链接

    https://pan.baidu.com/s/1VtfoVJwan-XPvmQfBIKMhA

  6. Netty学习摘记 —— 初步认识Netty核心组件

    本文参考 我在博客内关于"Netty学习摘记"的系列文章主要是对<Netty in action>一书的学习摘记,文章中的代码也大多来自此书的github仓库,加上了一 ...

  7. Python - 分支循环、可迭代对象与迭代器

  8. c++实现职责链模式--财务审批

    内容: 某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总经理可以审批10万元及以下的采购单,总经理可以审批20万元及以下的采购单,20 ...

  9. java中请给出一个抽象类,可以继承实体类的例子

    例1.7.2(抽象类可以继承实体类)- class VehMark_to_win {    void steer() {        System.out.println("Turn st ...

  10. Mybatis 多表实现多对一查询、添加操作

    Mybatis 多表实现多对一查询.添加操作 学习内容: 1. 多对一之添加操作 1.1.需求 1.2.数据库表(多对一或一对多,数据库外键都是设置在多的一方) 1.3.类设计 1.4.Mapper ...