程式設計思維與實踐 CSP M1補題

2021-10-04 03:36:53 字數 3717 閱讀 5053

題目描述

咕咕東是個貪玩的孩子,有一天,他從上古遺跡中得到了乙個神奇的圓環。這個圓環由字母表組成首尾相接的環,環上有乙個指標,最初指向字母a。

咕咕東每次可以順時針或者逆時針旋轉一格。例如,a順時針旋轉到z,逆時針旋轉到b。咕咕東手裡有乙個字串,但是他太笨了,所以他來請求你的幫助,問最少需要轉多少次。

輸入只有一行,是乙個字串。

輸出最少要轉的次數。

zeus

1、有兩種轉動方案,順時針和逆時針,每次轉動算出這兩種方案需要的次數,取少的乙個方案

2、若後乙個小於前乙個

順時針 m = start - s[i]

逆時針 n = s[i]+26-start

若前乙個小於後乙個

順時針 n =start+26-s[i]

逆時針 m =s[i]-start

3、時間複雜度o(n)

#include

#include

#include

#include

using

namespace std;

intmain()

else

start = s[i]

;int min = m < n ? m : n;

number +

= min;

} cout << number << endl;

}

題目描述

咕咕東考試周開始了,考試周一共有n天。他不想考試周這麼累,於是打算每天都吃頓好的。他決定每天都吃生煎,咕咕東每天需要買aia_iai​個生煎。但是生煎店為了刺激消費,只有兩種購買方式:

①在某一天一次性買兩個生煎。

②今天買乙個生煎,同時為明天買乙個生煎,店家會給乙個券,第二天用券來拿。

沒有其餘的購買方式,這兩種購買方式可以用無數次,但是咕咕東是個節儉的好孩子,他訓練結束就走了,不允許訓練結束時手裡有券。咕咕東非常有錢,你不需要擔心咕咕東沒錢,但是咕咕東太笨了,他想問你他能否在考試周每天都能恰好買ai​個生煎。

輸入兩行,第一行輸入乙個正整數n (1<=n<=100000),表示考試周的天數。

第二行有n個數,第i個數 ai(0<=ai<=10000,表示第i天咕咕東要買的生煎的數量。

如果可以滿足咕咕東奇怪的要求,輸出"yes",如果不能滿足,輸出「no」。(輸出不帶引號)

樣例輸入1

41 2 1 2

樣例輸出1

yes樣例輸入2

31 0 1

樣例輸出2

no1、如果最後的quan不為0,則輸出「no」、或者在運算過程**現第i天要買的生煎數a[i]小於剩下的quan的數。

2、有題目得出,每天有三種買法,不買,一次買兩個和一次買乙個並獲得乙個券,券只可讓明天免費得乙個,為了讓最後一天不能剩券,為此我們應當盡可能的少使用第三種選擇,因為券的使用期是明天,明天必須用完,每種購買方式在當天使用次數是無限的,所以只要用每天要買的生煎數量a[i]-quan,如果剩餘數量是雙數則全部用第二種買法,剩餘quran=0,若為雙數則一次用三種買法剩下的全部用第二種買法,剩餘quan =1,可由(a[i]-quan)%2得到。然後看最後剩餘quan的數量,若某天出現a[i]-quan <0則說明前一天的quan在這天用不完,不滿足題意,直接輸出no

include

using

namespace std;

intmain()

quan =

(a[i]

- quan)%2

;}if(quan !=

0) res=1;

if(res ==

0) cout <<

"yes"

<< endl;

else

if(res ==

1)cout <<

"no"

<< endl;

return0;

}

一、題目描述

時間與記憶體限制 1000ms 2632144kb

眾所周知,瑞神已經達到了cs本科生的天花板,但殊不知天外有天,人外有苟。在浩瀚的宇宙中,存在著一種叫做苟狗的生物,這種生物天生就能達到人類研究生的知識水平,並且天生擅長csp,甚至有全國第一的水平!但最可怕的是,它可以發出宇宙射線!宇宙射線可以摧毀人的智商,進行降智打擊!

宇宙射線會在無限的二維平面上傳播(可以看做乙個二維網格圖),初始方向預設向上。宇宙射線會在發射出一段距離後**,向該方向的左右45°方向**出兩條宇宙射線,同時威力不變!宇宙射線會** 次,每次**後會在**方向前進ai個單位長度。現在瑞神要帶著他的小弟們挑戰苟狗,但是瑞神不想讓自己的智商降到普通本科生zjm那麼菜的水平,所以瑞神來請求你幫他計算出共有多少個位置會被"降智打擊"。

1、輸入第一行包含乙個正整數 n(n<=30),表示宇宙射線會**n 次

2、第二行包含n個正整數a1,a2···an ,第ai (ai<=5)個數表示第 i次**的宇宙射線會在它原方向上繼續走多少個單位長度

輸出乙個數ans ,表示有多少個位置會被降智打擊

44 2 2 3

1、用二維陣列a記錄,每到乙個點,檢查是否到達過,未到達過則打上標記。

2、用另外乙個四維陣列b記錄所有要**的位置和下一次**方向

3、使用dfs,每次先選擇向右遍歷

向上——>右上——>向右——>右下——>向下——>左下——>向左——>左上——>向上

畫出圖來就是乙個正八邊形。

這個8個方向構成迴圈,是我們確定**方向的手段。

後面對左側**進行討論時,也是這樣乙個正八邊形,只是起點不同,終點不同,前後相接的次序維持不變。

一般,我們dfs時都有設2個陣列:dx、dy,用來遍歷某個位置所有相鄰位置。

那麼,這裡我們有8個相鄰元素,並且注意!因為**方向有規律有序改變,所以dx、dy的內容也要符合這種變化順序!

每次我們用四維陣列裡記錄的int型與dx、dy順序結合起來判斷。

4、某個點已經**過,則不要再從這個點**了。因為如果現在的情況以前遇到過,那麼再繼續下去也和以前的經歷完全一樣。

#include

using

namespace std;

int dx[8]

=;int dy[8]

=;int a[

500]

[500]=

;//判斷頂點是否到達過

int b[

500]

[500][

30][8

]=;//判斷定點是**過

int number =

0, n =0;

int state[30]

=;oid dfs

(int x,

int y,

int num,

int dr)

}int nextx = x + dx[dr]

* state[num]

;int nexty = y + dy[dr]

* state[num]

;int nextdire =

(dr +1)

%8;dfs

(nextx, nexty, num +

1, nextdire)

;//下一點右側方向**

nextdire =

(dr +7)

%8;dfs

(nextx, nexty, num +

1, nextdire)

;//下一點左側方向**}}

intmain()

程式設計思維與實踐 CSP M1 補題

a 咕咕東的奇遇 題意咕咕東是個貪玩的孩子,有一天,他從上古遺跡中得到了乙個神奇的圓環。這個圓環由字母表組成首尾相接的環,環上有乙個指標,最初指向字母a。咕咕東每次可以順時針或者逆時針旋轉一格。例如,a順時針旋轉到z,逆時針旋轉到b。咕咕東手裡有乙個字串,但是他太笨了,所以他來請求你的幫助,問最少需...

程式設計思維與實踐 CSP M1補題

思路 這一題沒有太多難度,就是模擬實際的轉盤,運用好模運算,注意好細節即可。include char input 20000 char table 27 int main int word 0 int needle 0 int count 0 while input word 0 else word...

程式設計思維與實踐CSP M1 補題

題目描述 咕咕東是個貪玩的孩子,有一天,他從上古遺跡中得到了乙個神奇的圓環。這個圓環由字母表組成首尾相接的環,環上有乙個指標,最初指向字母a。咕咕東每次可以順時針或者逆時針旋轉一格。例如,a順時針旋轉到z,逆時針旋轉到b。咕咕東手裡有乙個字串,但是他太笨了,所以他來請求你的幫助,問最少需要轉多少次。...