usaco這個東西,有很多大牛已經「通關」了,還有的大牛有三天做了兩大章的事蹟,像我這樣的小菜,就慢慢從1.1往後來吧
1.1.1 ride
這個是第一題,純水,但是因為不知道usaco對輸出的回車符敏感,必須用writeln,所以交了好多次才ac,唯一注意的是關於乘的變數別忘了初始化成1
program ride;
varfin, fout: text;
a,b,i,t:longint;
s:string;
begin
assign(fin, 'ride.in'); reset(fin);
assign(fout, 'ride.out'); rewrite(fout);
a:=1;b:=1;
readln(fin,s);
for i:=1 to length(s) do
a:=(ord(s[i])-64)*a;
read(fin,s);
for i:=1 to length(s) do
b:=(ord(s[i])-64)*b;
if (a mod 47)=(b mod 47) then
writeln(fout,'go')
else
writeln(fout,'stay');
close(fout);
end.
1.1.2 gift1
純水,看清題義,讀入以後取模算一下就完了,一次ac
program gift1;
varmo,ng,np,i,j,k,f,b:integer;
t:string;
name:array[0..10] of string;
r,g:array[0..10] of integer;
begin
assign(input,'gift1.in');
assign(output,'gift1.out');
reset(input);
rewrite(output);
readln(np);
for i:=1 to np do
readln(name[i]);
for i:=1 to np do begin
readln(t);
for j:=1 to np do
if t=name[j] then
f:=j;
readln(mo,ng);
if ng<>0 then begin
g[f]:=mo-(mo mod ng);
b:=mo div ng;
end;
for j:=1 to ng do begin
readln(t);
for k:=1 to np do
if t=name[k] then
f:=k;
inc(r[f],b);
end;
end;
for i:=1 to np do
writeln(name[i],' ',r[i]-g[i]);
close(input);
close(output);
end.
1.1.3 friday
以時間線模擬就行了,說是不要提前做好資料,所以我盡量不用任何已知的變數,寫了個函式計算一天加上n天是星期幾。。。一次ac
program friday;
vara,i,j,k,n,f,tt:integer;
r:array[1..7] of integer;
function p(x,b:integer):integer;
var t:integer;
begin
t:=b mod 7;
p:=x+t;
if p>7 then
p:=p mod 7
end;
begin
assign(input,'friday.in');
assign(output,'friday.out');
reset(input);rewrite(output);
readln(n);
a:=1;
for i:=1900 to 1900+n-1 do begin
f:=0;
if (i mod 400)=0 then
f:=1
else
if ((i mod 100)<>0) and ((i mod 4)=0) then
f:=1;
for j:=1 to 12 do begin
tt:=p(a,12);
inc(r[tt]);
if (j=4) or (j=6) or (j=9) or (j=11) then
a:=p(a,30);
if (j=1) or (j=3) or (j=5) or (j=7) or (j=8) or (j=10) or (j=12) then
a:=p(a,31);
if j=2 then begin
if f=1 then
a:=p(a,29);
if f=0 then
a:=p(a,28);
end;
end;
end;
for i:=6 to 7 do
write(r[i],' ');
for i:=1 to 4 do
write(r[i],' ');
writeln(r[5]);
close(output);
end.
1.1.4 beads
這個題的題義翻譯的有點問題,但是基本上按他說的列舉就行了,沒有用題解說的複製串的方法,而是寫了乙個函式來求位置(既到端自動跳到另一端),注意資料範圍,不能用string存。特殊情況是顏色全同(記錄是否收集過),第乙個是萬能珠(題義其實是白色不算一種單獨的顏色,把它變成第乙個遇到的顏色),一次ac
program beads;
vars:array[0..350] of char;
t:array[0..350] of integer;
f,max,n,i,l,r,st,fl,c:integer;
fr:char;
function get(x,a:integer):integer;
begin
if a=1 then begin
get:=x+1;
if get>n then
get:=1;
end;
if a=0 then begin
get:=x-1;
if get<1 then
get:=n;
end;
end;
begin
assign(input,'beads.in');
assign(output,'beads.out');
reset(input);
rewrite(output);
readln(n);
for i:=1 to n do
read(s[i]);
for i:=1 to n do begin
r:=i;l:=i-1;f:=0;st:=0;c:=0;
fillchar(t,sizeof(t),0);
if i=1 then l:=n;
fr:=s[r];
while (t[r]=0) and (st=0) do begin
if s[r]='w' then begin
inc(c);t[r]:=1;r:=get(r,1);continue;
end;
if s[r]<>fr then begin
if fr='w' then begin
fr:=s[r];
inc(c);t[r]:=1;r:=get(r,1);
continue;
end;
st:=1;
continue;
end;
inc(c);t[r]:=1;r:=get(r,1);
end;
fr:=s[l];st:=0;
while (t[l]=0) and (st=0) do begin
if s[l]='w' then begin
inc(c);t[l]:=1;l:=get(l,0);continue;
end;
if s[l]<>fr then begin
if fr='w' then begin
fr:=s[l];
inc(c);t[l]:=1;l:=get(l,0);
continue;
end;
st:=1;
continue;
end;
inc(c);t[l]:=1;l:=get(l,0);
end;
if c>max then max:=c;
end;
writeln(max);
close(output);
end.
USACO 1 1貪婪的送禮者題解
又過了一道大水題。這道題目並不是特別難,如果用了map結構就很簡單了。但是有幾個地方比較坑。這樣他預先準備的錢不一定會送出。所以你懂得 還有乙個地方就是有可能這個人不送給別人錢,那麼這種情況就要continue掉,要不然求平均數時會因分母變0而報錯 最後我們來講一下map用法 首先我們要用map標頭...
USACO 1 1 破碎的項鍊
description 你有一條由n個紅色的,白色的,或藍色的珠子組成的項鍊 3 n 350 珠子是隨意安排的。這裡是 n 29 的二個例子 r 代表 紅色的珠子 b 代表 藍色的珠子 w 代表 白色的珠子 第一和第二個珠子在中已經被作記號。brbrrrbbbrrrrrbrrbbrbbbbrrrrb...
我理解的程式安裝和解除安裝過程
我的個人理解 其實桌面軟體就是檔案 登錄檔值。通過登錄檔的值索引到相應的檔案,然後載入檔案,實現程式執行。安裝的過程,就是把檔案copy到對應的目錄,然後寫登錄檔值 新增索引 解除安裝的過程,就是把登錄檔值設定為無效或刪掉,然後依次刪掉檔案系統的檔案。那麼,程式出錯,就是索引無法對應 比如找不到檔案...