import java.io.*;
import java.util.StringTokenizer;
enum Text {
BLANKLINE,
PARAGRAPH,
PROJECT;
}
public class Main {
private static int countParagraph(StringBuilder paragraph, int w) {
int ans = 0;
for (int i = 0; i < paragraph.length();) {
ans++;
if (i + w <= paragraph.length()) {
i += w;
}
else {
break;
}
while (i < paragraph.length() && paragraph.charAt(i) == ' ') {
i++;
}
}
return ans;
}
private static int countProject(StringBuilder project, int w) {
if (project.length() == 0) return 1;
return countParagraph(project, w - 3);
}
public static void main(String[] args) {
BufferedReader sc = new BufferedReader(new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(System.out);
// 渲染所需的终端行数
int w = 0, ans = -1;
StringBuilder paragraph = new StringBuilder(); // 段落
StringBuilder project = new StringBuilder(); // 项目
Text prev = Text.BLANKLINE;
try {
w = Integer.parseInt(sc.readLine());
String line = null;
while ((line = sc.readLine()) != null) {
switch(prev) {
// 前一个是项目
case PROJECT:
if (line.startsWith(" ") && line.trim().length() != 0) {
if (project.length() != 0) {
project.append(" ");
}
project.append(line.trim());
prev = Text.PROJECT;
continue;
}
if (line.startsWith("* ")) {
ans += countProject(project, w);
project.setLength(0);
project.append(line.substring(2).trim());
prev = Text.PROJECT;
continue;
}
line = line.trim();
// 当前为段落
if (line.length() != 0) {
ans += countProject(project, w) + 1;
project.setLength(0);
paragraph.append(line);
prev = Text.PARAGRAPH;
}
else {
ans += countProject(project, w);
project.setLength(0);
prev = Text.BLANKLINE;
}
break;
// 前一个是段落
case PARAGRAPH:
// 当前为项目
if (line.startsWith("* ")) {
ans += countParagraph(paragraph, w) + 1;
paragraph.setLength(0);
project.append(line.substring(2).trim());
prev = Text.PROJECT;
continue;
}
line = line.trim();
if (line.length() != 0) {
paragraph.append(" ").append(line);
prev = Text.PARAGRAPH;
}
else {
ans += countParagraph(paragraph, w);
paragraph.setLength(0);
prev = Text.BLANKLINE;
}
break;
// 前一个是空白行
case BLANKLINE:
if (line.startsWith("* ")) {
ans++;
project.append(line.substring(2).trim());
prev = Text.PROJECT;
continue;
}
line = line.trim();
if (line.length() != 0) {
ans++;
paragraph.append(line);
prev = Text.PARAGRAPH;
}
else {
prev = Text.BLANKLINE;
}
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
if (prev == Text.PROJECT) {
ans += countProject(project, w);
}
if (prev == Text.PARAGRAPH) {
ans += countParagraph(paragraph, w);
}
out.println(ans);
out.flush();
}
}
[Java] Markdown渲染器 202006-3
猜你喜欢
转载自blog.csdn.net/weixin_41714373/article/details/109112509
今日推荐
周排行