L1-071 前世檔案 (20分)


 

 網絡世界中時常會遇到這類滑稽的算命小程序,實現原理很簡單,隨便設計幾個問題,根據玩家對每個問題的回答選擇一條判斷樹中的路徑(如下圖所示),結論就是路徑終點對應的那個結點。

 

 

現在我們把結論從左到右順序編號,編號從 1 開始。這里假設回答都是簡單的“是”或“否”,又假設回答“是”對應向左的路徑,回答“否”對應向右的路徑。給定玩家的一系列回答,請你返回其得到的結論的編號。

輸入格式:

輸入第一行給出兩個正整數:N(≤)為玩家做一次測試要回答的問題數量;M(≤)為玩家人數。

隨后 M 行,每行順次給出玩家的 N 個回答。這里用 y 代表“是”,用 n 代表“否”。

輸出格式:

對每個玩家,在一行中輸出其對應的結論的編號。

輸入樣例:

3 4
yny
nyy
nyn
yyn

輸出樣例:

3
5
6
2

思想:這不是利用滿二叉樹的性質嗎,每一層的結點數為pow(2,n-1) , n 為層數 , 那么就好了,觀察圖片,我們可以發現,

對於每一層,如果是 'n' 的話,就加上pow(2,k) , k為當前層數-1,跟前面的 n 別亂 ,  n 是當前層數,k 是層數 -1。  

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n , m ;
    cin>>n>>m;
    string str;
    while(m--){
        cin>>str;
        int sum = 1 ;
        int k = n-1;
        for(int i = 0 ; i < n ; i++){
            if(str[i] == 'n') 
                sum += pow(2,k);
            k--;
        }
        cout<<sum<<endl;
    }
    return 0;
} 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM