今天用windows下的GUIDE打了一些板子,以下是我遇到的问题。

语言

未定义返回值类型的函数

inline isnum(char ch)
{
return ch>='0'&&ch<='9';
}
inline int read()
{
int x=0,fu=1;
char ch=getchar();
while(!isnum(ch)&&ch!='-') ch=getchar();
if(ch=='-') fu=-1,ch=getchar();
while(isnum(ch)) x=x*10+ch-'0',ch=getchar();
return x*fu;
}

上面是一个快读。isnum(char)忘记写返回值了,但是信息查看栏里面

--------开始编译--------
编译成功.

居然没有报错。

交到洛谷上

ISO C++ 不允许声明无类型的‘isnum’ [-fpermissive]
inline isnum(char ch)

这就很麻烦了啊。考试的时候别看见inline就忘记返回值了!


其实c++有一个在<cstdio>内的函数isdigit(char)可以用来判断是否为数字。

这是我一般写的快读(没有负数)

inline int read()
{
int x=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
x=ch-'0';ch=getchar();
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
return x;
}

读入string

大家应该都知道,读入string字符串一般用cin>>string。但是如果想要快一点的话,如何读入呢?用scanf

使用scanf的话,格式符是"%s",并且string变量名不能像char数组那样当作首元素的指针了,应该使用取地址符来进行读入。

string a;
scanf("%s",&a[0]);

看似很完美也很快的方法,结果读入了什么都没有!这是为什么?

因为string属于\(STL\)的容器,这些容器以开始都是没有分配内存的,需要手动分配内存。

string a;
a.resize(10);//这个长度要手动设置
scanf("%s",&a[0]);

所以我还是打算老老实实的使用cin呢。

当然有人要问,为什么不用getchar()再插入。因为string.push_back()是\(C++11\)的语言了,csp应该是不能用。。。

栈大小

编译开大:

-Wl,-stack=67108864

总体开大:

sudo -s//管理员权限
ulimit -s unlimited//开大
ulimit//检查

算法

快速幂

可能会遇到模数为1的情况。所以别忘记给ans先%一个p或最后再%p一次

一般写法:

for(ans=1;b;b>>=1,a=a*a%p) if(b&1) ans=a*ans%p;

要改成

for(ans=1%p;b;b>>=1,a=a*a%p) if(b&1) ans=a*ans%p;

for(ans=1;b;b>>=1,a=a*a%p) if(b&1) ans=a*ans%p;ans%=p;

hack:1 0 1

因为b=0,故使用第一种程序时,不会取模,导致答案错误期望0,读到1

质数筛

埃氏筛没有问题,但是在洛谷上跑的时候最多40pts(不加快写20pts),这里就体现了快写线性筛的必要性。

book[1]=1;
for(re LL i=2;i<=n;i++)
{
if(!book[i]) prime[size++]=i,write(i);
for(re LL j=0;j<size&&i*prime[j]<=n;j++)
{
book[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}

树状数组

树状数组有个O(1)插入的方法

for(re int i=1;i<=n;i++)
{
a[i]+=read();
if(i+(i&-i)<=n) a[i+(i&-i)]+=a[i];
}

结果我两次把\(1\)看成\(i\),一次忘记判断i+(i&-i)<=n,挂的可快了!

单调队列

这里只列出来求区间最小值。

  • 一定要先判断队列不为空

  • 队尾出不单调元素

  • 插入下标进队尾

  • 队头出过期元素

记着这些应该就没问题。

while(!mn.empty()&&a[mn.back()]>a[i]) mn.pop_back();
mn.push_back(i);
while(!mn.empty()&&mn.front()+k<=i) mn.pop_front();
if(i>=k) cout<<a[mn.front()]<<" ";

KMP

还是char好用,char下标可以从1开始

for(int i=2,j=0;i<=tl;i++)
{
while(j&&t[i]!=t[j+1]) j=nxt[j];
if(t[i]==t[j+1]) j++;
nxt[i]=j;
}
for(int i=1,j=0;i<=pl;i++)
{
while(j&&(p[i]!=t[j+1])) j=nxt[j];
if(p[i]==t[j+1]) j++;
if(j==tl) cout<<i-tl+1<<endl,j=nxt[j];
}

string只能从0开始,好可怜。。。

int j=-1;
nxt[0]=-1;
for(int i=1;i<b.size();i++)
{
while(j>-1&&b[i]!=b[j+1]) j=nxt[j];
if(b[i]==b[j+1]) j++;
nxt[i]=j;
}
j=-1;
for(int i=0;i<a.size();i++)
{
while(j>-1&&a[i]!=b[j+1]) j=nxt[j];
if(a[i]==b[j+1]) j++;
if(j==b.size()-1){
cout<<i-b.size()+2<<endl;
j=nxt[j];
}
}

逆元

记住三种就好

快速幂

\[a^{-1}=a^{p-2}(\texttt {mod }p)
\]

拓展欧几里得

void exgcd(int a,int b,LL &x,LL &y)
{
if(!b)
{
x=1;
y=0;
return;
}
exgcd(b,a%b,y,x);
y-=a/b*x;
}
//------------
exgcd(a,p,x,y);
x=(x%p+p)%p;
cout<<x;

线性

LL inv[100000010];
LL n,p=998244352;
int main()
{
cin>>n;
inv[0]=1;
inv[1]=1;
for(LL i=2;i<=n;i++)
{
inv[i]=(p-p/i)*inv[p%i]%p;
}
for(int i=1;i<=n;i++) cout<<inv[i]<<" ";
return 0;
}

End

检查long long,不确定就全开吧!

检查数组大小,无向图双倍,线段树四倍

删除Debug

检查freopen和选手文件夹

赛时

死磕T1,1h30min后估30pts无从下手优化;

看到T2,貌似是组合数学,直接\(pass\)

看到T3,想到暴力——线段树——vector存展开指令——1h30min写完暴力继续T1;

继续T1,优化至能过50pts。再用手动倍增(2000years,10k、100k、1000k、10000kyear)预估时间复杂度为\(O(q*log_{10} n)\),但是大样例3,它\(1s\)只能过一半!

卡常,检查,于是。。。

有所感动的是,赛后代码都正常……呵呵!

无论自己现在做什么,日子还是要接着过,明天的太阳还是会正常升起。

过去的事情就让它过去吧。

After-story

CSP2020复赛后日志

以及待更新

CSP2020复赛前小结的更多相关文章

  1. CSP2020复赛游记

    CSP2020复赛游记 由于本蒟蒻侥幸通过PJ和TG的分数线并且侥幸的拿了一等,所以侥幸的来参加复赛 11.04~11.05 期中考,挂 11.06 对答案,炸 11.07 开始了第一次CSP复赛 坐 ...

  2. csps前小结

    冒着题没改完颓废被发现的风险来写博客 好像离csps只剩两天了,然而没啥感觉 最近考试有时考得还算可以,有时也会很炸 今天考试事实上心态啥崩,因为T1结论题一直没思路,想了一个小时连暴力都没打 过了一 ...

  3. TypeScript体系调研报告

    作者简介:aoto 蚂蚁金服·数据体验技术团队 Q:为什么要写这边文章?这篇文章要表达什么? A:我们考虑在SPA应用中使用TS作为开发语言,我们需要一篇系统性介绍TS本身及周边的文章来论证在项目中使 ...

  4. Python(三)——文件操作

    在我们用语言的过程中,比如要往文件内进行读写,那么势必要进行文件操作,那么咋操作呢?用眼睛直接看么?今天就定个小目标,把文件读写那些事扯一扯 文件操作 把大象放进冰箱分几步? 第一步:打开冰箱 第二步 ...

  5. 从柯洁对战AlphaGo,看商业智能

    [摘要]李开复赛前说,AlphaGo和李世石的人机大战是第一次,可能还有悬念,那今天的AlphaGo已经在围棋的世界中彻底甩开了人类,不再拥有任何其他的可能.并指出,AlphaGo和柯洁的比赛并非没有 ...

  6. 达梦产品技术支持-DM8-数据库安装

    (该文档只适合个人环境搭建,未涉及到数据库的各种参数配置,未涉及到数据库规划,若需要企业环境搭建请咨询专业人员) 基于Windows的安装 windows下安装是图形化界面,与linux下的图形化界面 ...

  7. dm8数据库的安装 for linux

    目录 dm8数据库的安装 for linux 1.创建用户 2.修改limit的文件 3.解压文件安装包 4.挂载iso镜像 5.对于安装介质和目录进行权限授予 6.切换用户安装数据库软件 7.dm数 ...

  8. 达梦数据库学习(一、linux操作系统安装及数据库安装)

    达梦数据库学习(一.linux操作系统安装及数据库安装) 环境介绍: 使用VM12+中标麒麟V7.0操作系统+达梦8数据库 一.linux系统搭建 本部分没有需要着重介绍,注意安装时基本环境选择&qu ...

  9. Luogu 2017 Autumn Camping 游记

    颓得不行的我到D2才想起来自己可以写一篇low得不能再low的游记,然后就动笔了...... Day0 愉快地看着三联,想着别人放一天我放四天的悠闲生活,内心甚是平静.然而晚上回到家就开始浪了,看完了 ...

  10. DM8数据库单机安装

    一.系统概要 表1 部署情况一览表 操作系统 Windows10 数据库版本 DM8(开发版) 数据库类型 单机 磁盘挂载 无 Key信息 无 二.操作系统信息检查 2.1 操作系统版本 [root@ ...

随机推荐

  1. Tomcat的优化(分别为操作系统优化(内核参数优化),Tomcat配置文件参数优化,Java虚拟机(JVM)调优)

    Tomcat的优化        一.Tomcat 优化                Tomcat 配置文件参数优化        二.系统内核优化        三.Tomcat 配置 JVM 参 ...

  2. 面试题-Storm框架

    前言 Storm框架在实际项目中已经平稳运行快一年了,也很好的支撑了海量读写器的数据处理需求,不过和RabbitMQ一样,为了项目进度,实际工作中只能尽快的调研,关注一些关键点,其他的细节就只能放一放 ...

  3. 接口介绍以及定义和使用--java进阶day02

    1.接口介绍 日常生活中有很多接口,比如手机数据线的接口和手机充电器的接口 我们转换视角,站在设计者的角度思考接口,接口体现出规则,手机的接口大小和数据线的接口大小必须一致,各种接口的大小都要一致,都 ...

  4. vue2&vue3&小程序简介

    Vue2.Vue3.小程序页面生命周期详解 本篇将对比 Vue2.Vue3 以及小程序页面/组件的生命周期,简单梳理各自特点.差异.新增优化点. Vue2 生命周期 beforeCreate → cr ...

  5. 保存计算过程的计算器——java实现

    一.设计模型 按照MVC-Model View Control(模型,视图,控制器)的设计思想展开程序的设计和代码的编写.数据模型部分相当于MVC中的Model角色,视图设计部分给出的界面部分相当于M ...

  6. python,爬取小说网站小说内容,同时每一章存在不同的txt文件中

    思路,第一步小说介绍页获取章节地址,第二部访问具体章节,获取章节内容 具体如下:先获取下图章节地址 def stepa(value,headers): lit=[] response = reques ...

  7. 什么是 Java 中的 logging write barrier?

    什么是 Java 中的 Logging Write Barrier? Logging Write Barrier 是 Java 垃圾回收器在维护堆引用关系时常用的一种机制.它是一种特殊的写屏障(Wri ...

  8. 使用TypeScript开发微信小程序(云开发)-入门篇

    配置小程序云开发 TypeScript 环境 1. 检查本地 nodejs 环境 2. 安装 TypeScript npm install typescript --save-dev 3. 初始化/配 ...

  9. CF1627B题解

    Not Sitting 题面翻译 Rahul 和 Tina 在玩一个游戏.游戏在一个 n×mn\times mn×m 的网格图上进行,记第 rrr 行第 ccc 列上的格子为 (r,c)(r,c)(r ...

  10. 解决多个if-else的方案

    参考链接: 遇到大量if记住下面的口诀: 互斥条件表驱动 嵌套条件校验链 短路条件早return 零散条件可组合 解释: 互斥条件,表示几个条件之间是冲突的,不可能同时达成的.比如说一个数字,它不可能 ...