NOIP普及組題解(能有民間資料的三題)
普及組題解pascal版本(能測民間資料的三題)
1.成績(score.cpp/c/pas)
【問題描述】
牛牛最近學習了 C++入門課程,這門課程的總成績計算方法是:
總成績=作業成績×20%+小測成績×30%+期末考試成績×50%
牛牛想知道,這門課程自己最終能得到多少分。
【輸入格式】
輸入檔名為 score.in。
輸入檔案只有 1 行,包含三個非負整數A、B、C,分別表示牛牛的作業成績、小測成績和期末考試成績。相鄰兩個數之間用一個空格隔開,三項成績滿分都是 100 分。
【輸出格式】
輸出檔名為 score.out。
輸出檔案只有 1 行,包含一個整數,即牛牛這門課程的總成績,滿分也是 100 分。
【輸入輸出樣例
score.in
100100 80
score.out
90
【輸入輸出樣例 2】
score.in
60 90 80
score.out
79
【資料說明】
對於 30% 的資料,A=B=0。
對於另外 30% 的資料,A = B = 100。
對於 100% 的資料, 0 ≤ A、B、C ≤ 100 且 A、B、C 都是 10 的整數倍。
題解:垃圾題目,自己去解
var
n,m,i,j,a,b,c:longint;
begin
readln(a,b,c);
m:=a*20 div 100+b*30 div 100+c*50 div 100;
writeln(m);
end.
2. 圖書管理員 (librarian.cpp/c/pas)
【問題描述】
圖書館中每本書都有一個圖書編碼,可以用於快速檢索圖書,這個圖書編碼是一個正整數。
每位借書的讀者手中有一個需求碼,這個需求碼也是一個正整數。如果一本書的圖書編碼恰好以讀者的需求碼結尾,那麼這本書就是這位讀者所需要的。
小 D 剛剛當上圖書館的管理員,她知道圖書館裡所有書的圖書編碼,她請你幫她寫一個程式,對於每一位讀者,求出他所需要的書中圖書編碼最小的那本書,如果沒有他需要的書,請輸出-1。
【輸入格式】
輸入檔名為 librarian.in。
輸入檔案的第一行,包含兩個正整數 n 和 q,以一個空格分開,分別代表圖書館裡書的數量和讀者的數量。
接下來的 n
行,每行包含一個正整數,代表圖書館裡某本書的圖書編碼。
接下來的 q 行,每行包含兩個正整數,以一個空格分開,第一個正整數代表圖書館裡讀者的需求碼的長度,第二個正整數代表讀者的需求碼。
【輸出格式】
輸出檔名為 librarian.out。
輸出檔案有 q 行,每行包含一個整數,如果存在第 i 個讀者所需要的書,則在第 i行輸出第 i 個讀者所需要的書中圖書編碼最小的那本書的圖書編碼,否則輸出-1。
【輸入輸出樣例 1】
librarian.in
5 5
2123
1123
23
24
24
2 23
3 123
3 124
2 12
2 12
librarian.out
23
1123
-1
-1
-1
【資料規模與約定】
對於 20%的資料,1 ≤ n ≤ 2。
另有 20%的資料,q = 1。
另有 20%的資料,所有讀者的需求碼的長度均為 1。
另有 20%的資料,所有的圖書編碼按從小到大的順序給出。
對於 100%的資料,1 ≤ n ≤ 1,000,1 ≤ q ≤ 1,000,所有的圖書編碼和需求碼均不超過 10,000,000。
題解:程式碼能力的模擬測試題,咋搞都爆不了(pos要找程式碼也行,不用字串也行)
注意:圖書編碼 mod 10^編碼長度與需求碼比較,我們可以定義變數min來儲存最小編碼!
程式碼:
var
n,m,i,j,x,y,k,v:longint;
a,b:array[1..100000] of string;
t,f:boolean;
min:longint;
begin
readln(n,m);
for i:=1 to n do
readln(a[i]);
for i:=1 to m do
begin
readln(x,y);
str(y,b[i]);
end;
for i:=1 to m do
begin
min:=100000000;
for j:=1 to n do
begin
if length(b[i])>length(a[j]) then
continue;
for k:=1 to length(b[i]) do
if b[i,k]<>a[j,length(a[j])-length(b[i])+k] then
begin
t:=true;
break;
end;
val(a[j],v,y);
if (not t) and (v<min) then
begin
min:=v;
f:=true;
end;
t:=false;
end;
if not f then
writeln(-1) else
writeln(min);
f:=false;
end;
end.
3. 棋盤 (chess.cpp/c/pas)
【問題描述】
有一個m × m的棋盤,棋盤上每一個格子可能是紅色、黃色或沒有任何顏色的。你現在要從棋盤的最左上角走到棋盤的最右下角。
任何一個時刻,你所站在的位置必須是有顏色的(不能是無色的),你只能向上、下、左、右四個方向前進。當你從一個格子走向另一個格子時,如果兩個格子的顏色相同,那你不需要花費金幣;如果不同,則你需要花費 1 個金幣。
另外,你可以花費 2 個金幣施展魔法讓下一個無色格子暫時變為你指定的顏色。但這個魔法不能連續使用,而且這個魔法的持續時間很短,也就是說,如果你使用了這個魔法,走到了這個暫時有顏色的格子上,你就不能繼續使用魔法;只有當你離開這個位置,走到一個本來就有顏色的格子上的時候,你才能繼續使用這個魔法,而當你離開了這個位置(施展魔法使得變為有顏色的格子)時,這個格子恢復為無色。
現在你要從棋盤的最左上角,走到棋盤的最右下角,求花費的最少金幣是多少?
【輸入格式】
輸入檔名為 chess.in。
資料的第一行包含兩個正整數 m,n,以一個空格分開,分別代表棋盤的大小,棋盤上有顏色的格子的數量。
接下來的 n 行,每行三個正整數 x,y,c,分別表示座標為(x,y)的格子有顏色 c。其中 c=1 代表黃色,c=0 代表紅色。相鄰兩個數之間用一個空格隔開。棋盤左上角的座標為(1, 1),右下角的座標為(m, m)。
棋盤上其餘的格子都是無色。保證棋盤的左上角,也就是(1,1)一定是有顏色的。
【輸出格式】
輸出檔名為 chess.out。
輸出一行,一個整數,表示花費的金幣的最小值,如果無法到達,輸出-1。
【輸入輸出樣例 1】
chess.in
5 7
1 1 0
1 2 0
2 2 1
3 3 1
3 4 0
4 4 1
5 5 0
chess.out
8
【輸入輸出樣例 2】
chess.in
5 5
1 1 0
1 2 0
2 2 1
3 3 1
5 5 0
chess.out
-1
【資料規模與約定】
對於 30%的資料,1 ≤ m ≤ 5, 1 ≤ n ≤ 10。
對於 60%的資料,1 ≤ m ≤ 20, 1 ≤ n ≤ 200。
對於100%的資料,1 ≤ m ≤ 100, 1 ≤ n ≤ 1,000。
題解:記憶化的最佳鍛鍊時期,dfs雖然TLE但是,加一個記憶化可能會好一些,(1000*1000*100爆不了把)方法也是有很多的(DP堅決不行,方向天生不夠。。。)
注意:魔法要把變的顏色和當前一樣。
程式碼:
var x,y,k,n,m,i,j:longint; a,f:array[0..1010,0..1010] of longint; procedure try(dq,x,y,ma:longint;cannot:boolean); var i,j:longint; begin if (x>n) or (x<1) or (y>n) or (y<1) then exit; f[x,y]:=dq; if (abs(ma-a[x+1,y])+dq<f[x+1,y]) and (a[x+1,y]<>-1) then try(abs(ma-a[x+1,y])+dq,x+1,y,a[x+1,y],false); if (abs(ma-a[x,y+1])+dq<f[x,y+1]) and (a[x,y+1]<>-1) then try(abs(ma-a[x,y+1])+dq,x,y+1,a[x,y+1],false); if (abs(ma-a[x-1,y])+dq<f[x-1,y]) and (a[x-1,y]<>-1) then try(abs(ma-a[x-1,y])+dq,x-1,y,a[x-1,y],false); if (abs(ma-a[x,y-1])+dq<f[x,y-1]) and (a[x,y-1]<>-1) then try(abs(ma-a[x,y-1])+dq,x,y-1,a[x,y-1],false);//這些很明確了,找條最優路徑計算總分 if (not cannot) then begin if (2+dq<f[x+1,y]) and (a[x+1,y]=-1) then try(dq+2,x+1,y,ma,true); if (2+dq<f[x-1,y]) and (a[x-1,y]=-1) then try(dq+2,x-1,y,ma,true); if (2+dq<f[x,y+1]) and (a[x,y+1]=-1) then try(dq+2,x,y+1,ma,true); if (2+dq<f[x,y-1]) and (a[x,y-1]=-1) then try(dq+2,x,y-1,ma,true);//找到最優路徑+魔法金幣2個 end; end; begin for i:=0 to 1010 do for j:=0 to 1010 do a[i,j]:=-1; readln(n,m); for i:=1 to m do begin readln(x,y,k); a[x,y]:=k; end; for i:=0 to n+1 do for j:=0 to n+1 do f[i,j]:=988; try(0,1,1,a[1,1],false); if f[n,n]=988 then writeln(-1) else//如果無法通過 writeln(f[n,n]); end.
相關推薦
NOIP普及組題解(能有民間資料的三題)
普及組題解pascal版本(能測民間資料的三題) 1.成績(score.cpp/c/pas) 【問題描述】 牛牛最近學習了 C++入門課程,這門課程的總成績計算方法是: 總成績=作業成績×20%+小測
NOIP2018提高組題解(附填數遊戲logn做法)
總體來說,Day1的3題非常水,Day2的難度卻飆升到一定境界了……然後我就GG了…… T1 鋪設道路 題目連結 這道題一眼原題,顯然,如果 d
全排列(洛谷1061 Jam的計數法or NOIP 2006 普及組 第三題)
div 順序 pre highlight 格式 其中 字符 是個 true Jam是個喜歡標新立異的科學怪人。他不使用阿拉伯數字計數,而是使用小寫英文字母計數,他覺得這樣做,會使世界更加豐富多彩。 在他的計數法中,每個數字的位數都是相同的(使用相同個數的字母),英文字母按
博弈論(noip普及組2010第四題 三國遊戲)
三國 勝利 沒有 blog hang max efi () turn 小涵很喜歡電腦遊戲,這些天他正在玩一個叫做《三國》的遊戲。 在遊戲中,小涵和計算機各執一方,組建各自的軍隊進行對戰。遊戲中共有 N 位武將(N為偶數且不小於 4),任意兩個武將之間有一個“默
noip普及組2013 車站分級(luogu P1983)
eof 矩陣 oid har 一個 org pac 題目 style 原題鏈接:https://www.luogu.org/problem/show?pid=1983 題目大意:每個車站有一個權值,每一車次始發站與終點站之間如果有不停靠的點,那麽它的權值一定比停靠的點的權值
NOIP普及組板子及注意事項(wyc&&xxy給學弟們的禮物)
轉載至:xxy https://blog.csdn.net/xuxiayang/ 和 wyc https://blog.csdn.net/mr_wuyongcong/ 板子們 //01揹包模版 #include<cstdio> using namespace std
[NOIP] 2018 普及組題解
目錄 一、題解 1、T1(title) 2、T2(fight) 3、T3(bus) 4、T4(tree) 二、總結 三、程式碼 1、T1(title) 2、T2(fight) 3、T3(bus) 4、T4(tree) 一
『NOIP普及組模擬考試題解』
1. 水水の題 [問題描述] 嗯……水水的題。 ti。梯。電梯? emmmmm…… 那麼,有一座電梯,它上升一層需要 6 秒鐘,下降一層需要 4 秒鐘,如果 要讓它停下,它會停 5 秒鐘。 現在告訴你,它要按順序到達然後停靠的 N 個樓層,求它需要的時間。 電
2016.10.05【初中部 NOIP普及組 】模擬賽題解
這次比賽又翻車了....... T1 這道題一開始以為是一道大水題,格外簡單:把分子乘起來,把分母也乘起來,然後約分。但看到資料後,發現這樣根本不行:一千個數,最大不超過一千(就是999),最大的積就
【NOIP普及組】2016年模擬考試(11.5)——火柴棒等式
一、火柴棒等式(equation.cpp) 時間限制: 1 Sec 記憶體限制: 128 MB 題目描述 給你n根火柴棍,你可以拼出多少個形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼
noip普及組2004 火星人
簡單 第一個 fst 範圍 namespace while 限制 mut 這樣的 火星人 描述 人類終於登上了火星的土地並且見到了神秘的火星人。人類和火星人都無法理解對方的語言,但是我們的科學家發明了一種用數字交流的方法。這種交流方法是這樣的,首先,火星人把一個非常大的數字
noip普及組2004 FBI樹
length name 組成 clas turn line fib 遍歷 bool FBI樹 描述 我們可以把由“0”和“1”組成的字符串分為三類:全“0”串稱為B串,全“1”串稱為I串,既含“0”又含“1”的串則稱為F串。 FBI樹是一種二叉樹1,它的結點類型也包括F結點
noip普及組2007 紀念品分組
spa 滿足 格式 oca mes logs pac syn 相對 紀念品分組 描述 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得 的紀念品價值相對均衡,他要把購來的紀念品根據價格進行分組,但每組最多只能包括兩件紀念品, 並且每組紀念品
擺花(NOIP2012 普及組第三題)
數據規模 .cn ostream .com col tdi int png namespace 問題描述 小明的花店新開張,為了吸引顧客,他想在花店的門口擺上一排花,共m盆。通過調查顧客的喜好,小明列出了顧客最喜歡的n種花,從1到n標號。為了在門口展出更多種花,規定第i
海港(NOIP2016 普及組第三題)
thml 其中 統計 滿足 noip 記錄 數量 所有 遞增 描述 小K是一個海港的海關工作人員,每天都有許多船只到達海港,船上通常有很多來自不同國家的乘客。 小K對這些到達海港的船只非常感興趣,他按照時間記錄下了到達海港的每一艘船只情況;對於第i艘到達的船,他記錄了這艘船
求和(NOIP2015 普及組第三題)
裏的 -h 特殊 滿足 出現次數 https ber syntax 條件 描述 一條狹長的紙帶被均勻劃分出了 n 個格子,格子編號從 1 到 n。每個格子上都染了一種顏色color_icolori?(用[1,m]當中的一個整數表示),並且寫了一個數字number_inumb
瑞士輪(NOIP2011 普及組第三題)
輸入 編號 -h 羽毛球 關心 noip2011 number 一個 之前 背景 在雙人對決的競技性比賽,如乒乓球、羽毛球、國際象棋中,最常見的賽制是淘汰賽和循環賽。前者的特點是比賽場數少,每場都緊張刺激,但偶然性較高。後者的特點是較為公平,偶然性較低,但比賽過程往往十分冗
導彈攔截(NOIP2010 普及組第三題)
試驗 line 成功 .org 階段 這樣的 研發 技術分享 計算 描述 經過11 年的韜光養晦,某國研發出了一種新的導彈攔截系統,凡是與它的距離不超過其工作半徑的導彈都能夠被它成功攔截。當工作半徑為0 時,則能夠攔截與它位置恰好相同的導彈。但該導彈攔截系統也存在這樣的缺陷