Skip to content
Logic Formatting

Logic Formatting

B. Rock and Lever 解析(思維)

Posted on 2025 年 1 月 11 日 By jeff

Codeforce 1420 B. Rock and Lever 解析(思維)

今天我們來看看CF1420B
題目連結

題目
給一個數列$a$,求有多少種$(i,j)$使得$i<j$且$a_i&a_j\ge a_i\oplus a_j$

前言

c

想法

觀察到,由於$1&1=1$,$1\oplus1=0$,所以$a_i&a_j$有的$bit$,$a_i\oplus a_j$都不會有。
而繼續觀察到,如果$a_i,a_j$最左邊的$bit$是一樣的(例如都是第$10$個$bit$),那麼$a_i&a_j\ge a_i\oplus a_j$。而如果不一樣,那麼$a_i,a_j$中擁有最左邊的$bit$的那個數字,會造成$a_i&a_j<a_i\oplus a_j$(因為$2^i>\sum\limits_{j=0}^{i-1}2^j$)。

所以只需要從數列左邊看到右邊,每次對於元素$a[i]$,看看前面有多少元素的最左$bit$和$a[i]$一樣即可。

程式碼:

const int _n=1e5+10;  
int t,tt,n,a[_n],cnt[40];  
main(void) {ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);  
  cin>>t;while(t--){  
    memset(cnt,0,sizeof cnt);  
    cin>>n;rep(i,0,n)cin>>a[i];  
    ll ans=0;rep(i,0,n){  
      tt=32-__builtin_clz(a[i]);  
      ans+=cnt[tt];  
      cnt[tt]++;  
    }cout<<ans<<'\n';  
  }  
  return 0;  
}  

標頭、模板請點Submission看
Submission

ojcode codeforceojcode思維

文章導覽

Previous post
Next post

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

近期文章

  • B. Kyoya and Permutation 解析(思維、數論、DP)
  • G. Guess One Character 解析(思維)
  • E. The Road to Berland is Paved With Good Intentions 解析(思維、2-SAT、SCC、拓樸排序)
  • E. Xor-sequences 解析(思維、矩陣快速冪)
  • LeetCode. First Missing Positive 解析(思維)

近期留言

尚無留言可供顯示。

彙整

  • 2025 年 2 月
  • 2025 年 1 月

分類

  • ojcode
©2026 Logic Formatting | WordPress Theme by SuperbThemes