每天一个爆零小技巧(持续更新

摘要:感谢各位神仙为本文提供示范操作

2022.03.23

久违的更新

编译要开 -Wall !!!

int Init() 这类函数要返回值!!!不然会 RE !!!

问就是我为此调了 4h+

2022.01.04:

#include<bits/stdc++.h>
using namespace std;
priority_queue<int> q;
int main() {
    cout << (!q.empty());
    q.pop();
    cout << (!q.empty());
}

这段代码的输出结果为 01

即,如果对一个空队列进行 pop,这个队列会变得不为空,即使里面仍没有值。

2021.12.04:

@Simon_...sun
noip 窒息操作,打表打到2e5,代码大小1MB
csp 窒息操作,优先队列top时,没判空调了三个半小时

2021.09.11:

致敬经典 @Fan_Tuan

int qpow(int a, int b, int p) {
    int ans = 1, res = a;
    res %= p;
    while (b) {
        if (b % 1) ans = (ans * res) % p;
        res = res * res % p;
        b >>= 1;
    }
    return ans;
}

2021.09.08:

奇怪的高斯消元

    int Max = i; 
    for(int j = i + 1; j <= n; ++j) if(fabs(a[i][j]) > fabs(a[i][j])) Max = j; // 选出该列最大系数 

还是对的!?

2021.09.06:

@HerikoDeltana:

突然发现关了同步流之后,再用 puts 输出字胡串的时候,会在所有 cin 和 cout 结束后再输出(

今天上午发现一个多组数据的题我输出的顺序不对,后来发现是这个原因(

2021.09.04:

@HerikoDeltana 树剖智熄操作:

I int QTree(int x,int y)
{
    int ans(0);

    while(top[x]!=top[y])
    {
        if(dep[top[x]]<dep[top[y]]) swap(x,y);

        ans+=Query(1,id[top[x]],id[x]);

        if(ans>mod) ans-=mod;

        x=fa[top[x]];
    }

    if(dep[x]>dep[y]) swap(x,y);

    ans+=Query(1,id[x],id[y]);

    Heriko x%mod; 
}

嗯没错算了半天 ans 返回了 x(

2021.08.25:

@HerikoDeltana 昨日份智熄操作: (某个字符串下标从 0 开始的题,要把字符串拆开成数组:)

1
2
3
    int len(0),slen(strlen(x)-1);
    while(slen) a[++len]=x[slen--]+'0';
    while(!a[len]) --len;

2021.07.31

KnightL 今日份天才:

bool head[maxn];
void add(int fr,int to,int dis){
  e[++tot]=(edge){fr,to,dis,head[fr]};
  head[fr]=tot;
}

2021.07.11

原来下面两个取模操作是不一样的:

(sum += x) % mod;
sum = (sum + x) % mod;

因为第一次取模后没有赋值给 sum

2021.07.05

今日降智:

while(y){
      if(y^1)res=res*base;
      base=base*base;y>>=1;
}

2021.07.01:

@KnightL:
好家伙,早上一来就降智:

val=read(),v.insert(lower_bound(v.begin(),v.end(),x),x);

@KnightL:
我草今日他妈的降巨大智:if(siz[son[u]]<siz[to]) siz[u]=to;

@Suzt_ilymtics:

笑死,这波是自己把自己卖了

void Push_up(int i) {
    tree[i] = tree[lson];
    for(int i = 60; i >= 0; --i) if(tree[rson].p[i]) tree[i].Insert(tree[rson].p[i]);

@KnightL
今日降智:

while(T>lim){
        T*=d;
        ......;
        T*=d;
}

双倍退火,结果还过了(

@KnightL:

今日降智:

if(L<=mid) cnt+=getcnt(1,1,n,L,R,k); 
if(R>=mid+1) cnt+=getcnt(1,1,n,L,R,k);

2021.06.16:

线段树 @KnightL

int query(int x,int l,int r,int L,int R){
    ......;
    pushup(x);
}

2021.06.10:

如果你在调试中出现这句话

[Error] stray '\241' in program

多半是全角空格没删

2021.06.07:

网络流弧优化 @KnightL:

head[s] = cur[s]

2021.06.04:

每日降智:

dep[fa] = dep[u] + 1

20

给 double 数组用 memset 赋值 0x3f

@jijidawang

19

每日树剖TLE小技巧:

  • 实现了每次跳一步的暴跳:if(son[u]) dfs2(son[u], u);
  • 轻链剖分:if(siz[v] < siz[son[u]]) son[u] = v;

18

在模运算下做除法运算不乘逆元我是sb

组合数在无意义下还继续累加答案我是sb

答案统计完不取模我是sb

17

这样做你会发现你加的是反边

应该是函数调用时传参问题?先运行后面的read(),在运行前面的read(); 其实是随机的。

void add_edge(int from, int to){
    e[++num_edge] = (edge){to, head[from]}, head[from] = num_edge;
}

int main(){
    add_edge(read(), read());
}

16

奇怪的知识点又增加了

    if(siz[v] < siz[son[u]]) son[u] = v;

15

分块 和 莫队的排序 是有差别的 !!!

比如按块长 \(len\) 排序
在分的块中,第一块是 \([1, len]\)
但在排序的比较中,前 \([1, len - 1]\) 被划分在了第 \(0\) 块中,而第 \(len\) 个元素被划分在了第 \(1\) 块中

Q:什么时候会碰到啊?
A:修回滚莫队的时候 /wul

14

注意多组数据之间的影响。如果怕复杂度过高而不进行 memset,要单独进行特殊处理---CF1490E

13

不要把 O 看成 0!!!!

12

多测不清空,调码两行泪

11

注意不同函数之间的调用时要写对函数名
szt因为在线段树板子2中加和乘两个函数调用错了结果修树修了一上午

10

注意不要重变量名,要有自己的变量名习惯
szt因此给wzd修线段树修了半下午

9

玄学错误:变量不能直接用3f赋值(这个值会很小,要用3f3f3f3f,memset倒可以用3f赋初值(主要是因为原理不同))
lps在做 P4767 [IOI2000]邮局 时发现的

8

双重循环中,循环所用的变量别写串了
szt和lps都犯过

7

“一个scanf("%d",&w[N]);查一个小时” ---wzd(N是个常量

6

代码中有除法时注意除数不能为零
szt因此提交了数十次代码全部RE(感谢lkp帮我查出错误

5

注意数据范围,题面ans如果超long long,在INF赋初值时直接赋值1e18,并记得开long long

十年OI一场空,不开long long见祖宗

4

if()语句后面要紧接着加分号,那样你就可以向陈绿一样两个看上去相同的代码TLE了

3

局部变量记得不要赋初值,那样你就可以像Ariel_一样莫名其妙爆零了

2

看清楚题目在做题(不行去灌杯coffee

1

线段树注意边界别写挂(容易T掉)

posted @ 2020-10-06 19:52  Suzt_ilymtics  阅读(584)  评论(22编辑  收藏  举报