QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#913214#4049. 预处理器ETO_leader100 ✓4ms3840kbC++262.7kb2025-02-24 13:00:492025-02-24 13:00:51

Judging History

This is the latest submission verdict.

  • [2025-02-24 13:00:51]
  • Judged
  • Verdict: 100
  • Time: 4ms
  • Memory: 3840kb
  • [2025-02-24 13:00:49]
  • Submitted

answer

#include<bits/stdc++.h>
#define cir(i,a,b) for(int i=a;i<b;++i)
using namespace std;
enum info_type{word,character};
struct unit{
    string info;
    info_type type;
    unit(auto _info,auto _type):info(_info),type(_type){}
};
const auto accepts=(string)("QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm_1234567890");
auto split(string s){
    vector<unit> ures;
    unordered_set<char> accept;
    for(auto&i:accepts) accept.emplace(i);
    auto word_right_it=[&](auto it){
        string res;
        while(it<s.end()&&accept.count(*it)) res+=*it,++it;
        if(!res.empty()) ures.emplace_back(res,word);
        return it;
    };
    auto character_right_it=[&](auto it){
        string res;
        while(it<s.end()&&(!accept.count(*it))) res+=*it,++it;
        if(!res.empty()) ures.emplace_back(res,character);
        return it;
    };
    auto p=s.begin();
    while(p<s.end()) p=character_right_it(word_right_it(p));
    return ures;
}
unordered_map<string,string> symbols;
unordered_set<string> in_stack;
auto expand_s(string s)->string{
    const auto data=split(s);
    string res;
    for(auto&[info,type]:data) if(type==character){
        res+=info;
    }else if(in_stack.count(info)||(!symbols.count(info))){
        res+=info;
    }else{
        in_stack.emplace(info);
        res+=expand_s(symbols[info]);
        in_stack.erase(info);
    }
    return res;
}
auto check_target(string s,const string target){
    stringstream is(s);
    string arg;
    if(!(is>>arg)) return false;
    return arg==target;
}
auto define_info(string s){
    string cur;
    auto it=s.begin();
    auto cntsp=0;
    while(cntsp<1){
        cntsp+=(*it==' ');
        ++it;
    }
    const auto itx=it;
    while(cntsp<2){
        cntsp+=(*it==' ');
        ++it;
    }
    return make_pair(string(itx,it-1),string(it,s.end()));
}
auto undef_info(string s){
    stringstream is(s);
    string x;is>>x>>x;
    return x;
}
auto readints(stringstream&is,auto&args){
    is>>args;
}
auto readints(stringstream&is,auto&...args){
    (readints(is,args),...);
}
auto readints(auto&...args){
    string s;getline(cin,s);
    stringstream is(s);
    readints(is,args...);
}
int main(){
    ios::sync_with_stdio(false),cin.tie(nullptr);
    int n;readints(n);
    cir(i,0,n){
        string line;getline(cin,line);
        if(check_target(line,"#define")){
            const auto[name,str]=define_info(line);
            symbols[name]=str;
            cout<<'\n';
        }else if(check_target(line,"#undef")){
            const auto name=undef_info(line);
            symbols.erase(name);
            cout<<'\n';
        }else{
            cout<<expand_s(line)<<'\n';
        }
    }
    return 0;
}

詳細信息


Pretests


Final Tests

Test #1:

score: 10
Accepted
time: 0ms
memory: 3712kb

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: 0ms
memory: 3840kb

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: 3840kb

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: 3840kb

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: 3712kb

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: 1ms
memory: 3840kb

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: 3ms
memory: 3840kb

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: 2ms
memory: 3712kb

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: 3ms
memory: 3712kb

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: 4ms
memory: 3712kb

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