2018 ZJU 天梯賽選拔第二場 E

2021-08-15 22:26:48 字數 2278 閱讀 3145

2018 zju 天梯賽選拔第二場 - e

難度大如狗

time limit: 1 second memory limit: 65536 kb

風學長有乙個只包含 「+」 和數字的算式,但是因為調皮的金學長,算式裡的 「+」 全都丟失了。

風學長很難過,你作為他的**,希望你能幫他算出,對於剩下的數字串,有多少種可能的合法算式,並將所有算式之和告訴他,他可能會考慮 bg 你吃黃燜雞。

輸入格式

本題有多組測試資料。第一行有乙個整數 t (1 ≤ t ≤ 100),表示資料組數。

對於每組資料,給定乙個字串 s (1 ≤ |s| ≤ 10),所有的字元都是 『1』 到 『9』,即原算式去掉所有 「+」 號後剩下的數字串。

輸出格式

每組資料輸出一行,代表所有合法算式答案之和。

樣例輸入

1125

樣例輸出

176提示

1251+25=26

12+5=17

1+2+5=8

——>125+26+17+8=176

先介紹我的瞎幾把解法:

#include using namespace std;

#define m int_max

#define n (int)1e6+10

typedef long long ll;

string n;

ll arr[10] = ;

ll cal(string &str)

return temp;

}int main(void)

}

我的思想是傳統遞迴,就是直接寫乙個cal函式,功能是返回乙個字串所有的所有有效算式的和。

例如乙個字串abcde: cal(「abcde」)

那麼等於apow(「bcde」.size()-1, 2) + abpow(「cde」.size()-1, 2)……

之所我會這麼想,是因為我把整個字串劃分成兩部分,左邊是確定的,右邊是待定未分配加號位置的字串

那我所有有效算式裡面,我確定的左邊對結果值的貢獻必然是左邊的值乘以右邊的種類數(2^長度減一)

例如123的種類數就是4(1, 2, 3; 12, 3; 1, 23; 123) 12的種類數就是2(1, 2; 12)

然後遞迴下去就行了

然而時間複雜度很容易看出來,遞迴公式t(n) > t(1) + t(2) + t(3) ……t(n-1) (大於的原因是每次要取子串做atof操作)

也就是說t(n) > 2^n 。。。。可怕,不過n只有10,所以ac還是ac了。。。

在介紹傳統的列舉方法:

#includeusing namespace std;

typedef long long ll;

ll ans;char a[1005];int n;

void dfs(int x,ll sum,ll now)

dfs(x+1,sum,now*10ll+a[x+1]-'0');

dfs(x+1,sum+now,a[x+1]-'0');

}int main()

}

一共n的長度,中間有n-1個位置給你插,你可以選擇插或者不差,分別遞迴下去。

插的話,就是加上now, 遞迴下去。

不插的話,now就等到以後要查的時候加給sum,暫時只是乘個10然後加上下一位

t(n) = 2t(n-1), 剛剛好是t(n) = 2^n;

不過好歹也是e題的一血,還是很佩服寫下這段**的人思維的清晰度的。

最後介紹一種按按每個位的價值算解答的方法:

#include #include #include #include #include using namespace std;

int main(void)

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

}}

這有點像dp,加乙個數就考慮該數對之前已有的數以及答案的貢獻。

例如一開始是1。

現在如果是21,也就是把2放在1的前面,那麼對原本的答案1有什麼影響呢。

很顯然,多了個21, 還多了個2;

也就是說,我多了20, 1翻了一倍,多了個2

注意看b,第一次b是1, 第二次是11, 第三次是112,第四次是1124。

那個t1和我的思路應該是一樣的,也就是多的這個數如果是單獨拿來加,就是乘後面的種類數

所以t1每次乘以二。。。

哎呀講不清楚,突然發現我好像也不太懂的樣子。

等哪天懂了再回來改博文吧。。。複雜度很顯而易見o(n)。

省賽選拔賽 組隊賽第二場

rank 5。2013年通化全國邀請賽的題。比賽時出了2道題,打完之後才知道杭電g 編譯器有問題,d題同樣的 c 能ac,g 一直超時。一開始a題交了好久次才過罰時好多,一著急就亂了,改乙個地方就提交,這個必須改。a hdu 4493 給出12個月的工資,求平均薪水,貌似是因為資料大和浮點數精度問題...

2018 清明第二場

a a題 a bulbs codeforces 615a 模擬出開關的情況即可 ac如下 include include include include include define mm a,b memset a,b,sizeof a define up a,b for int a 1 a b a...

OI賽第二場Reason For Living

小b準備設計施工方案。設計圖是乙個n n個點m m 條邊的圖,小b每次施工可以取圖中乙個還沒有完工的生成森林把它完工。為了加快施工效率,每次取的時候小b都會最大化當前這個生成森林的邊數。請你幫他找出乙個符合要求的施工方案。如果有多個方案,輸出任意一種即可。第一行兩個整數n n,m m 後面m m行,...