每天一個爆零小技巧(持續更新


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

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掉)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM