CSP M2模擬補題

2021-10-05 03:47:24 字數 3153 閱讀 1353

解題過程

之前在查set的資料的時候看到過這個題,就是如果存在k則這個資料的不同的數必須在三個或三個以下,如果是三個一下肯定存在k,如果是三個數則需要是乙個等差數列,遇到這個題就很開心,結果乙個點也沒過。因為是多組資料,set沒有清空,根本沒有記住教訓的樣子。

解題過程第一反應是尺取,最後也是這樣做的。用乙個26長的框進行選擇,記錄26個字母的存在狀況到a陣列和框中序列到put陣列,如果出現重複字母則向前移動,如果26個字母均不重複則輸出。輸出時出現?則查詢框中不存在的字母輸出並標記該字母,因為字母按字典序排序所以序列必定是字典序最小。

模擬的時候只過了4個點,因為沒有清空兩個陣列,當時想起了過但是一瞬間就忘了可能是因為寫**很慢所以在著急吧,同樣的錯誤犯了兩次。補題的時候清空了陣列但是在第八個點出現錯誤,發現是字母數的原因,如果是在26位重複會檢測到重複並break但是計數是26個就會進入輸出環節,加了對是否是break結束的判斷然後就過了,有點可惜的一道題。

解題過程模擬的時候就剩一丟丟時間了於是就把題幹的資料用上過了3個點,好像後面的有些資料也可以暴力但是當時沒有時間了……也有想到過等差數列的求和公式但是沒想出來怎麼做,二分就是根本沒有想到。平時作業一直抄模板和遇到困難問同學的報應。

序列的每一部分都是首項為1公差為1的等差數列,所在的位置就是對應的數列和(sn)在該部分的項數(n),序列的每一部分的長度也是乙個等差數列,因為是從題目來看是將數字拆封成個位數的,所以每次位數上公升劃為一段,0-9是公差為1,10-99是公差為2以此類推,在部分中確定數的位置也要這樣。數很多要用二分查詢,先查詢數在哪乙個分段,再尋找這個數在該分段對應的數。

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

long

long ans=

0,mid=0;

long

long

where

(long

long kk)

else}}

long

long

where2

(long

long kk)

else}}

void

func

(long

long l,

long

long r,

long

long mid ,

long

long k)

else

l=mid+1;

}}void

func2

(long

long l,

long

long r,

long

long mid ,

long

long k)

else

l=mid+1;

}}intmain

(int argc,

char

** ar**)

return0;

}

程式設計 CSP M1 補題

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

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

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

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

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