vtergn

@vtergn

Joined on Feb 19, 2021

  • 題目大意 有一深度為D的滿二元樹,依序丟球下去 每個節點都有一個標記,一開始是往左,當被經過時,就會換成右,再被經過一次,就切換成左,以此類推,直到最底層(葉節點) 輸出第I顆球最後會停在哪個節點 題解 I的二進位表示第I顆球"後"的狀態,因此看I-1的每一位決定往左還右 #include <bits/stdc++.h> #define ll long long
     Like  Bookmark
  • 題目大意 有個壞掉的鍵盤會不時按下”Home”鍵與"End"鍵。本題給定鍵盤輸出的字串(包含Home與End),要求輸出該字串顯示的內容。 題解 用deque模擬插入字串 #include <bits/stdc++.h> #define ll long long #define pb push_back #define pf push_front
     Like  Bookmark
  • 題目大意 有一個最多9*9個的迷宮。輸入起點、離開起點時的朝向和終點,每個點有限制能走的方向,輸出最短路。 要注意初始狀態是 剛剛離開入口 ,所以即使出口和入口重合,最短路也不爲空。 題解 有夠麻煩又一堆問題的BFS。因為有朝向哪邊的問題,所以需要多記錄現在的朝向,整體來說就是多一維的BFS。然後設計一下dir陣列對應左、右、前的關係。一邊走一邊紀錄父節點,最後倒著推回去輸出路徑 #include <iostream> #include <string.h> #include <queue>
     Like  Bookmark
  • 題目大意 給定H個16進位、長度為W的字串,用其二進位表示6種象形文字。如果是同一個象形文字,則黑色的部分會上下左右相連,而象形文字間不會相碰。要求辨識圖形中所有的象形文字,並按照字典序輸出。 題解 可以發現每種文字含有的空格數不同,因此可以藉由空格數辨識文字。 做三種BFS。首先將象形文字外部的空白去除,接著將文字的黑色部分跑一遍,此時碰到內部的白色格時再做一次BFS並記錄有幾塊白色。 #include <bits/stdc++.h> #define ll long long #define pb push_back
     Like  Bookmark
  • 題目大意 給一個二元樹的前序式,要求從左到右輸出垂直節點的權值和 題解 直接用preorder邊輸入邊加總即可。 要注意輸出格式最後不能有空格。還有,我原本想先建圖在跑一遍的,後來才發現節點的值可能很大QQ #include <bits/stdc++.h> #define ll long long #define pb push_back
     Like  Bookmark
  • 題目大意 給定一個nm,由@和形成的圖,求@形成的連通塊個數。連通是指上、右上、右、右下、下、左下、左、左上這八個方向的方格相同 題解 BFS #include <bits/stdc++.h> #define ll long long #define pb push_back #define pf push_front
     Like  Bookmark
  • 題目大意 用四元樹表達一個只有黑白色、32*32的圖案,給兩棵樹的前序表達式,要求輸出兩圖重疊後總共有幾格黑色。 題解 開一個陣列,用遞迴塗色,最後直接數有幾個是黑色的。 #include <bits/stdc++.h> #define ll long long #define pb push_back #define pf push_front
     Like  Bookmark
  • 題目大意 1~n照升序排列,接著有m筆操作: 1 x y : 將x插入y的左邊 2 x y : 將x插入y的右邊 3 x y : 將x、y互換 4 將整個序列反轉 最後要求輸出奇數項的總和 題解 直接模擬雙向list,操作4可以用一個變數來表示,有反轉過就把操作1、2互換。
     Like  Bookmark
  • 題目大意 給許多由A~Z表示的矩陣,接下來有許多矩陣乘法算式,任兩個矩陣的乘法皆由括號包住,接著對每個算式輸出總共需要做幾次乘法運算。 題解 ab的矩陣乘以cd的矩陣需要 abd 次運算,而需要b=c才能相乘。由於任兩個乘法皆由括號包住,所以只需要管 ) ,碰到 ) 就把stack最上面兩個矩陣做運算再把結果扔回去就好。最後看stack中是否只有一個元素及是否出現不能相乘的情況。 #include <bits/stdc++.h> #define ll long long #define pb push_back #define pf push_front
     Like  Bookmark
  • 題目大意 超級經典題 題解 用stack模擬進出站 #include <bits/stdc++.h> #define ll long long #define pb push_back #define pf push_front
     Like  Bookmark
  • 題目大意 共n行,每行有m個用逗點隔開的字串,問你有沒有某兩列和某兩行的交點的字串分別相等(一行中有兩個一樣,然後另一行同個位置也一樣)。 簡單來說,就是問是否有兩列r1,r2及兩行c1,c2滿足(r1,c1)=(r1,c2)且(r2,c1)=(r2,c2)。 題解 用map給字串賦值以及檢查重複,因為只要將數字乘一個夠大的數加上另一數就不會重複,所以可以用數字檢查是否有重複出現的字串。接下來因為m很小,所以直接暴力枚舉所有行的組合,並檢查每一列是否有重複出現的字串。 #include <bits/stdc++.h> #define ll long long #define pb push_back
     Like  Bookmark
  • 題目大意 有一個元素是集合的stack,並有五種操作: PUSH:裝一個空集合進去stack DUP:複製stack最頂端的集合放進stack UNION:拿stack最頂端兩個集合做聯集再放進stack INTERSERT:拿stack最頂端兩個集合做交集再放進stack ADD:把stack最頂端的集合拿出來插入stack新頂端的集合 每一次操作都要輸出stack最頂端集合的大小 題解
     Like  Bookmark
  • 題目大意 有多筆輸入,每次給n個字串,按照字典序排序後照格式從上到下、從左到右輸出。每列不能超過60個字元。每個字串要佔最長字串長度加2的空間。每筆輸出前用60個'-'隔開。 題解 輸出的部分可以用printf("%-*s") 滿足要求,所以只要紀錄最長長度計算每列長就好。然後我現在才知道printf不能輸出string。因為printf是C的,用來輸出Char數組,而string是一個容器,所以要用c_str()轉換後才能用printf。Orz #include <bits/stdc++.h> #define ll long long #define pb push_back #define pf push_front
     Like  Bookmark
  • 題目大意 給許多英文句子,印出其中不重複的單字。重複的意思是用的字母個數分別相同,比方說Rob和bOr重複。 題解 讀入一個單字後先轉小寫再排序,接著以此當map的key,最後看只要印出現次數是1的就好,為了方便用set存起來,不然最後再一起排序也可以。 #include <bits/stdc++.h> #define ll long long #define pb push_back #define pf push_front
     Like  Bookmark
  • 題目大意 給許多英文句子,將每個單字拆開轉成小寫後,最後按照字典序輸出。每個單字指以任何符號、空格格開。比方說$three-eyed$要拆成$three$和$eyed$。 題解 一行一行讀入,每讀一行就將所有符號換成空格、大寫轉小寫,接著掃一遍把單字扔進$vector$中,最後在一起排序及去重,然後輸出。 #include <bits/stdc++.h> #define ll long long #define pb push_back #define pf push_front
     Like  Bookmark
  • 題目大意 有n個物品及n個區塊,區塊及物品的編號從0至n-1,一開始物品i在區塊i,接著會有4種指令: move a onto b:把a和b上方的物品都歸回到原本位置,再把a疊到b上方。 move a over b:把a上方的物品都歸回到原本位置,再把a疊到b所在區塊的最上方。 pile a onto b:把b上方的物品都歸回到原本位置,再把a及它上面的物品都疊到b上方。 pile a over b:把a及上方的物品都疊到b所在區塊的最上方。 如果a和b都在同一區塊,則指令無效。最後指令是quit時,列印每個區塊的物品(按順序)。 原本位置的意思是:物品i則是區塊i的最下面 題解
     Like  Bookmark
  • 題目大意 輸出第1500個質因數只有2、3、5的數 題解 用$set$紀錄已經出現過的數,用$priority-queue$找下一個數。用$priority-queue$是為了保證覆蓋到所有由2、3、5組成的數。 #include <bits/stdc++.h> #define ll long long #define pb push_back #define ft first
     Like  Bookmark
  • 題目大意 給一表格及一些操作,包括插入行、列,刪除行、列,交換兩格,接著問你某些格子經過這些操作後跑去哪了,如果被刪掉了就輸出GONE。 題解 存下每筆操作,接著對於每筆詢問模擬一遍所有操作並輸出,要注意同一操作是同時發生的。主要就是好好模擬就可以了,只是很麻煩== #include <bits/stdc++.h> #define ll long long #define pb push_back #define ft first
     Like  Bookmark
  • 題目大意 兩人從1開始一順一逆時鐘數分別走$k,m$步,並將停下的地方輸出並刪掉,直到沒人留下。注意刪掉是最後發生的,所以兩人交錯不會影響彼此。 題解 直接模擬過程,唯一比較難的地方是下標的處理。我們需要使0->n,n+1->1。若此時位置為i,寫成$(i+n-1)$$%n+1$即可達到要求。 #include <bits/stdc++.h> #define ll long long #define pb push_back #define INF 2147483647
     Like  Bookmark
  • 題目大意 給兩字串,第一個是答案,第二個是猜測。如果猜的字母是答案中的就算猜中,否則就算猜錯,最多只能猜錯7次。問遊戲結果。 題解 直接模擬遊戲過程,最後判斷三種情況即可。 #include <bits/stdc++.h> #define ll long long #define pb push_back #define INF 2147483647
     Like  Bookmark