search by boshi考試總結

2021-08-06 05:04:45 字數 2971 閱讀 3167

學習了高階一些的搜尋演算法,當然考試是免不了的,於是就有了噩夢般的4個小時……

uva11549

uva11212

uva11882

題意

給你乙個n位數作為限定,k作為原數。每次操作將k進行平方,然後取前面n位作為新的k值。

詢問做若干次操作,能得到的最大的k值。

思路

對於本題,什麼時候停止操作是關鍵所在。由於n<=9,顯然直接用bool判重會導致mle,用map就會tle。不過,寫hash我倒是沒有嘗試過,本人太水,hash寫不好……那麼可以用乙個神奇的演算法——龜兔賽跑演算法,也叫floyd判圈演算法。沒有聽說過的,可以了解了解。

它的原理還是很好理解的。使乙個快指標(fast),和乙個慢指標(slow)從某一位置出發。每次fast去到下乙個結點的下乙個結點,slow去到下乙個結點,如若存在乙個環,那麼如此迴圈,直到fast=slow,此時fast必定已經遍歷過整個環,既可以保證遍歷整個環,又可以得到終止條件。

**

#include 

#include

#include

using

namespace

std;

typedef

unsigned

long

long ll;

template

void read(tp &x)

ll z,n,k,fast,slow,maxx,limit[10]=;

ll calc(ll n,ll num)

int main()

while(fast!=slow);

printf("%llu\n",maxx);

}return

0;}

題意

給你一段數列,每次操作可以將某段連續的數列插入到任意位置,詢問最少需要多少次操作才能使這段數列變成有序的。

思路

令變換的序列為[i,j],插入到k的後方位置。

由於n<=9,那麼5步之內必然能出解,另外每次操作可以改變3個數的後繼,即i-1,j,k,所以我們就有了兩個很重要的剪枝策略。然後剩下的就是純模擬了。

**

#include 

#include

#include

using

namespace

std;

int n,depth,a[16];

bool found,flag;

template

void read(tp &x)

bool check()

int h()

void dfs(int d)

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

}int main()

a[0]=0,a[n+1]=n+1;

if(flag)

found=depth=0;

while(!found)

if(found)

printf("%d\n",depth);

else

printf("5\n");

}return

0;}

題意

給你乙個地圖,地圖包括1~9和#字元,#是不能進入的,你可以從任意乙個可走的地方出現,並不斷移動到周圍四個格仔,但不能走重複的路徑,每到乙個可走的格仔,價值的變換是規則是將新格仔中的數接到當前價值的後面一位,即:now=now*10+value.

思路

由於n*m<=30,如果把價值當做數來儲存,還是有點麻煩的,畢竟unsigned long long也還未長過20位,而且又因為變換規則是往後接,這符合string型別的加法規則,於是我們便想到用string型別來作為儲存變數。

其次,當有極限資料時,比如地圖中全是數字,那麼就很容易被卡時間。那麼,就也需要乙個估價函式來進行剪枝,即廣搜一遍可以到達的所有點數,如果可以到達的所有點數都無法使它比已經搜到的最優答案長度更長,那麼就可以直接剪枝。

值得注意的是,不要規規矩矩地去算當前點能夠合法到達的路徑最大長度!因為我們只需要乙個大致的估價函式,準確的去算,反而使這個估價函式加大時間複雜度,何況一般情況下,所有的點與最大長度也差不了太多。

**

#include 

#include

#include

using namespace std;

const int maxn=30;

struct date

;int n,m,v[4][2]=,,,};

bool b[maxn][maxn],ht[maxn][maxn];;

char map[maxn][maxn];

string ans,tmp;

date q[maxn*maxn];

bool cmp(string a,string b)

int h(int

x,int

y) }

head++;

}return cnt;

}void dfs(int

x,int

y,string s,int deep)

}}int main()

cout<"\n";

}return

0;}

由此可見,當乙個題目要卡時間時,a*的思想是很重要的,寫好乙個估價函式,可以幫助減去很多不必要的計算。

另外還接觸到了龜兔賽跑演算法,很不錯的演算法。收穫頗豐。

比 考試 難的 考試

打上學以後 就開始面對各種各樣的考試 考試 對於我來說 挺難的 考試整體下來就這麼乙個流程 考前準備 考試中奮筆疾書 考試完心情好幾天或者鬱悶幾天 考試匆匆結束 結束了的結果就是過了或者掛了 但是這種為人家準備 考試 的工作 還是第一次實踐 這幾天參與考試系統維護 不僅是目睹整個過程 更是真真切切的...

無紙化考試

課堂討論題目 某大學為進一步推進無紙化考試,欲開發一考試系統。系統管理員能夠建立專業方向 課程編號 任課教師等相關考試基礎資訊。教師和考生進行考試相關工作。系統與考試有關的主要功能如下 2 顯示並接收解答。根據教師設定的考試資訊,在考試有效時間內向學生顯示考試說明和題目,根據設定的提醒時間進行提醒,...

考試 職稱英語考試那些事兒

一 試題概況及答題順序 1.1 必殺技 見下表中 答題順序 答題順序 試卷順序 試卷題目 分值答題時間 分鐘 備註1 1詞彙1519 共15題目,來自教材練習4 9題24 閱讀理解 455036 完型填空 152043 概括大意810 55補全短文 101062 閱讀判斷71 7檢查合計100 1....