description
一類書的序言是以羅馬數字標頁碼的。傳統羅馬數字用單個字母表示特定的數值,一下是標準數字表:
i 1 l 50 m 1000
v 5 c 100
x 10 d 500
最多3個可以表示為10n的數字(i,x,c,m)可以連續放在一起,表示它們的和:
iii=3
ccc=300
可表示為5x10n的字元(v,l,d)從不連續出現。
除了下乙個規則,一般來說,字元以遞減的順序接連出現:
cclxviii = 100+100+50+10+5+1+1+1 = 268
有時,乙個可表示為10^n的數出現在乙個比它大的數前(i在v或x前面,x在l或c前面,等等)。在這種情況下,數值等於後面的那個數減去前面的那個數:
iv = 4
ix = 9
xl = 40
像xd, ic, 和xm這樣的表達是非法的,因為前面的數比後面的數小太多。對於xd(490的錯誤表達),可以寫成 cdxc; 對於ic(99的錯誤表達),可以寫成xcix; 對於xm(990的錯誤表達),可以寫成cmxc。
給定n(1 <= n < 3,500), 序言的頁碼數,請統計在第1頁到第n也中,有幾個i出現,幾個v出現,等等 (從小到大的順序)。不要輸出並沒有出現過的字元。
比如n = 5, 那麼頁碼數為: i, ii, iii, iv, v. 總共有7個i出現,2個v出現。
input
乙個整數n。
output
每行乙個字元和乙個數字k,表示這個字元出現了k次。字元必須按數字表中的遞增順序輸出。
題解
暴力出正解。
executing...
test 1: test ok [0.000 secs, 340 kb]
test 2: test ok [0.000 secs, 340 kb]
test 3: test ok [0.000 secs, 340 kb]
test 4: test ok [0.000 secs, 340 kb]
test 5: test ok [0.000 secs, 340 kb]
test 6: test ok [0.000 secs, 340 kb]
test 7: test ok [0.000 secs, 340 kb]
test 8: test ok [0.000 secs, 340 kb]
all tests ok.
**
var i,v,x,l,c,d,m,n,k:longint;
procedure
print;
begin
if i<>0
then writeln('i ',i);
if v<>0
then writeln('v ',v);
if x<>0
then writeln('x ',x);
if l<>0
then writeln('l ',l);
if c<>0
then writeln('c ',c);
if d<>0
then writeln('d ',d);
if m<>0
then writeln('m ',m);
end;
procedure
main;
var ii:longint;
begin
for ii:=1
to n do
begin
k:=ii;
while k>0
docase k of
1..3:begin i:=i+1; k:=k-1; end;
4:begin k:=k-4; i:=i+1; v:=v+1; end;
5..8:begin k:=k-5; v:=v+1; end;
9:begin k:=k-9; i:=i+1; x:=x+1; end;
10..39:begin k:=k-10; x:=x+1; end;
40..49:begin k:=k-40; l:=l+1; x:=x+1; end;
50..89:begin k:=k-50; l:=l+1; end;
90..99:begin k:=k-90; x:=x+1; c:=c+1; end;
100..399:begin k:=k-100; c:=c+1; end;
400..499:begin k:=k-400; d:=d+1; c:=c+1; end;
500..899:begin k:=k-500; d:=d+1; end;
900..999:begin k:=k-900; m:=m+1; c:=c+1; end;
else
begin k:=k-1000; m:=m+1; end;
end;
end;
end;
begin
assign(input,'preface.in');
assign(output,'preface.out');
reset(input);
rewrite(output);
readln(n);
main;
print;
close(input);
close(output);
end.
USACO2 2 解題報告
然而只有一道動態規劃的題目。其他三道題都是模擬。難度還是有所增加的。至少在洛谷中又有一道藍題了。usaco 思路 我們會發現羅馬數字中每一位都是獨立的。不會遭到其他位的干擾。例如數字319731 97和113211 32和710871 08,他們的百位都是1 1,但是其他位沒有一樣的,但是百位的表示...
USACO2 2 1 序言頁碼
這題還是挺有意思的 但是會發現,其實每一位的情況都是一樣的,只需要考慮個位的0,1,2,3,4,5,6,7,8,9的情況下,1,5,10的使用情況。然後在兩位數的時候,十位的情況其實和個位一樣,只不過類推到10 50 100的使用上而已。兩位數的個位,依然和個位數的個位情況完全一樣。所以這道題就成了...
USACO22 JAN 做題記錄
暴力題。include includeusing namespace std const int maxk 27 int ans1,ans2 int cnt maxk ok 4 4 string s 4 t 4 int main for int i 1 i 3 i for int j 0 j 3 j...