繁琐的模拟题,本来不打算做的,正当退缩的时候突然发现,好像实现起来代码量挺少的,就那么几个情况,于是写了一会就过了,也不算太复杂,找到了刚学算法的时候做题的那种感觉(雾),模拟大法好啊 ~~
主要是分类讨论,用vector G[maxn]存起来每一类,括号()的全部放到一个vector,不然就下一个vector,读{digit} 的时候用个数组pos储存该vector的元素出现几次即可。
#include <cctype>
#include <cfloat>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <deque>
#include <fstream>
#include <functional>
#include <iomanip>
#include <iostream>
#include <istream>
#include <iterator>
#include <list>
#include <map>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
#define ll long long
#define pll pair<long long,long long>
#define P pair<int,int>
#define eps 1e-4
using namespace std;
const int maxn=1e4+10;
vector<string> G[maxn];
int pos[maxn];
int main() {
char ch;
int idx=0;
string str="";
bool ok=false;
while ((ch=getchar())&&ch!=EOF) {
if (ch==' ') continue;
if (!islower(ch)&&str!="") {
G[idx].push_back(str);
if (!ok) idx++;
str="";
}
if (ch=='{') {
int sum=0;
while (ch=getchar()) {
if (ch==' ') continue;
if (ch=='}') break;
sum=sum*10+ch-'0';
}
pos[idx-1]=sum;
} else if (ch=='(') {
ok=true;
} else if (ch==')') {
ok=false;
idx++;
} else if (islower(ch)) {
str+=ch;
} else if (isupper(ch)) {
str=ch;
}
}
for (int i=0; i<idx; i++) if (pos[i]==0) pos[i]=1;
for (int i=0; i<idx; i++)
for (int k=0; k<G[i].size(); k++)
for (int j=0; j<pos[i]; j++) cout<<G[i][k];
return 0;
}


京公网安备 11010502036488号