日常訓練 Equation(HDU 5937)

2022-08-28 12:30:08 字數 1585 閱讀 5713

時隔乙個月之後來補題。說寫掉的肯定會寫掉。

題意是這樣的:給1~9這些數字,每個數字有\(x_i\)個,問總共能湊成多少個不同的等式\(a+b=c\)(\(a,b,c\)均為1位,\(1+2=3\)和\(2+1=3\)視為不同等式)?

這題的搜尋稍微有一些技巧:先暴力再搜尋,而不是起手就搜尋。怎麼個暴力呢?把所有能夠構成\(a+b=c\)的情況先全部窮舉出來,然後看先有的這些bricks的數目能不能夠實現這些情況——這就是基礎搜尋了。兩種情況:a)當前情形能夠用,答案+1;b)當前情況無效,遍歷下乙個,答案不變。

然後就沒有然後了,過了.jpg

場上竟然隊伍沒幾個寫這個的。。。被帶榜了啊

/*

* filename: hdu5937.cpp

* date: 2018-11-11

*/#include #define inf 0x3f3f3f3f

#define pb emplace_back

#define mp make_pair

#define fi first

#define se second

#define rep(i,a,b) for(reptype i=(a); i<=(b); ++i)

#define per(i,a,b) for(reptype i=(a); i>=(b); --i)

#define zero(x) memset(x, 0, sizeof(x))

#define ms(x,y) memset(x, y, sizeof(x))

#define all(x) (x).begin(), (x).end()

#define quickio \

ios::sync_with_stdio(false); \

cin.tie(0); \

cout.tie(0);

#define debug(...) fprintf(stderr, __va_args__), fflush(stderr)

using namespace std;

using pi=pair;

using reptype=int;

using ll=long long;

using ld=long double;

using ull=unsigned long long;

struct node

};vectorvec;

void init()

int brick[15],ans=0;

void dfs(int pnt, int nans)

if(nans+vec.size()-pnt<=ans) return;

int x=vec[pnt].x,

y=vec[pnt].y,

z=vec[pnt].z;

if(brick[x]>0 && brick[y]>0 && brick[z]>0)

dfs(pnt+1,nans); // this is important!

}int

main()

return 0;

}

日常訓練 壓縮

巨大的文字往往令人頭疼,特別是文字內容有大量重複的情況下,巨大的文字不便於運輸和閱讀,於是我們提出了noip nonsense obivous index pattern 荒謬的顯然索引法 一種 有效的 壓縮文字的方法。noip壓縮後的格式很特別,乙個文字壓縮後由若干個單元組成,每個單元由3部分組成...

日常訓練 Tree

j 對於h u j 時間複雜度的證明也是比較經典了,每次列舉的是sz eu s zev 相當於每次從a,b 中各任選一點,它們的lc a 為 u 這樣的點對列舉不會重複,因此總的時間複雜度為o n2 include include include include include using name...

日常訓練 mod

給定 p 1,p 2,p n,b 1,b 2,b m 求滿足 x mod p 1 equiv a 1,x mod p 2 equiv a 2,x mod p n equiv a n 的 x 對 b 1,b 2,b m 取模的結果.第一行兩個整數 n,m 接下來 n 行,每行有乙個整數 a i 接下來...