摘要:感謝各位神仙為本文提供示范操作
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掉)