提高組
\[\text
\]求:
\[\sum\limits^_st(i)
\]\(st(i)=i\) 的約數個數。
\(l \leq r \leq 10^7\)
並不知道怎麼推公式,所以就暴力直接跑。
時間複雜度:
\[\sum\limits^_\frac
\]怎麼辦,大概是 \(1.6 \times 10^8\)。況且我還用了 \(pascal\)。
後面想到一種卡常方法,只要不開陣列就可以了。\(1400+ms\ ->\ 800ms\)。
預計得分: \(100pts\)。
實際得分: \(100pts\)。
// t1
var i,j,s,t:longint;
ans:int64;
begin
read(s,t);
for i:=2 to t do
begin
j:=i; while j<=t do begin if (j>=s) then inc(ans); inc(j,i); end;
end;
writeln(ans+t-s+1);
end.
\[\text
\]給你乙個序列,每乙個位置有多種顏色,要求求乙個最小的完整的序列且包含所有顏色。序列很長, \(2^\)。
考慮到這種東西可以用佇列來求,然後我就離散化一下就好了。
預計得分: \(100pts\)。
實際得分: \(0pts\)。(原因竟然是沒有輸出)
// t2
uses math;
var num,node:array[-1..2100000] of int64;
bucket:array[-1..10000] of longint;
n,m,k,p,tail,he,ta,kind,ans:int64;
i,j:longint;
procedure swap(var x,y:int64);var t:longint; begin t:=x; x:=y; y:=t; end;
procedure sort(l,r:longint);
var i,j,s:longint;
begin
i:=l; j:=r; s:=num[(l+r) >> 1];
repeat
while num[i]s do dec(j);
if i<=j then
begin
swap(num[i],num[j]);
swap(node[i],node[j]);
inc(i); dec(j);
end;
until i>=j;
if il then sort(l,j);
end;
begin
read(n,m); tail:=0; ans:=maxlongint*888; num[0]:=-1;
for i:=1 to m do
begin
read(k);
for j:=1 to k do begin read(p); inc(tail); num[tail]:=p; node[tail]:=i; end;
end;
sort(1,tail); kind:=0; he:=0;
for i:=1 to tail do
begin
if bucket[node[i]]=0 then inc(kind); inc(bucket[node[i]]);
while kind>=m do
begin
inc(he); dec(bucket[node[he]]);
if bucket[node[he]]=0 then dec(kind);
ans:=min(ans,num[i]-num[he]);
end;
end;
writeln(ans);
end.
\[\text
\]給你乙個矩陣(\(n \times n\)),有一些障礙和空地,讓你求移走 \(k\) 個障礙以後兩個空地之間的最長距離。\(n \leq 3\times 10\)。
只需要求出乙個座標點 \(x,y\) 到另乙個座標點 \(l,r\) 經過的障礙個數就可以了。偷懶用了 \(floyd\)。
這是神馬情況:
預計得分 : \(50\)~\(80pts\)。
實際得分 : \(0pts\)。
// t3
uses math;
var id:array[-1..122,-1..122] of longint;
table:array[-1..122,-1..122] of longint;
i,j,n,m,k,l,r,num,tmp,node:longint;
s:string;
ans:real;
function judge(x,y:longint):boolean;
begin
if (x=0)or(y=0)or(x=n+1)or(y=m+1) then exit(false); exit(true);
end;
function disq(l,r,x,y:longint):real;
begin
l:=(l-x)*(l-x); r:=(r-y)*(r-y); exit(sqrt(l+r));
end;
procedure link(x,y,sum:longint);
begin
table[x,y]:=max(table[x,y],sum); table[y,x]:=max(table[x,y],max(table[y,x],sum));
end;
begin
for i:=1 to 31 do for j:=1 to 31 do table[i,j]:=-maxlongint div 8333;
readln(n,m,tmp); node:=n*m; num:=0; ans:=-maxlongint div 8333;
for i:=1 to n do for j:=1 to m do begin inc(num); id[i,j]:=num; end;
for i:=1 to n do
begin
readln(s);
for j:=1 to m do
begin
val(s[j],k);
if k=1 then
begin
for k:=1 to node do link(k,id[i,j],1); continue;
end;
if judge(i-1,j) then link(id[i-1,j],id[i,j],0);
if judge(i+1,j) then link(id[i+1,j],id[i,j],0);
if judge(i,j-1) then link(id[i,j-1],id[i,j],0);
if judge(i,j+1) then link(id[i,j+1],id[i,j],0);
end;
end;
for k:=1 to node do
for i:=1 to node do
for j:=1 to node do
begin
table[i,j]:=min(table[i,j],table[i,k]+table[k,j]);
end;
for i:=1 to n do
for j:=1 to m do
for l:=1 to n do
for r:=1 to m do
begin
if table[id[i,j],id[l,r]]>tmp then continue;
ans:=max(ans,disq(i,j,l,r));
end;
writeln(ans:0:6);
end.
\[\text
\]給你乙個圖,然後讓你求有多少種方法可以從 \(1 -> n\) 號點且用時為 \(t\)。
不會,直接爆搜。
預計得分 : \(30pts\)。
實際得分 : \(30pts\)。
// t4
var table:array[-1..11,-1..11] of longint;
i,j,n,m,ans:longint;
s:string;
procedure dfs(x,dis:longint);
var i:longint;
begin
if dis>m then exit;
if (dis=m)and(x=n) then begin inc(ans); exit; end;
for i:=1 to n do if (table[x,i]<>0) then dfs(i,dis+table[x,i]);
end;
begin
readln(n,m);
for i:=1 to n do
begin
readln(s);
for j:=1 to n do val(s[j],table[i,j]);
end;
dfs(1,0);
writeln(ans mod 2009);
end.
總結:
殺馬特
萬惡的英語
entity en ti ty ent t n.實體 本質 存在 attribute at trib ute tr bju t n.屬性 標誌,象徵 特質,特性 定語 v.歸於,屬於 perspective per spec tive p r spekt v p s n.遠景,透視,看法 take ...
萬惡的英語
entity en ti ty ent t n.實體 本質 存在 attribute at trib ute tr bju t n.屬性 標誌,象徵 特質,特性 定語 v.歸於,屬於 perspective per spec tive p r spekt v p s n.遠景,透視,看法 take ...
萬惡的中介
中介者模式 鬥地主 using system.collections.generic region 主程式 public class 鬥地主 endregion 乙個牌局 中介者 public class mediator 倍率 public int multiple 加入 public bool ...