201703
- 最后一个小朋友只要分到的重量>0,则被认为被分到蛋糕
- 数组模拟一下
- (1)知识小课堂:C++中string的用法
(2)转换的技巧:string(‘0’)会报错,可转换为string(1, ‘0’),具体原因见上方链接。
(3)本题的小bug:测试数据里好像 */# 后只有一个空格?
(4)分段读入,解析文本
#include <bits/stdc++.h>
#define I(a) scanf("%d", &a)
#define O(a) printf("%d", a)
#define mem(a, b) memset(a, b, sizeof(a))
using namespace std;string line, text;int main()
{
getline(cin,line); bool f=false;while(true) {if(line.size()) text+=line+"\n";else if(line.size()==0 && text.size()){size_t pos = text.find("_");while(pos!=string::npos){text.replace(pos, 1, "<em>");pos = text.find("_");text.replace(pos, 1, "</em>");pos = text.find("_");}pos = text.find("[");while(pos!=string::npos){size_t nxtp = text.find("]");size_t left = text.find("(");size_t right = text.find(")");string tex = text.substr(pos+1, nxtp-pos-1);string link = text.substr(left+1, right-left-1);text.replace(pos, right-pos+1, "<a href=\""+link+"\">"+tex+"</a>");pos = text.find("[");}if(text[0]=='#'){pos = text.find("#");while(pos!=string::npos){int i=pos, cnt=0;while(text[i]=='#') {cnt++;i++;}while(text[i]==' ') i++;text.replace(pos, i-pos, "<h"+string(1, '0'+cnt)+">");pos = text.find("\n");text.insert(pos, "</h"+string(1, '0'+cnt)+">");pos = text.find("#");}}else if(text[0]=='*'){text.insert(0, "<ul>\n"); text.insert(text.size()-1, "\n</ul>");size_t pos=text.find("*");while(pos!=string::npos){int i=pos+1;while(text[i]==' ') i++;text.replace(pos, i-pos, "<li>");size_t nxtp = text.find("\n", pos);text.insert(nxtp, "</li>");pos = text.find("*");} }else{text="<p>"+text;text.insert(text.size()-1,"</p>");}cout<<text;text="";}line="";if(f) break;if(!getline(cin, line)) f=true;}return 0;
}