1. 程式人生 > >一封奇怪的信---網易遊戲(互娛)-遊戲測試開發工程師真題 題解

一封奇怪的信---網易遊戲(互娛)-遊戲測試開發工程師真題 題解

一封奇怪的信

時間限制:1秒

空間限制:32768K

現在你需要用一臺奇怪的打字機書寫一封書信。信的每行只能容納寬度為100的字元,也就是說如果寫下某個字元會導致行寬超過100,那麼就要另起一行書寫

信的內容由a-z的26個小寫字母構成,而每個字母的寬度均會事先約定。例如字元寬度約定為[1,2,3,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],那麼就代表'a'到'd'四個字母的寬度分別是1,2,3,4,而'e'到'z'的寬度均為5

那麼按照上述規則將給定內容S書寫成一封信後,這封信共有幾行?最後一行寬度是多少?

輸入描述:

輸入為兩行:
第一行是儲存了每個字元寬度的字串,包含26個數字,以1個空格分隔,每個數字均小於等於10
第二行是儲存了待輸入字元的字串S,字串S的長度在1到1000之間

輸出描述:

輸出為信的行數以及最後一行所包含的字元個數,中間以1個空格分隔

輸入例子1:

5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
helloworld

輸出例子1:

1 50

例子說明1:

"5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5"規定每個字元寬度為5
"helloworld"是輸入的字串S
由於S共包含10個字元,也即共佔用50個字元寬度,因此可以寫在同一行

輸入例子2:

5 5 5 5 5 5 10 10 10 10 10 10 10 10 10 10 10 10 5 5 5 5 5 5 5 5
hahahahahahahaha

輸出例子2:

2 20

例子說明2:

"5 5 5 5 5 5 10 10 10 10 10 10 10 10 10 10 10 10 5 5 5 5 5 5 5 5"規定了每個字元寬度
"hahahahahahahaha"是輸入的字串S
由於h寬度為10,a寬度為5,因此'hahahahahahah'佔用100字元寬度可以寫在第一行,‘aha’寫在第二行也即最後一行。因此字元寬度為20
#include <iostream>
#include <string.h>
#include <map>
using namespace std;
int main()
{
    map<char,int> m;
    char c='a';
    for(int i=0;i<26;++i)
        cin>>m[c++];
    char s[1100];
    cin>>s;
   int sum=0;
    int n=0;
    for(int i=0;i<strlen(s);i++)
    {
        if(sum+m[s[i]]>100)
        {
            n++;
            sum=m[s[i]];
        }
        else
        {
            sum+=m[s[i]];
        }
    }
    cout<<n+1<<" "<<sum;
    return 0;
}