今天的比賽 100(枚舉)+40(快排+暴力)+100(廣搜)+30(暴力)=270markdown
題目描述spa
小x想要申請英國劍橋大學,他準備了很長時間,在臨走的一天,意外得知初審沒有過,拒絕的理由居然是體重!!! 小x很沮喪,因而,他作出了一個「喪心病狂」的決定:對他的單詞書裏包含「CAMBRIDGE」中任意一個字母的單詞進行修改。具體方法是這樣的:對於每一個單詞,刪掉其中出如今「CAMBRIDGE」中的字母。
輸入code
有且僅有一行,包含一個有大寫英文字母組成的單詞(長度:3~100)。
輸出input
有且僅有一行,包含一個修改過的單詞。string
樣例輸入it
LOVEio
樣例輸出function
LOVclass
數據範圍限制程序
單詞(長度:3~100)。
不用想暴力過
代碼以下:
var x,y:string;
a:array['A'..'Z']of boolean;
i:longint;
begin
assign(input,'un.in');
assign(output,'un.out');
reset(input);;
rewrite(output);
readln(x);
y:='CAMBRIDGE';
fillchar(a,sizeof(a),true);
for i:=1 to length(y) do a[y[i]]:=false;
x:=upcase(x);
for i:=1 to length(x) do
if a[x[i]]=true then write(x[i]);
close(input);
close(output);
end.
題目描述
小x爲了平復本身悲憤的心情,參加了F7賽車決賽的解說工做。做爲一位優秀的主持人,他想要了解一下參加決賽的N位選手的狀況。通過一番努力,他找到了各位選手前幾站比賽的成績。 決賽就要開始了,比賽規定:第一個到達終點的獲得N分,第二個到達終點的獲得N-1分,以此類推„„最後一個到達終點的獲得1分。並且不會有兩位選手同時到達終點。小x很是忙,因此他想請你幫他統計一下有多少選手有可能成爲總冠軍(以前的成績+決賽成績=總成績,總成績最高者爲總冠軍,總冠軍可能有多位)。
輸入
第一行一個正整數N(3 ≤ N ≤ 300 000),表明參加決賽的選手個數。
接下來N行,每行一個正整數Bi,表明第i位選手以前比賽的成績。
輸出
只有一行包含一個正整數,表明有可能成爲總冠軍的選手個數。
樣例輸入
Input1:
3
8
10
9
Input2:
5
15
14
15
12
14
樣例輸出
Output1:
3
Output2:
4
數據範圍限制
3 ≤ N ≤ 300 000
先快排,再枚舉若是i爲第一,其餘都是最壞的狀況,能不能取得冠軍。
代碼以下:
var x:array[0..300000]of longint;
m,n,i,j,k:longint;
bool:boolean;
procedure qsort(l,r:longint);
var i,j,mid:longint;
begin
if l>r then exit;
i:=l; j:=r;
mid:=x[(l+r) div 2];
repeat
while x[i]>mid do inc(i);
while x[j]<mid do dec(j);
if i<=j then
begin
x[0]:=x[i]; x[i]:=x[j]; x[j]:=x[0];
inc(i); dec(j);
end;
until i>j;
qsort(l,j);
qsort(i,r);
end;
begin
assign(input,'f7.in');
assign(output,'f7.out');
reset(input);
rewrite(output);
readln(n);
for i:=1 to n do readln(x[i]);
qsort(1,n);
m:=n;
for i:=n downto 1 do
begin
if x[i]=x[i+1] then
begin
if bool=false then dec(m);
continue;
end;
k:=1;
bool:=true;
for j:=1 to n do
if i<>j then
begin
if x[j]+k>x[i]+n then
begin
dec(m);
bool:=false;
break;
end
else inc(k);
end;
if bool=true then break;
end;
write(m);
close(input);
close(output);
end.
題目描述
話說小x神祕失蹤了,最後發現是被外星人綁架了,幸虧外星人目前仍是在地球上活動,而且知道外星人不瞭解地球,幸虧,小x身上有無線信號發送裝置,咱們終於肯定了他的位置,必須趕快到那裏去救他。 根據無線信號發送裝置,咱們肯定出一張地圖,爲了儘快尋找到小x,組織把這個光榮而艱鉅的任務便交給了你。編寫程序,經過使用一張地圖幫助研究所肯定從研究所出發找到小x的最短距離。
輸入
第一行爲n(n<=1000)。
第二行爲n*n的地圖(其中0表示通路,1表示死路)。
最後兩行每行有兩個數字,分別表示研究所的座標和小x信號所在的位置。
輸出
一行一個數字k,表示從研究所出發找到小x的最短距離。
樣例輸入
10
0100110100
0001110010
1000000001
1000100011
0000101100
1000001100
1001010011
0000010100
0101010000
1001000001
1 7
10 2
樣例輸出
14
數據範圍限制
(n<=1000)
直接碼廣搜過
代碼以下:
const dx:array[1..4]of longint=(1,-1,0,0);
dy:array[1..4]of longint=(0,0,1,-1);
var a:array[-1..2000,-1..2000]of char;
n,b1,b2,e1,e2,l,tail:longint;
state:array[1..1000000,1..2]of longint;
father:array[1..2000000]of longint;
procedure init;
var i,j:longint;
begin
readln(n);
for i:=1 to n do
begin
for j:=1 to n do read(a[i,j]);
readln;
end;
readln(b1,b2);
readln(e1,e2);
end;
function check(x,y:longint):boolean;
begin
check:=true;
if a[x,y]='1' then check:=false;
if (x>n)or(y>n)or(y<1)or(x<1) then check:=false;
end;
procedure print(x:longint);
begin
if x=0 then exit;
inc(l);
print(father[x]);
end;
procedure bfs;
var head,i:longint;
begin
head:=0; tail:=1; state[1,1]:=b1; state[1,2]:=b2; a[b1,b2]:='1';
father[1]:=0;
repeat
inc(head);
for i:=1 to 4 do
if check(state[head,1]+dx[i],state[head,2]+dy[i]) then
begin
inc(tail);
father[tail]:=head;
state[tail,1]:=state[head,1]+dx[i];
state[tail,2]:=state[head,2]+dy[i];
a[state[tail,1],state[tail,2]]:='1';
if (state[tail,1]=e1)and(state[tail,2]=e2) then
begin
print(father[tail]);
tail:=0;
writeln(l);
halt;
end;
end;
until head>=tail;
end;
begin
assign(input,'findn.in');
assign(output,'findn.out');
reset(input);
rewrite(output);
init;
bfs;
close(input);
close(output);
end.
題目描述
小x的好朋友小y給他出了一道難題,他想讓小x在一個矩陣中找到一個子矩陣,使它的和最大。小x但願你能幫他解決這個問題。
輸入
第一行一個正整數N,M。
如下N行,每行M個整數。
輸出
有且僅有一行,包含一個數,表示所求的最大的和。
保證結果在longint範圍內。
樣例輸入
3 3
2 -1 1
-3 2 -2
0 1 1
樣例輸出
3
數據範圍限制
【數據範圍】
對於30%的數據:1<=N,M<=50
對於60%的數據:1<=N,M<=100
對於100%的數據:1<=N,M<=500
將每一段的值求出來,再枚舉每一種狀況。
代碼以下:
var n,m,i,j,k,max,ans,min:longint;
a,b:array[0..501,0..501]of longint;
begin
assign(input,'mpro.in');
assign(output,'mpro.out');
reset(input);
rewrite(output);
readln(n,m);
for i:=1 to n do
begin
for j:=1 to m do
begin
read(a[i,j]);
b[i,j]:=a[i,j]+b[i-1,j]+b[i,j-1]-b[i-1,j-1];
end;
readln;
end;
ans:=0;
for i:=0 to n-1 do
for j:=i+1 to n do
begin
min:=0;
max:=0;
for k:=1 to m do
begin
max:=b[j,k]-b[i,k]-min;
if max>ans then ans:=max;
if b[j,k]-b[i,k]<min then min:=b[j,k]-b[i,k];
end;
end;
write(ans);
close(input);
close(output);
end.