USACO 2 2 序言頁碼 MATH

2022-07-22 06:12:14 字數 2725 閱讀 4599

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...