程式設計 CSP M1 補題

2021-10-03 21:41:43 字數 3920 閱讀 5690

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

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

輸出格式輸出最少要轉的次數。

樣例輸入

zeus
樣例輸出

18
minlen為計算兩個字母a、b的距離。對於除a=b、(a+13)%26=b之外的其他情況,讓b成為ascll碼較大的那個字母,若b-a為正,則返回b-a,否則返回26-(b-a)。

#include

#include

#include

using

namespace std;

intminlen

(char a,

char b)

//從a到b最短路徑

if(b>a)

}int

main()

咕咕東考試周開始了,考試周一共有n天。他不想考試周這麼累,於是打算每天都吃頓好的。他決定每天都吃生煎,咕咕東每天需要買ai​個生煎。

但是生煎店為了刺激消費,只有兩種購買方式:

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

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

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

輸入格式

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

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

輸出格式

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

樣例

樣例輸入141

212樣例輸出1

yes樣例輸入231

01樣例輸出2

no

第一種購買方式是一次買偶數個生煎,第二種是第一天買奇數個生煎,同時第二天要買的生煎數減一。也就是若有一天的生煎數為奇數,則必須要選擇第二種購買方式。

如此按天數迴圈,若該天需要買的生煎是偶數,可以選擇第一種購買方式全部買完,直接進入第二天。若為奇數,則選擇第二種方式購買乙個生煎,剩下的偶數個生煎用第一種方式購買,同時第二天要買的生煎數減一。迴圈到最後一天,若生煎數為偶數,則成功,否則失敗(因為選擇第二種方式購買後手中有券存留)。

注意,該資料點每天的生煎數最大範圍為10w,故採用while而非用陣列存放每天的生煎數。

#include

#include

#include

using

namespace std;

intmain()

else

if(x%2==

1&&n==0)

if(x%2==

0)t=0;

else

if(x%2==

1)t=1;

}return0;

}

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

宇宙射線會在無限的二維平面上傳播(可以看做乙個二維網格圖),初始方向預設向上。宇宙射線會在發射出一段距離後**,向該方向的左右45°方向**出兩條宇宙射線,同時威力不變!宇宙射線會**n次,每次**後會在**方向前進a個單位長度。

現在瑞神要帶著他的小弟們挑戰苟狗,但是瑞神不想讓自己的智商降到普通本科生zjm那麼菜的水平,所以瑞神來請求你幫他計算出共有多少個位置會被"降智打擊」。

樣例輸入

442

32

樣例輸出

39
以第一次**的第乙個點表示為二維座標(0,1),結構體儲存每個格的座標。每次**都有兩個方向,故可用遞迴實現。**後的走向有八種,可用0~7表示,並用set儲存走過的方格,因為set可以自動去重複,所以可以不用考慮射線走到同乙個格的情況,但是要過載《函式。遞迴時,將射線走過的方格放進set,並按照射線的方向分類討論**後的方向。直到**次數到達n就返回。但是這樣寫完只能40分,剩下的資料點會超時。

又注意到在第六七次的**後,會有大量的在同一**層次、同一方向並處於同一點的情況,這時就不必再遞迴,因為後續**情形已發生過。這樣就不會超時了,可ac。

#include

#include

#include

using

namespace std;

struct coordinate};

int splitlen[40]

;//每次**後還要前進的長度

int count=0;

//答案

int n;

//共**幾次

set thiss;

bool bett[10]

[50][

500]

[500]=

;void

s(coordinate thisco,

int dir,

int num)

num++;s

(thisco,

1,num);s

(thisco,

7,num);}

if(dir==1)

num++;s

(thisco,

0,num);s

(thisco,

2,num);}

if(dir==2)

num++;s

(thisco,

1,num);s

(thisco,

3,num);}

if(dir==3)

num++;s

(thisco,

2,num);s

(thisco,

4,num);}

if(dir==4)

num++;s

(thisco,

3,num);s

(thisco,

5,num);}

if(dir==5)

num++;s

(thisco,

4,num);s

(thisco,

6,num);}

if(dir==6)

num++;s

(thisco,

5,num);s

(thisco,

7,num);}

if(dir==7)

num++;s

(thisco,

6,num);s

(thisco,

0,num);}

}int

main()

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

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

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

題目描述 咕咕東是個貪玩的孩子,有一天,他從上古遺跡中得到了乙個神奇的圓環。這個圓環由字母表組成首尾相接的環,環上有乙個指標,最初指向字母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...