首页 > 试题广场 >

一封奇怪的信

[编程题]一封奇怪的信
  • 热度指数:9159 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
现在你需要用一台奇怪的打字机书写一封书信。信的每行只能容纳宽度为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 50

说明

"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 20

说明

"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

备注:
输入及输出均为字符串
头像 白伟仝
发表于 2020-07-24 21:46:12
注意行数是从1而不是0开始标号的就行了: import java.util.*; public class Main { public static void main(String[] args) throws Exception{ Scanner sc = new Sca 展开全文
头像 刷代码的长颈鹿
发表于 2025-02-19 21:14:02
#include <iostream> #include <string> using namespace std; int main() { int number[26]; for (int i = 0; i < 26; cin >> n 展开全文
头像 牛客题解官
发表于 2020-06-05 16:11:21
题解 题目难度:简单难度 知识点:数组逻辑 这道题有几点需要注意: 1.将每个字母所占的宽度存放在数组a中,依次取出输入的字符串s中的每个字符,怎样与存放字符宽度的数组联系起来。通过int j=s[i]-’a’,例如是s[i]=’a’,那么j=0,或者S[i]=’c’,那么j=’c’-’a’,所以a 展开全文
头像 1234568__
发表于 2025-05-21 11:02:31
#include<iostream> #include<stdio.h> #include<vector> #include<map> using namespace std; int main(void) { map<char,int 展开全文
头像 Ⅲ_Dc
发表于 2022-03-07 09:55:34
//用一点写一点,不够,赋值100并换行 ">#include<iostream> #include<stdio.h> #include<vector> #include<map> using namespace std; int main(void 展开全文
头像 PiKa_pi
发表于 2025-05-21 13:53:16
#include<bits/stdc++.h> #include <unordered_map> #define fi first #define se second #define pb push_back using namespace std; /* debug用 展开全文
头像 louis_ncu
发表于 2020-05-01 23:11:29
/* 使用了STL的map()函数,与其他优秀的同学相比,略显得复杂 */ #include <iostream> #include <string> #include <vector> #include <algor 展开全文
头像 牛客289281343号
发表于 2020-05-02 10:55:42
解题思路:分析题意,只要加上某一字符宽度使得整行的字符宽度大于100,则另起一行写该字符。因此采用两个整数n,m分别记录行数和最新一行的字符宽度,当m等于100且字符串中还有其他字符的情况下,行数加一,m置0;当m大于100时,行数加一,m为此时写入的字符宽度。 import java.util.* 展开全文
头像 不要为打翻的牛奶哭泣
发表于 2025-05-25 16:11:18
1.将每个字母所占的宽度存放在数组a中,依次取出输入的字符串s中的每个字符,怎样与存放字符宽度的数组联系起来。通过int j=s[i]-’a’,例如是s[i]=’a’,那么j=0,或者S[i]=’c’,那么j=’c’-’a’,所以a[j]正好是字母c对应的宽度。2.对该字符串依次统计宽度和,用sum 展开全文
头像 lostmarshmallow
发表于 2025-03-10 05:17:35
arg = input() arg1 = input() argList = arg.split() arg1List = list(arg1) engList = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p', 展开全文