zzulioj 2133 密室逃脫

2021-07-30 16:54:57 字數 1178 閱讀 9907

2133: 密室逃脫

time limit: 1 sec memory limit: 128 mb

submit: 163 solved: 19

submitstatusweb board

description

xor在玩密室逃脫,在某一關中,桌上有乙個一張紙,上面寫著「請根據所給例子求解答案從而獲得密碼」,下面寫了幾個字串「01 10 11」,而答案為「6」,聰明的xor立馬就知道了這是給出一些二進位制數字s,求存在多少對有序二元組(i,j)使得s[i]^s[j] < s[i],現在還有t組資料,每組是n個長度為m的二進位制數字,聰明的xor立馬開始動手求解答案。

input

第一行乙個整數t,表示資料組數。

對於每組資料,首先讀入兩個整數n,m(n*m <= 1000000),接下來為n行,每行為乙個長度為m的01串,表示乙個二進位制數字

output

對於每個資料,輸出乙個整數x,表示二元組數目

sample input

1 3 2

01 10

11 sample output

6自用考慮每個數最高位的 1 的位置,該位置最高位 1 相同的個數 a,貢獻為 a * a,然後加上該位置為1但最高位 1 不是該位置的個數 b,a * (b - a)(因為當x和最高位比自己大的數異或時,x只能放後面),減去相同時的重複算的貢獻~整理下 a * b~

ac**:

#include

#include

#include

using

namespace

std;

const

int k = 1e6 + 10;

typedef

long

long ll;

char s[k];

ll dp[k],a[k],num[k];

int main()

for(int i = 1; i <= n; i++)

num[a[i]]++;

ll ans = 0;

for(int i = 1; i <= m; i++)

ans += (ll)(num[i] * dp[i]);

printf("%lld\n",ans);

}return

0;}

ZZULIOJ 2133 密室逃脫 思維 字典樹

time limit 1 sec memory limit 128 mb submit 391 solved 79 submit status web board xor在玩密室逃脫,在某一關中,桌上有乙個一張紙,上面寫著 請根據所給例子求解答案從而獲得密碼 下面寫了幾個字串 01 10 11 而答...

密室逃脫 dp

題目大意 有n個房間,i和i 1之間有扇門,能被開啟當且僅當第i個房間有ai個人按下按鈕或者第i 1個房間有bi個人按下按鈕。門開啟後人可以雙向通過。按按鈕的人不能移動,一旦放開按鈕門就會關死。現在要求你在每個房間放一些人,使得放的總人數最多,並且不存在一種方案使得第1個房間有至少m個人。n 100...

真人密室逃脫 魔戒

1 找到魔戒,將魔戒放入乙個箱子中間的孔中,箱子即開啟。魔戒一般有磁性,吸附在燈的支架上 2 開啟箱子,取出其中的書籍,根據書籍正面的文字找出人族的那個說明文件,裡面有年數。年數是其中乙個密碼鎖的密碼。書的背面是過215年後,指該年數加215,是另外乙個鎖的密碼。3 密碼開啟後,裡面有書籍卡片,裡面...