sdut oj 1704 數字統計問題
昨天晚上學弟問了oj上這個題,群裡說不清楚,就寫個解題報告吧。
題目大意:
中文題目,就不翻譯了-。-
解題思路:
不知道算不算乙個典型的數字dp,反正有點那個意思,感覺確實也可以用記憶話搜尋,兩個差不多的意思。
我找了一下,這個問題好像是演算法設計與實驗題解上面的一道題,別的oj上沒有,所以就在自己oj上做了。
大體的思路就是,對於乙個數字,比如1342,想要求出每乙個數字出自出現的次數,
對於乙個n位的十進位制數,從乙個n位十進位制數的由低到高的第i個數字上,總是連續出現10^i個0,然後是10^i個1……一直到10^i個9,9之後又是連續的10^i個0,這樣迴圈出現。找到這個規律,就可以在常數時間內算出第i個數字上每個數字出現的次數。而在第i個數字上,最後再把前導0的數量去掉就是最後要的答案了。
這樣最大的時間複雜度是數字位數,也就是log10(n)的複雜度,所以就不會超時了,最後跑了0ms。
吐槽一下宿舍的網,實在是太卡了,寫個部落格都這麼費勁。。。。。真蛋疼。。。
具體的可以看**,**中會有部分解釋:
#include #include int a[10], ans[10], len;
char s[10];
int main()
int n = 0;
scanf("%s", s);///以字串輸入 便於統計長度
len = strlen(s);
for(int i = 0; i < len; ++i)
// printf("%d\n", n);
memset(ans, 0, sizeof(ans));
for(int i = 0; i < len; ++i)
while(j < 10)
ans[0] -= a[len-i-1]; ///去掉前導零的數目
// printf("%d\n", ans[0]);
}for(int i = 0; i < 10; ++i)
return 0;
}
數列求和 sdut oj
time limit 1000ms memory limit 32768kb problem description 數列求和是一類常見的問題,本題有一定的代表性 求s a aa aaa aaaa aa aa n位 其中,a的值由鍵盤輸入,位數n也由鍵盤輸入。input 第一行輸入a的值 第二行輸入...
簡單計算 sdut oj
time limit 1000ms memory limit 65536kb problem description 接受從鍵盤輸入的n個整數,輸出其中的最大值 最小值和平均值 平均值為整除的商 input 第一行乙個正整數n n 100 第二行有n個用空格隔開的整數ti 1 i n,0 ti 10...
簡單編碼 sdut oj
time limit 1000ms memory limit 65536kb problem description 將一串文字譯成密碼,密碼的規律是 將原來的小寫字母全部翻譯成大寫字母,大寫字母全部翻譯成小寫字母,數字的翻譯規律如下 0 9 1 8 2 7 3 6 4 5 5 4 6 3 7 2 ...