山大華特臥龍學校第一屆ACM賽後總結_題目
阿新 • • 發佈:2018-12-11
山大華特臥龍學校第一屆ACM賽後總結
題目_A
題目描述
孔子學院最近招收了 個學員,並要求他們按照《大學》裡說的進行修行:格物,致知,誠意,正心,修身,齊 家,治國,平天下。由於輸入限制,用全拼表示相應的修行。 如果有學生達到了相應的修為,他就會報告他的老師。但是有的同學有可能會在報告中說謊,具體來說有以下兩種 情況: 1、上一級修為尚未達成,就報告說自己達到了這一級修為。比如說,還沒有“格物”,就報告說已經達到“致知”。 2、報告格式不是相應修為的全拼。 現在你的任務是,對於給定的 條報告資訊,輸出每一個同學達到了什麼修為。 輸入輸出格式 輸入格式 第一行一個正整數 ,表示學院中有 個學員。 第二行一個正整數 ,表示有 條報告。 接下來 行,每一行一個正整數 和一個僅由小寫字母組成的字串 ,表示第 個同學的報告。 輸出格式 輸出包括 行,每一行一個字串,表示每一個同學達到了什麼修為。特別的,如果該同學什麼修為都沒達到,輸 出0。 輸入輸出樣例
8 10
1 gewu
1 zhizhi
1 chengyi
1 zhengxin
1 xiushen
1 qijia
1 zhiguo
1 pingtianxia
2 gewu
2 chengyi
輸出樣例1
pingtianxia
gewu
0
0
0
0
0
0
輸出樣例2
8 10
1 gewu
2 gewu
3 wogewule
4 wopingtianxiale
1 zhizhi
3 zhizhi
3 pingtianxia
8 gewu
8 zhizhi
5 gewu
輸出樣例2
zhizhi
gewu
0
0
gewu
0
0
zhizhi
思路
這道題我們可以直接模擬,但是要注意孔子的學生必須按照順序來學習.這樣我們就可以來多維護一個數組來處理當前學習的上一條是否已經學習完畢
AC code
//由於L_Y_T在做這道題畝的時候因為rank墊底比較著急,所以思路比較亂(雖然這道題沒啥思路) #include <iostream> #include <cstring> #include <string> #include <algorithm> #define maxn 10010 using namespace std ; int n , m ; string ss[10]={"0","gewu","zhizhi","chengyi","zhengxin","xiushen","qijia","zhiguo","pingtianxia"} ;//預存一下學生們需要達成的狀態 int num[maxn][10] ; bool book[maxn] ;//好像定義了幾個多餘的陣列.... int degue[maxn] ; int main() { cin.tie(0) ;cout.tie(0) ;//感覺拼手速還是cin塊... memset(num,0,sizeof(num)); cin >> n >> m ; int opt ; string ch ; for(int i = 1 ; i <= n ; i ++) {//預處理,假設學生們都可以學習第一條 num[i][0] = 1 ; } for(int i = 1 ; i <= m ; i ++) { cin >> opt >> ch ; for(int j = 1 ; j <= 8 ; j ++) { if(ch == ss[j]) if(num[opt][j-1]!=0) //如果上一條已經學完 num[opt][j] = true ; } ch = "0" ; } int kkk = 0 ; for(int i = 1 ; i <= n ; i ++) { for(int j = 1 ; j <= 8 ; j ++){ if(num[i][j]==0){ break ; } kkk = j ; //cout << ss[j] << endl ; } cout << ss[kkk] << endl ; kkk = 0 ; } return 0 ; }
PS:我們是最後一個AC第一題的(還罰時了QAQ)…