/* 我瘋了 為什麼這麼多篇部落格只有這篇說題目重複率較高 部落格管理裡就這篇前面有個驚嘆號逼死強迫症啊啊啊 */
題目:
輸出:最少需要轉的次數
思路:取模
就是乙個取模的問題。
每一次轉的時候,都是兩個字元之間的比較。除第乙個字元是與 『a』 比較以外,其他的字元都是與後乙個字元進行比較。因此用for迴圈實現累加,但要注意的是第乙個字元需要另行與 『a』 比較,而且for迴圈時只比較到倒數第二個字元。
對於每次需要轉的最小次數,設計turn函式計算每次需要轉的最小次數。設這兩個字元為x,y,那麼x,y的相對位置情況有兩種:
而每次計算的轉的次數就是以下兩種情況的最小值:
第一種情況就是|x-y|,第二種情況是26-max(x,y)+min(x,y)。
總結:1.三目運算子還是挺好用的
2.把一些功能函式封裝,有利於理思路
3.注意事項
① 要有意識地新增標頭檔案,abs()函式的標頭檔案為 cmath 。
②要把問題本質從實際問題中抽象出來,而不是就實際問題背景而解決問題。模測的時候想的太多了,在第一題上花的時間顯然過多。一是因為碼力不足(需要反省),二是因為經驗不足。在後面的學習上要一點點積累起來。
**:
#include
#include
#include
using
namespace std;
intturn
(int x,
int y)
intmain()
題目:
思路:等價
要注意到,如果以第二種購買方法購買n次,若n為偶數,可等價為一天以第一種購買方法購買n/2次,第二天同樣以第一種購買方法購買n/2次;若n為奇數,則等價為一天以第一種方法購買(n-1)/2次後,以第二種購買方式購買一次。所以可等價為第二種購買方式最多購買一次。
所以除第一天以外,每天的生煎數可以由兩個指標來判斷,即吃的生煎數的奇偶性和前一天是否有券。
最後,由於不能有多餘的券,所以對最後一天單獨判斷。
總結:1.題意很重要
模測時題意理解錯誤,以為每天最多只能買2個生煎,但其實兩種購買方式每天都可以用無數次【 那時候還奇怪生煎數怎麼會有1000個 (╯‵皿′)╯︵┻━┻
一定一定要看清題目看懂題意再下手!
**:
#include
using
namespace std;
int n;
int num[
200000];
intmain()
else
}//最後一天
if(quan)
else
return0;
}
題目:
輸出:ans,表示有多少個位置會被降智打擊。
思路:dfs/剪枝
如果直接dfs,因為最多30次**,2的30次方絕對tle,所以必須剪枝。
我先嘗試著第一次**的時候,只記錄乙個方向,通過對稱的式子直接將另半邊的點標記了,但還是不行,畢竟除個2也有2的29次方(つд`)。
換思路。首先思考這樣乙個問題。假設!乙個300×300的二維陣列,每個點都是**點,最多30個不同的長度,一共有8個方向,那麼!300×300×30×8,也才10的6次方都不到,和2的30次方完全沒法比!所以!肯定有重複的**點,而且資料越大,重複的超多。所以!先把所有**的點和點的狀態記下來。把重複的全部去掉。
**的點和點的狀態包括座標x,y,和要前進的長度(由於直接在dfs的時候取前進的長度不是很方便,所以只記錄長度在length陣列中的標號)和前進的方向。
在dfs的時候,順表把經過的點用set儲存下來,因為set自動去重。
其他的處理就很容易了。用常量陣列記錄每個方向的偏移量,再用兩個常量陣列記錄每個方向的**點的**方向。
總結:set結構自動去重。
通過學習大佬的**終於ac了/(ㄒoㄒ)/~~。dfs的剪枝不是那麼容易的事情啊。
**:
#include
#include
using
namespace std;
int n;
int length[50]
;set< pair<
int,
int>
> s;
bool p[
400]
[400][
50][9
];//左上 0,上 1,右上 2,右 3,右下 4,下 5,左下 6,左 7
const
int dx=
;const
int dy=
;//**後的兩個方向
const
int d1=
;const
int d2=
;void
dfs(
int x,
int y,
int len,
int pre)
//位置,長度的標號,方向 );
}dfs
(x,y,len+
1,d1[pre]);
//d1[pre]為**後的乙個方向
dfs(x,y,len+
1,d2[pre]);
//d2[pre]為**後的另乙個方向
}int
main()
程式設計思維與實踐 CSP M1
咕咕東是個貪玩的孩子,有一天,他從上古遺跡中得到了乙個神奇的圓環。這個圓環由字母表組成首尾相接的環,環上有乙個指標,最初指向字母a。咕咕東每次可以順時針或者逆時針旋轉一格。例如,a順時針旋轉到z,逆時針旋轉到b。咕咕東手裡有乙個字串,但是他太笨了,所以他來請求你的幫助,問最少需要轉多少次。輸入只有一...
程式設計思維與實踐 CSP M1 補題
a 咕咕東的奇遇 題意咕咕東是個貪玩的孩子,有一天,他從上古遺跡中得到了乙個神奇的圓環。這個圓環由字母表組成首尾相接的環,環上有乙個指標,最初指向字母a。咕咕東每次可以順時針或者逆時針旋轉一格。例如,a順時針旋轉到z,逆時針旋轉到b。咕咕東手裡有乙個字串,但是他太笨了,所以他來請求你的幫助,問最少需...
程式設計思維與實踐 CSP M1補題
題目描述 咕咕東是個貪玩的孩子,有一天,他從上古遺跡中得到了乙個神奇的圓環。這個圓環由字母表組成首尾相接的環,環上有乙個指標,最初指向字母a。咕咕東每次可以順時針或者逆時針旋轉一格。例如,a順時針旋轉到z,逆時針旋轉到b。咕咕東手裡有乙個字串,但是他太笨了,所以他來請求你的幫助,問最少需要轉多少次。...