e307. 請讓我留在你的回憶裡
e307: 請讓我留在你的回憶裡
題目連結:e307: 請讓我留在你的回憶裡
題意:
輸入只有一行,含有一個字串 s (|s|<=10^8)
s 含有所有可印出的字元(包含空白),請你移除其中的空白
s 含有所有可印出的字元(包含空白),請你移除其中的空白
移除方式如下:
若連續的空白數為偶數,則全部移除
若為奇數,則移除到只剩下一個空白
std::string 的處理很慢,而字元陣列較快
time:0.1s
memory used:153.4MB
code:
mmap()寫法:
time:0.4s
memory used:293.1MB
code:
本人的分享到此結束
若有更好的想法或建議,請在留言區留言喔
若連續的空白數為偶數,則全部移除
若為奇數,則移除到只剩下一個空白
解法:
C++:
開一個超大char陣列,把輸入一次讀進去,一次處理完再輸出std::string 的處理很慢,而字元陣列較快
time:0.1s
memory used:153.4MB
code:
- #pragma GCC optimize("O3", "unroll-loops")
- #include<ios>
- char s[100<<20],answer[100<<20];
- inline void removespace(char* answer,char const* string,size_t size){
- for(size_t i=0;i<size;){
- if(string[i]!=' '){
- *answer++ = string[i];
- ++i;
- }else{
- uint_fast64_t n=0;
- do{
- ++n;
- ++i;
- }while(string[i]==' ');
- if(n&1)*answer++ = ' ';
- }
- *answer=0;
- }
- }
- int main(){
- fread_unlocked(s,1,100<<20,stdin);
- removespace(answer,s,100<<20);
- fputs_unlocked(answer,stdout);
- }
Python:
replace() 超好用的~
time:0.4s
memory used:287.2MB
code:
- from sys import stdin
- from sys import stdout
- stdout.write(stdin.read().replace(' ', ''))
mmap()寫法:
time:0.4s
memory used:293.1MB
code:
- import mmap
- from sys import stdout
- from sys import stdin
- import contextlib
- with contextlib.closing(mmap.mmap(stdin.fileno(),0,access=mmap.ACCESS_READ)) as mm:
- s=mm.readline().decode().replace(' ','')
- stdout.write(s)
本人的分享到此結束
若有更好的想法或建議,請在留言區留言喔
陣列可以開這麼大喔
ReplyDelete可以
Delete不用外建函式吧
ReplyDelete是不用
Delete只是這樣可讀性比較高,比較好理解