QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#290568 | #4049. 预处理器 | MoRanSky | 100 ✓ | 2ms | 4320kb | C++23 | 2.4kb | 2023-12-25 05:53:31 | 2023-12-25 05:53:32 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
#define mp make_pair
#define pb push_back
#define fi first
#define se second
template <typename T> void inline read(T &x) {
x = 0; int f = 1; char s = getchar();
while (s < '0' || s > '9') { if (s == '-') { f = -1;} s = getchar(); }
while (s >= '0' && s <= '9') x = x * 10 + (s ^ 48), s = getchar();
x *= f;
}
template <typename T> bool inline chkMin(T &x, T y) { return y < x ? x = y, 1 : 0; }
template <typename T> bool inline chkMax(T &x, T y) { return y > x ? x = y, 1 : 0; }
const int N = 10005;
map<string, int> ID;
string loc[N];
vector<int> fs[N];
int ys[N];
bool vis[N];
int idx = 0;
int inline id(string s) {
if (ID.count(s)) return ID[s];
loc[++idx] = s;
ID[s] = idx;
return idx;
}
int n;
string s;
bool inline chk(char c) {
if (c == '_' || (c <= 'Z' && c >= 'A') || (c <= 'z' && c >= 'a') || (c <= '9' && c >= '0')) return 1;
return 0;
}
void inline bd(int u) {
string now = "";
for (char c: loc[u]) {
if (chk(c)) now += c;
else {
if (now.size()) fs[u].pb(id(now));
fs[u].pb(-(int)c);
now = "";
//putchar(c);
}
}
if (now.size()) fs[u].pb(id(now));
}
void inline rmk(string a, string b) {
int p = id(a), q = id(b);
ys[p] = q;
}
void inline dw(string a) {
int p = id(a);
ys[p] = 0;
}
void inline ex(int u);
void inline out(string o) {
string now = "";
for (char c: o) {
if (chk(c)) now += c;
else {
if (now.size()) ex(id(now));
now = "";
putchar(c);
}
}
if (now.size()) ex(id(now));
}
void inline ex(int u) {
if (vis[u] || !ys[u]) {
cout << loc[u];
return;
}
vis[u] = 1;
int v = ys[u];
if (!fs[v].size()) bd(v);
for (int v: fs[v]) {
if (v >= 0) ex(v);
else putchar(-v);
}
vis[u] = 0;
}
int main() {
cin >> n; getline(cin, s);
while (n--) {
getline(cin, s);
if (s[0] == '#') {
if (s[1] == 'd') {
int p = -1;
for (int i = 8; i < s.size(); i++)
if (s[i] == ' ') {
p = i;
break;
}
string name = s.substr(8, p - 8);
string content = s.substr(p + 1, s.size() - (p + 1));
// cout << name << "->>" << content << endl;
// M[name] = content;
rmk(name, content);
} else {
string name = s.substr(7, s.size() - 7);
dw(name);
}
puts("");
} else {
out(s);
puts("");
}
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 10
Accepted
time: 1ms
memory: 4276kb
input:
1 printf("Hello, world!\n");
output:
printf("Hello, world!\n");
result:
ok single line: 'printf("Hello, world!\n");'
Test #2:
score: 10
Accepted
time: 1ms
memory: 4320kb
input:
5 #define PI 3.14159 #define E 2.71828 std::cout << PI * r * r << std::endl; std::cout << log10(x) / log10(E) << std::endl; std::cout << "E^(PI * i) + 1 = 0" << std::endl;
output:
std::cout << 3.14159 * r * r << std::endl; std::cout << log10(x) / log10(2.71828) << std::endl; std::cout << "2.71828^(3.14159 * i) + 1 = 0" << std::endl;
result:
ok 5 lines
Test #3:
score: 10
Accepted
time: 1ms
memory: 4320kb
input:
5 #define A abc #define B hij A B AB BA B A #undef A A B AB BA B A
output:
abc hij AB BA hij abc A hij AB BA hij A
result:
ok 5 lines
Test #4:
score: 10
Accepted
time: 1ms
memory: 4316kb
input:
9 #define A B B A B C C B A #define B C C A B C C B A #define C [a, b, c] A B C C B A
output:
B B B C C B B B C C C C C C C C C C C C C C [a, b, c] [a, b, c] [a, b, c] [a, b, c] [a, b, c] [a, b, c] [a, b, c] [a, b, c] [a, b, c] [a, b, c] [a, b, c] [a, b, c] [a, b, c] [a, b, c]
result:
ok 9 lines
Test #5:
score: 10
Accepted
time: 1ms
memory: 4152kb
input:
6 #define A A+B+C #define B b+C #define C B+c A*B*C #undef B A*B*C
output:
A+b+B+c+b+C+c*b+B+c*b+C+c A+B+B+c*B*B+c
result:
ok 6 lines
Test #6:
score: 10
Accepted
time: 2ms
memory: 4260kb
input:
100 8czu(!@iNcuVcs9Zu3/a.$Fo{Fij<4.'Y}JZ:6>2%evBhvjA7IItz`85q'pJ 80"<+vdDzt`?D9L\Ryx0y2[Lu Viek6-NfJ X}= b&"Yz8kOQ{?yVq\>C85o*Y,XaEb^?;Cf?{iTg**mSZy?NtY'sD 9PWlvF3vug7v\=gw_um^1S,.rjONR'!~jLF=xrQNAx]P=Ze ; }^<pTuLfJ~y,QN{ 0&oB}2Y)f2V=o|hr3!wl@x36N2X^t&wL!CD)gR guy^??Io;%5~9a/C_`mkk0z4&t7yT\<iNAa+7y...
output:
8czu(!@iNcuVcs9Zu3/a.$Fo{Fij<4.'Y}JZ:6>2%evBhvjA7IItz`85q'pJ 80"<+vdDzt`?D9L\Ryx0y2[Lu Viek6-NfJ X}= b&"Yz8kOQ{?yVq\>C85o*Y,XaEb^?;Cf?{iTg**mSZy?NtY'sD 9PWlvF3vug7v\=gw_um^1S,.rjONR'!~jLF=xrQNAx]P=Ze ; }^<pTuLfJ~y,QN{ 0&oB}2Y)f2V=o|hr3!wl@x36N2X^t&wL!CD)gR guy^??Io;%5~9a/C_`mkk0z4&t7yT\<iNAa+7y(ZOa...
result:
ok 100 lines
Test #7:
score: 10
Accepted
time: 0ms
memory: 4116kb
input:
100 #define a ?!*(\@{$.!(;!'?<(=^ V X o i C I H p M A e L O F P x z h b T K s l t u Q E G m d R D c q J w N y f g U n j r v B S k W a #define b >'[&-~?<@`](!+*(}{+ h g S l A T r N O M C k a w U G H s m E t n v f u e d K b y c W Q o x V B L R I J p i q j D X z F P #define c }{);'|{*?>&\<];!+!| X h c ...
output:
V X o i C I H p M A e L O F P x z h b T K s l t u Q E G m d R D c q J w N y f g U n j r v B S k W ?!*(\@{$.!(;!'?<(=^ h g S l A T r N O M C k ?!*(\@{$.!(;!'?<(=^ w U G H s m E t n v f u e d K >'[&-~?<@`](!+*(}{+ y c W Q o x V B L R I J p i q j D X z F P X h }{);'|{*?>&\<];!+!| z T C P Q M G ?!*(\...
result:
ok 100 lines
Test #8:
score: 10
Accepted
time: 1ms
memory: 4120kb
input:
100 #define b \)&%\<=!$(><[[./*{\ o p R a x m V i F H O X J e K d z Q C G b E M s l t u A W T I N h D c q L w P y f g U n j r v B S k #define p &-~?<@`](!+*(}{+?-| g W T N h X y w A C r s b l k a S Q K E m c t n v M R u e H O d f F G U o x z P B L V I J p i q j D #define W '|{*?>&\<];!+!|{^+" S V j ...
output:
o p R a x m V i F H O X J e K d z Q C G \)&%\<=!$(><[[./*{\ E M s l t u A W T I N h D c q L w P y f g U n j r v B S k g W T N h X y w A C r s \)&%\<=!$(><[[./*{\ l k a S Q K E m c t n v M R u e H O d f F G U o x z P B L V I J &-~?<@`](!+*(}{+?-| i q j D S V j P &-~?<@`](!+*(}{+?-| O g X R y T D C...
result:
ok 100 lines
Test #9:
score: 10
Accepted
time: 1ms
memory: 4060kb
input:
100 #define b X* E x X l q u r h J t j H P S D O d v U e C k Q w M y a z V s F K A m N G W n T b c B L f I R g i o p #define N T> p V E q b j A O N l d a z R G J C i X P I h F W B t U u v L H M n w K k x D r y g S f s o Q c e T m #define P X& K U y Q g A V l b D E e w s k H a r P S M C N m c t n v O...
output:
E x X l q u r h J t j H P S D O d v U e C k Q w M y a z V s F K A m N G W n T X* c B L f I R g i o p p V E q X* j A O T> l d a z R G J C i X P I h F W B t U u v L H M n w K k x D r y g S f s o Q c e T m K U y Q g A V l X* D E e w s k H a r X& S M C T> m c t n v O T u j h d f F G W o x z R B L X I...
result:
ok 100 lines
Test #10:
score: 10
Accepted
time: 1ms
memory: 4140kb
input:
100 #define b V* E x X l q u r h J t j H P S D O d v U e C k Q w M y a z V s F K A m N G W n T b c B L f I R g i o p #define N x> p V E q b j A O N l d a z R G J C i X P I h F W B t U u v L H M n w K k x D r y g S f s o Q c e T m #define P D& K U y Q g A V l b D E e w s k H a r P S M C N m c t n v O...
output:
E x X l q u r h J t j H P S D O d v U e C k Q w M y a z V s F K A m N G W n T V* c B L f I R g i o p p V E q V* j A O x> l d a z R G J C i X P I h F W B t U u v L H M n w K k x D r y g S f s o Q c e T m K U y Q g A V l V* D E e w s k H a r D& S M C x> m c t n v O T u j h d f F G W o x z R B L X I...
result:
ok 100 lines
Extra Test:
score: 0
Extra Test Passed