每天一个爆零小技巧(持续更新
摘要:感谢各位神仙为本文提供示范操作
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掉)