POJ

2016大數據研究中心夏令營上機考試

2016年北京大學計算機科學技術研究所優秀大學生夏令營上機考試

12推免

  1. 石頭剪刀布
  2. 最簡真分數
include<algorithm>
__gcd(a,b);
  1. encode decode 字符串的處理
  2. 大數,進制轉換,unsolved
  3. 8數碼問題,和之前做的BFS不同的是,要存儲每一種可能的系統狀態
struct Node
{
    int s[9];
    int loc;//“0”的位置,把“x"當0
    int status;//康拖展開的hash值
    string path;//路徑 更新:next.path=next.path+indexs[i];
};
  1. 熱血格斗場 和冷血格斗場要求不一樣
  2. 畫家問題 重復題不能用BFS
  3. 三角形 重復題,從下往上
  4. Lausanne Capitale Olympique no answer

13推免(校外)

  1. 十進制轉六進制,無oj
  2. 電池的壽命,找規律
    令最大壽命為x,其余壽命和為sum,若sum>x,則可以全部用完 ans=(sum+x)/2
    否則 只能用sum的壽命
if(2*x[n-1]>ans)
         ans-=x[n-1];
else ans*=0.5;
  1. 重建二叉樹
typedef struct node
  1. 完美覆蓋,遞推關系的尋找
f(n)=3f(n-2)+2[f(n-4)+...f(0)]
f(n-2)=3f(n-4)+2[f(n-6)+...f(0)]
thus: f(n)=4f(n-2)-f(n-4)
f(0)=1, f(2)=3;
  1. 去掉冗余的括號,兩個標準:括號前是否是負號、括號里面是否有操作符號
  2. 坦克大戰,done
  3. sightseeing,混合圖歐拉路徑的判定...
  4. poyla計數,項鏈涂色問題
//背代碼
(long long)(pow(3.0,tmp*1.0));//格式為long long,3.0

13推免(校內)

  1. 字符串插入,沒有說怎么結尾,讀入方式就是:while(cin>>a>>b)
  2. 書架,臨界條件sum>=b
  3. 最長子序列,動態規劃
if(a[j]<a[i]&&b[j]+1>b[i])
         b[i]=b[j]+1;//b[i]從1開始
  1. 尋找正方形變量和復雜度都會影響運行時間
//先排序再查找
void *bsearch(const void *key, const void *base, size_t nmem, size_t size, int (*comp)(const void *, const void *));
eg. (point_type*) bsearch ((const void*) key...)
//key指向所要查找的元素,base指向進行查找的數組
//nmem為查找長度,一般為數組長度
//size為每個元素所占的字節數,一般用sizeof(...)表示,comp指向比較子函數
int compare(const void* e1,const void* e2)
{
    const point_type* p1=(const point_type*) e1;
    const point_type* p2=(const point_type*) e2;
    if (p1->x!=p2->x)//先比較x
        return p1->x-p2->x;
    else//x相同就比較y
        return p1->y-p2->y;
}
//cmp的寫法
qsort(p,n,sizeof(point_type),compare);
//qsort寫法
key->x=x2+y1-y2;
key->y=y2+x2-x1;
//只往一個方向上找,

13夏令營

  1. map,冷血格斗場輸入的id沒有從小大的順序
  2. 上臺階,斐波那契數列
  3. 線段樹,二分,數字大的用scanf否則易超時! POJ3264
#include<algorithm>  max(a,b);
struct node//用來記錄每個葉結點,之所以不用指針是因為用tree[num]來記錄每個結點了(樹不需要動態操作所以可以這么用)
{
    int l;
    int r;
    int max;
    int min;
};
//用全局變量來記錄最大值
int findmax(int l,int r,int ceng)//層是tree[num]的編號
  1. 數獨,DFS,用grid[num][1-9]來標記是否已經用了這個數字 POJ2676
  2. 3D迷宮BFS
  3. 數字三角形,遞歸。
if(map[i+1][j]>map[i+1][j+1])
                map[i][j]=map[i+1][j]+map[i][j];
            else
                map[i][j]=map[i+1][j+1]+map[i][j];
  1. 最小生成樹 上下限的設置
  2. 增廣方法求最大流 POJ1273
map和min_flow是全局變量,pre和flow在尋找每一條增廣路徑時更新,

14推免

  1. 單詞倒排
  2. DNA排序,struct,qsort,count
  3. 踩方格,DFS深度優先,回溯
  4. 走迷宮找最短路徑,BFS廣度優先
  5. 二維背包問題
for(i=0;i<c;i++)
    {
        cin>>temp1>>temp2;
        for(j=a;j>=temp1;j--)
        {
            for(k=b;k>=temp2;k--)
            {
                if(dp[j][k]<dp[j-temp1][k-temp2]+1)
                    dp[j][k]=dp[j-temp1][k-temp2]+1;//個數+1
            }
        }
         //dp:精靈球數量,體力值——小精靈的個數
    }
  1. 套匯,Floyed
map<string,int>STL; 
dist[i][i]=1; //自己到自己初始為1
dist[i][j] < dist[i][k] * dist[k][j];//更新條件
  1. trie樹,對樹的操作:
void clean ()
      root->next[i]=NULL;
void delete(root)
{
      if(root->next[i])
            delete(root->next[i]);
      free(root);
}
pnode p1= (pnode)malloc(sizeof(node));//生成結點
typedef struct node//結構定義
{
      struct node *next[10];//0~9
      int end,cover;
}*pnode;

14夏令營

  1. 人民幣支付,水
  2. 排隊游戲,類似POJ對括號的處理輸入不一定是()!!!
  3. 取石子游戲,巨坑!要么用a/b>=2, 要么用long long a,b;
  4. 去除注釋,cin.getline(s,200) 之后對字符的處理、多種情況的考慮沒有測試
  5. 求逆序數對即是求歸并排序的交換次數,背代碼
  6. 坦克大戰,BFS的處理map越界!
  7. 背包問題,
d[j]=max(d[j-a]+b,d[j])//j是背包可承受的最大重量,注意上限!
  1. 樹的處理,找規律
  2. 寶昌縣長要修路,最小生成樹的編寫,雙邊距離

15推免

  1. 矩陣轉置
  2. 行程編碼
  3. 去除重復的數
  4. 分解因數,遞歸:
       if(a==1) return 1;
       if(b==1) return 0;
       if(a%b==0) return func(a/b,b)+func(a,b-1)
       else return func(a,b-1) 
  1. DFS 深度優先
  2. 背包問題
    64-bit unsigned integer: %I64d
dp[0]=1;
        for (i=1; i<=num; i++)//對于從小到大的序號
            for (j=n; j>=0; j--)
                for (x=1; x<=h[i]; x++)//這個數有多少個
                    if (j-x>=0)
                        dp[j]+=dp[j-x];
  1. 查找二叉樹;得到一行中不確定個數的數字輸入有可能是0
    while((c=getchar())!='\n')
    {
    if(c>='0'&&c<='9')
    {
    ungetc(c,stdin);
    cin>>a[i++];
    }
    }
  2. Floyd,找兩點之間所要經過的最小“最大距離”。
for(k=1; k<=n; k++)
            for(i=1; i<=n-1; i++)
                for(j=i+1; j<=n; j++)
                    if(path[i][k]<path[i][j] && path[k][j]<path[i][j])
                        //則走i->k->j路線,否則走i->j路線
                        if(path[i][k]<path[k][j])
                            path[i][j]=path[j][i]=path[k][j];
                        else
                            path[i][j]=path[j][i]=path[i][k];

15夏令營

  1. 數組的遍歷 考慮只有一行的情況!
  2. qsort不能有兩個cmp方法,合影
  3. 相同字符串的尋找,題意的理解
  4. To Europe,動態規劃!:
t=l*1.0/s+result[j-1];//int變double,考慮到每一層的最優情況
  1. BFS,考慮的是方向不是距離

  2. 相鄰的點可以到達

  3. 用普通的BFS不行,因為即使當前的點是segment最少的點,也不能保證接下來找到點是segment最少的。

  4. 從原點開始,把1步、2步…能走到的點都放進隊里。而不是只找可以走到的一個點

  5. 審題! 每一個輸入之后有一個空行

  6. memset(v,0,sizeof(v));

  7. 二叉查找樹的建立

  8. 兩點之間的最短距離


16推免(check)

  1. 石頭剪刀布
  2. 字符串判斷,'a'-'A'=32 極值Z的處理
  3. 矩陣輸出順序
  4. DFS,背代碼,遞歸的利用
不是可能性!是數獨的要求!
  1. 10000個數的計算,不能直接計算,而是每次計算都取余數,類似背包問題用0、1存結果
   1. %的結果可能是負的!
   2. 不管是+a[i]還是-a[i]都可能出現mod是負的!
   3. 動態規劃,用dp[10001][101]存儲!
  1. 畫家問題,和POJ的題不一樣,不能簡單的枚舉否則會超時。
for(int k=0; k<pow(2.0, n); k++)
      getLine(k);
void getLine(int k)
{
    //通過二進制枚舉第一行可能發生的所有情況
    int j = n;
    while(j>0)
    {
        line[j] = k % 2;//line[j]代表第一行的第j列翻轉
        k /= 2;
        j--;
    }
}
  1. 最小生成樹、字符串的處理not by me
string temp1;
if(temp1.compare(a[j])==0)
  1. 二叉樹路線的計算not by me
  2. Magical GCD的理解
    動態規劃,gcd函數要自己寫

16夏令營

  1. 單詞翻轉,調試
  2. 加密,矩陣的操作
  3. 文件結構圖,目錄里的文件也要排序,因此一定要用遞歸
recur(string s1,int N,int T) //T是test的序號,N是文件層次的序號
  1. 匯率計算,精度的改變,用兩個數組決定換不換
double update(double a)
{
    a=a*100;
    int y=int(a);
    return y/100.0;
}
  1. BFS,迷宮,背代碼
  2. 前序遍歷、中序遍歷變為后序遍歷。讀取一行的兩個字符串cin>>s1>>s2
  3. 最小生成樹
  4. 多米諾,f[i][j]為枚舉到第i個數差為j時最少交換了多少次,要考慮j為負數的情況。
f[i][j]=min(f[i][j],f[i-1][j-(a[i]-b[i])],f[i-1][j+(a[i]-b[i])]+1)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,238評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,823評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,604評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,339評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,713評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評論 3 445
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,893評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,448評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,201評論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,397評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,631評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,033評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,321評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,128評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,347評論 2 377

推薦閱讀更多精彩內容