小T喜欢以一种特殊的方式和朋友小B通信,他们约定采用邮件的方式相互写信。信中的文字只包含大写字母、小写字母组成的单词和空格,两个连续的单词之间有且仅有一个空格。每行文字的最大长度不超过NN个字符,每个单词的长度不超过一行的长度。 小T和小B用来阅读邮件的软件也很特殊,窗口中每行最多可以显示 NN 个字符。显示遵循如下规则: 每个单词中的所有字符都必须出现在同一行(i.e. 不允许跨行连字符); 行尾可能有多余的空格,也可能没有空格; 行首不允许有空格; 显示布局设计会尽可能少的行数显示邮件内容。 简言之,除了不允许加连字符之外,上述规则和其他文本显示软件的换行规则并没有显著差异。 现在的问题是,小T希望知道,任意给定的一段文字会在邮件阅读软件中用多少行显示,你能帮他计算一下吗? 输入数据 输入的第 11 行包含一个整数 QQ ( 1≤Q≤101≤Q≤10 ) 和一个整数 NN ( 1≤N≤10001≤N≤1000 ),NN的意义如上所述。 随后有 QQ 行文本,每行包含一个长度为SiSi的字符串SS,表示邮件的内容, 1≤Si≤1×1071≤Si≤1×107。 输出数据 对每行输入文本,在单独的行中输出一个整数,表示 对应文本显示所需的行数。
时间: 2023-05-11 09:04:10 浏览: 74
这是一个字符串处理的问题,可以按照以下步骤进行计算:
1. 将字符串按照空格分割成单词,存储在一个列表中。
2. 遍历单词列表,将单词逐个添加到当前行中,直到当前行的长度加上下一个单词的长度超过了NN,此时需要换行,并将下一个单词添加到新的一行中。
3. 重复步骤2,直到所有单词都被添加到行中。
4. 输出行数即可。
以下是Python的实现代码:
```python
Q, N = map(int, input().split())
for i in range(Q):
s = input().strip()
words = s.split()
lines = 1
cur_len = 0
for word in words:
if cur_len + len(word) + (1 if cur_len > 0 else 0) > N:
lines += 1
cur_len = 0
cur_len += len(word) + (1 if cur_len > 0 else 0)
print(lines)
```
对于输入的每一行字符串,都会输出一个整数表示所需的行数。
相关问题
vue实现qq邮箱的写信中收件人识别回车和;双击支持编辑,每个邮箱地址都有单独的背景色
实现这个功能,可以采用以下步骤:
1. 在vue中使用`<textarea>`标签实现收件人输入框,监听其`input`事件,获取输入框中的文本。
2. 使用正则表达式匹配文本中的每个邮箱地址,并将它们存储在数组中。
3. 在模板中使用`v-for`指令渲染出每个邮箱地址的tag,并为每个tag设置单独的背景色。
4. 监听每个tag的`dblclick`事件,将其转换为可编辑状态。
5. 监听每个tag的`blur`事件,将其转换为不可编辑状态,并更新对应的邮箱地址。
下面是一个简单的实现代码示例:
```html
<template>
<div>
<textarea ref="input" v-model="text" @input="handleInput"></textarea>
<div class="tags">
<span v-for="(email, index) in emails" :key="index"
:style="{ backgroundColor: colors[index % colors.length], cursor: 'pointer' }"
@dblclick="editEmail(index)"
:contenteditable="email.editable"
@blur="updateEmail(index, $event.target.textContent)">
{{ email.address }}
</span>
</div>
</div>
</template>
<script>
export default {
data() {
return {
text: '',
emails: [],
colors: ['#FFC107', '#2196F3', '#4CAF50', '#E91E63', '#9C27B0']
}
},
methods: {
handleInput() {
const regex = /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g;
const matches = this.text.match(regex);
if (matches) {
this.emails = matches.map(address => ({ address, editable: false }));
} else {
this.emails = [];
}
},
editEmail(index) {
this.emails[index].editable = true;
this.$nextTick(() => {
this.$refs.input.focus();
});
},
updateEmail(index, address) {
this.emails[index].address = address;
this.emails[index].editable = false;
}
}
}
</script>
```
这里使用了一个正则表达式匹配文本中的邮箱地址,然后将匹配结果存储在`emails`数组中。在模板中,使用`v-for`指令渲染出每个邮箱地址的tag,并为每个tag设置单独的背景色。同时,监听每个tag的`dblclick`事件,将其转换为可编辑状态。在编辑完成后,监听tag的`blur`事件,将其转换为不可编辑状态,并更新对应的邮箱地址。
outlook群发不同邮件联系人相互看不到
如果您想向不同的联系人发送个性化的电子邮件,同时又希望这些联系人之间相互看不到,可以使用 Outlook 中的“邮件合并”功能来实现。
具体操作步骤如下:
1. 准备好您要发送的电子邮件内容,并将其中的可变内容使用尖括号括起来,例如:尊敬的 <姓名>,您好!
2. 从“开始”选项卡中选择“邮件合并”。
3. 在“开始邮件合并”组中,选择“电子邮件”。
4. 在“选择收件人”组中,选择“现有列表”或“从 Outlook 联系人导入”。
5. 在“编辑收件人列表”对话框中,选择您要向其发送电子邮件的联系人,并单击“确定”。
6. 在“编辑邮件”组中,单击“写信”按钮,开始编写您的邮件内容。在电子邮件中,使用“插入合并字段”按钮向电子邮件添加可变内容。
7. 编写完毕后,单击“预览结果”按钮,可以在其中查看每个收件人接收到的电子邮件内容。
8. 如果一切正常,请单击“完成合并”按钮,然后选择“发送电子邮件”。
这样,每个收件人将收到一封个性化的电子邮件,他们之间相互看不到。