簡體   English   中英

算法:部分網格計數問題

[英]Algorithm : partial grid count problme

在partial grid count problem中,每個點都被標記為1或0。在這種情況下,找到四個角都為1的子網格的數量的問題

每一行都用bitset的形式表示,在查找每一行的同時,通過and操作比較繪制公共列時加上計數。 最后,count(count-1)/2 第一行是a,最后一行是b的子格。

我不明白如何使用公式 count(count-1)/2 獲取子晶格的數量。

  bitset<5> row[5];
  row[0] = (1 << 3) + (1 << 0);
  row[1] = (1 << 3) + (1 << 2);
  row[2] = (1 << 4);
  row[3] = (1 << 3) + (1 << 2) + (1 << 0);
  row[4] = 0;
  int count = 0;
  for (int a = 0; a < 4; a++) {
    for (int b = a + 1; b < 5; b++) {
      int count_row = (row[a] & row[b]).count();
      count += count_row;
    }
  }

  count = count * (count - 1) / 2;

在此處輸入圖像描述

公式N*(N-1)/2的含義是從 1 到 N 的所有數字的總和。

如果你看一行,例如0001110000000000 ,那么會有子集111111 ,它們的總和是 1+2+3,即所有數字 1 到 3 的總和。
我認為這就是文本的意思。

但是,這只計算從左邊開始的子集,不計算中間的單個 1 和右側的單個 1 以及右側的 11。

所以我想我知道這段文字的意思——但我認為它是錯誤的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM