NOIP普及組總結

2021-08-11 02:50:53 字數 4266 閱讀 2902

一些感想

考試,好也罷壞也罷,已經過去,只能反思,不能再來……

題目:問題 a(3502): [noip2017普及組]成績

題目描述

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

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

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

輸入只有1 行,包含三個非負整數a、b、c,分別表示牛牛的作業成績、小測

成績和期末考試成績。相鄰兩個數之間用乙個空格隔開,三項成績滿分都是100 分。

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

樣例輸入

100 100 80

樣例輸出

90**

#includedouble a,b,c,h;

int main()

感受首先我表示真的錯的不應該呀,然後這道題還是因為自己粗心,大意失荊州……簡單的乙個輸入輸出+數學計算,就這樣……-_-#(以為自己錯了,結果沒錯)

問題 b(3503): [noip2017普及組]圖書管理員

題目描述

圖書館中每本書都有乙個圖書編碼,可以用於快速檢索圖書,這個圖書編碼是乙個

正整數。

每位借書的讀者手中有乙個需求碼,這個需求碼也是乙個正整數。如果一本書的圖

書編碼恰好以讀者的需求碼結尾,那麼這本書就是這位讀者所需要的。

小 d 剛剛當上圖書館的管理員,她知道圖書館裡所有書的圖書編碼,她請你幫她寫

乙個程式,對於每一位讀者,求出他所需要的書中圖書編碼最小的那本書,如果沒有他

需要的書,請輸出-1。

輸入第一行,包含兩個正整數n 和q,以乙個空格分開,分別代表圖書館裡

書的數量和讀者的數量。

接下來的 n 行,每行包含乙個正整數,代表圖書館裡某本書的圖書編碼。

接下來的 q 行,每行包含兩個正整數,以乙個空格分開,第乙個正整數代表圖書館

裡讀者的需求碼的長度,第二個正整數代表讀者的需求碼。

輸出有q 行,每行包含乙個整數,如果存在第i 個讀者所需要的書,則在第i

行輸出第i 個讀者所需要的書中圖書編碼最小的那本書的圖書編碼,否則輸出-1。

樣例輸入

5 52123

1123

2324

242 23

3 123

3 124

2 12

2 12

樣例輸出

231123

-1-1

-1**

#include#includeusing namespace std;

int n,q,i,j;

int b[1001],c,s;

int main()

for(j=1;j<=n;j++)

if(b[j]%a==s)

if(j==n+1)

printf("-1\n");

}return 0;

}

感受這道題因為規模比較小,所以直接模擬。y(^o^)y

問題 c(3504): [noip2017普及組]棋盤

題目描述

有乙個m × m的棋盤,棋盤上每乙個格仔可能是紅色、黃色或沒有任何顏色的。你現在

要從棋盤的最左上角走到棋盤的最右下角。

任何乙個時刻,你所站在的位置必須是有顏色的(不能是無色的),你只能向上、下、

左、右四個方向前進。當你從乙個格仔走向另乙個格仔時,如果兩個格仔的顏色相同,那你

不需要花費金幣;如果不同,則你需要花費1 個金幣。

另外,你可以花費2 個金幣施展魔法讓下乙個無色格仔暫時變為你指定的顏色。但這個

魔法不能連續使用,而且這個魔法的持續時間很短,也就是說,如果你使用了這個魔法,走

到了這個暫時有顏色的格仔上,你就不能繼續使用魔法;只有當你離開這個位置,走到乙個

本來就有顏色的格仔上的時候,你才能繼續使用這個魔法,而當你離開了這個位置(施展魔

法使得變為有顏色的格仔)時,這個格仔恢復為無色。

現在你要從棋盤的最左上角,走到棋盤的最右下角,求花費的最少金幣是多少?

輸入第一行包含兩個正整數m,n,以乙個空格分開,分別代表棋盤的大小,棋盤上

有顏色的格仔的數量。

接下來的 n 行,每行三個正整數x,y,c,分別表示座標為(x,y)的格仔有顏色c。

其中c=1 代表黃色,c=0 代表紅色。相鄰兩個數之間用乙個空格隔開。棋盤左上角的座標

為(1, 1),右下角的座標為(m, m)。

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

輸出輸出一行,乙個整數,表示花費的金幣的最小值,如果無法到達,輸出-1。

樣例輸入

5 71 1 0

1 2 0

2 2 1

3 3 1

3 4 0

4 4 1

5 5 0

樣例輸出

8錯誤**

#include#includeint m,n,i;

int a[101][101],f[101][101];

int tz[4][2]=,,,};

void ww(int x,int y,int d,bool p)

}else if(a[tx][ty]==a[x][y]) ww(tx,ty,d,1);

else ww(tx,ty,d+1,1);

}}int main()

memset(f,0x7f,sizeof f);

ww(1,1,0,1);

if(f[m][m]==0x7f7f7f7f)printf("-1");

else    printf("%d",f[m][m]);

}

感受這道題居然第一眼木有思路,可能是因為那絲絲的緊張。於是開始騙分模式,所以成績並不理想。╮(╯▽╰)╭。正確做法,後來就想搜尋+記憶化,that is all.

//某個大牛的**(正確)

#include#include#includeusing namespace std;

const int maxn=500000;

const int inf=int (1e9);

int dis[maxn+5],v[maxn+5],que[maxn+5];

long long dp[maxn+5];

int n,d,k;

bool check(int x)

int p=d-x,q=d+x,s=1,t=0,m=0;

if(x>=d)p=1;

for(int i=1;i<=n;i++)

}while(dis[i]-dis[que[s]]>q&&t>=s)s++;

if(t>=s)dp[i]=max(dp[i],dp[que[s]]+v[i]);

if(dp[i]>=k)return true;

}return false;

}int d_n(int l,int r)

while(l0)s+=v[i];

}if(sd. 跳房子 

【問題描述】

跳房子,也叫跳飛機,是一種世界性的兒童遊戲,也是中國民間傳統的體育遊戲之一。跳房子的遊戲規則如下:

在地面上確定乙個起點,然後在起點右側畫 n 個格仔,這些格仔都在同一條直線上。每個格仔內有乙個數字(整數),表示到達這個格仔能得到的分數。玩家第一次從起點開始向右跳,跳到起點右側的乙個格仔內。第二次再從當前位置繼續向右跳,依此類推。規則規定: 玩家每次都必須跳到當前位置右側的乙個格仔內。玩家可以在任意時刻結束遊戲,獲得的分數為曾經到達過的格仔中的數字之和。

現在小 r 研發了一款彈跳機械人來參加這個遊戲。但是這個機械人有乙個非常嚴重的缺陷,它每次向右彈跳的距離只能為固定的 d。小 r 希望改進他的機械人,如果他花 g 個金幣改進他的機械人,那麼他的機械人靈活性就能增加 g,但是需要注意的是,每次彈跳的距離至少為 1。具體而言,當g <>時,他的機械人每次可以選擇向右彈跳的距離為 d-g, d-g+1, d-g+2,...,d+g-2,d+g-1,d+g;否則(當g ≥ d時),他的機械人每次可以選擇向右彈跳的距離為 1,2,3,...,d+g-2,d+g-1,d+g。

現在小 r 希望獲得至少 k 分,請問他至少要花多少金幣來改造他的機械人。

【輸入格式】

輸入檔名為 jump.in。

第一行三個正整數 n,d,k,分別表示格仔的數目,改進前機械人彈跳的固定距離,以及希望至少獲得的分數。相鄰兩個數之間用乙個空格隔開。

接下來n行,每行兩個正整數

noip2016普及組複賽總結

9點半從紀中出發,大概11點多來到廣州六中。在六中旁邊一家小餐館吃了中餐,那餐廳真心很貴,一盆飯就要20元,我們那桌吃了四 盆.xc 不想買單啦 啦啦啦 然後就來到六中的某個功能室百無聊賴的休息了一會兒,兩點鐘進考場。兩點半 比賽開始,還是先看題.一二兩題太水了,直接開碼,1小時搞定兩題 三點半 仔...

NOIP2018普及組 參賽總結

發現就我只打了這麼一點字,所以再重新發一下 考前 考試前一天晚上一直在看電視 看到了10點還是11點吧,寫了一會兒會兒作業,但我覺得這不是考砸了的理由 誰叫我本來就如此之水 第二天早上很早就起床了,還順便跟外婆還有老媽去小區外面吃了個早餐。然後老媽帶我來了考場,也是在附近萬達吃了飯,走路就花了我差不...

NOIP普及組考試心得

考試小技巧 這有幾個關於博主本人的說明 1.c 選手 2.並不熟悉devc 3.2016普及組300分弱雞 這篇文章講述的是博主本人對於noip考試的幾個心得和技巧 目前只是初稿,一些詳細的事務會補上 1.士力架 巧克力 或曼妥思 糖果 不是開玩笑的,在考試的時候給自己隨手丟一顆有助於提神醒腦 2....