1. 程式人生 > >NOIP普及組題解(能有民間資料的三題)

NOIP普及組題解(能有民間資料的三題)

普及組題解pascal版本(能測民間資料的三題)

1.成績(score.cpp/c/pas)

【問題描述】

牛牛最近學習了 C++入門課程,這門課程的總成績計算方法是:

總成績=作業成績×20%+小測成績×30%+期末考試成績×50%

牛牛想知道,這門課程自己最終能得到多少分。

【輸入格式】

輸入檔名為 score.in

輸入檔案只有 1 行,包含三個非負整數ABC,分別表示牛牛的作業成績、小測成績和期末考試成績。相鄰兩個數之間用一個空格隔開,三項成績滿分都是 100 分。

【輸出格式】

輸出檔名為 score.out

輸出檔案只有 1 行,包含一個整數,即牛牛這門課程的總成績,滿分也是 100 分。

【輸入輸出樣例

 1

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 ≤ ABC ≤ 100  ABC 都是 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,0001 ≤ 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

資料的第一行包含兩個正整數 mn,以一個空格分開,分別代表棋盤的大小,棋盤上有顏色的格子的數量。

接下來的 n 行,每行三個正整數 xyc,分別表示座標為(xy)的格子有顏色 c。其中 c=1 代表黃色,c=0 代表紅色。相鄰兩個數之間用一個空格隔開。棋盤左上角的座標為(1, 1),右下角的座標為(m, m)

棋盤上其餘的格子都是無色。保證棋盤的左上角,也就是(11)一定是有顏色的。

【輸出格式】

輸出檔名為 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 時,則能夠攔截與它位置恰好相同的導彈。但該導彈攔截系統也存在這樣的缺陷