2020 03 21日常總結 思維題與全面的思考

2021-10-04 05:18:55 字數 4466 閱讀 6593

【題目】:

\color}

【題目】:

你有乙個數 x

xx,初始為 1

11。你有兩種操作,分別為:

【思路】:

\color}

【思路】:

直接模擬會因為爆long long的問題導致**非常複雜,甚至無法編寫。

考慮強大的資料結構——線段樹。建立一棵線段樹,其葉子節點都是對於的乘數,每個非葉子節點的值為其左右兒子的值的乘積對 mod

\text

mod 取模的值。這樣,任意時候都有 x=x=

x=該線段樹的根的值。

操作 1

11 可以直接上,操作 2

22 可以看做是把第 t

tt 次的乘數改為 1

11。因此,我們只需要打乙個線段樹修改即可。

【 程式碼

】:

\color

【程式碼】

const

int n=

1e5+

100;

#define ll long long

ll mod;

int tot,g[n]

;int test_number,q;

struct segment_tree

inline

void

build

(int o,

int l,

int r)

register

int mid=

(l+r)

>>1;

build

(o<<1|

1,mid+

1,r)

;build

(o<<

1,l,mid)

;pushup

(o);

return;}

void

updata

(int o,

int l,

int r,

int p,ll v)

register

int mid=

(l+r)

>>1;

if(p<=mid)

updata

(o<<

1,l,mid,p,v)

;else

updata

(o<<1|

1,mid+

1,r,p,v)

;pushup

(o);

return;}

}sgt;

#define gc getchar()

#define g(c) isdigit(c)

inline ll read()

namespace fast_write

else

}void

print

(ll a,

char c)

}int

main()

}return0;

}

【鏈結

】:

【鏈結】

: 【思路

】:

\color

【思路】

: 很簡單,直接用乙個棧模擬即可。如果not後面不是truefalse的話,就輸出error

#include

using

namespace std;

stack<

bool

> num;

stack oper;

intcti

(string s)

inline

bool

calc()

else

return

false;if

(num.

size()

)else

return

false

; string c=oper.

top(

);oper.

pop();

if(c==

"and"

) num.

push

(x&&y)

;else num.

push

(x||y)

;return

true;}

bool

not(string s)

string s;

bool flag;

intmain()

else num.

push

(not

(s));}

else

flag=

false;}

elseif(

cti(s)

)while

(oper.

size()

&&cti

(oper.

top())

>=

cti(s))}

oper.

push

(s);

flag=

false;}

else

num.

push(!

not(s));

flag=

true;}

}while

(oper.

size()

)}if(num.

size()

!=1)if

(num.

top())

printf

("true");

else

printf

("false");

return0;

}

可是,這樣真的就ac了嗎?不是,有 1

11 個點錯了。為什麼?

因為資料中有如這樣的情況not not true,這種情況下我們的程式會輸出error,但是它實際上是應該輸出true的。我們特殊處理即可。

#include

using

namespace std;

stack<

bool

> num;

stack oper;

intcti

(string s)

inline

bool

calc()

else

return

false;if

(num.

size()

)else

return

false

; string c=oper.

top(

);oper.

pop();

if(c==

"and"

) num.

push

(x&&y)

;else num.

push

(x||y)

;return

true;}

inline

bool

not(string s)

string s;

bool flag,sign;

intmain()

if(s==

"true"

||s==

"false"

) num.

push

(not

(s))

;else

else}}

}}else

flag=

false;}

elseif(

cti(s)

)while

(oper.

size()

&&cti

(oper.

top())

>=

cti(s))}

oper.

push

(s);

flag=

false;}

else

num.

push(!

not(s));

flag=

true;}

}while

(oper.

size()

)}if(num.

size()

!=1)if

(num.

top())

printf

("true");

else

printf

("false");

return0;

}/*注意!需要特殊判斷如not not true這樣的情況,

否則無法通過第七個測試點

*/

這提示我們,只有全面的思考,才能獲得高分或者ac

2020 07 26日常總結 貪心與思維

problem color problem 給你一迭薄煎餅,請你寫乙個程式來指出要如何安排才能使這些薄煎餅由上到下依薄煎餅的半徑由小到大排好。所有的薄煎餅半徑均不相同。要把薄煎餅排好序需要對這些薄煎餅做翻面 flip 的動作。方法是以一抹刀插入一迭薄煎餅中,然後做翻面的動作 也就是說在抹刀上面的薄煎...

2019 08 18 日常總結

一本通1599 題意 在一年前贏得了小鎮的最佳草坪比賽後,fj 變得很懶,再也沒有修剪過草坪。現在,新一輪的最佳草坪比賽又開始了,fj 希望能夠再次奪冠。然而,fj 的草坪非常髒亂,因此,fj 只能夠讓他的奶牛來完成這項工作。fj 有 nn 只排成一排的奶牛,編號為 11 到 nn。每只奶牛的效率是...

5059日常總結

1.乙個函式的形參是const char 實參是可以是char 如果乙個函式的返回值是const char 不能用char 來接收返回值 2.為什麼沒有靜態的建構函式和析構函式?建構函式成員函式使用現有分配構造指定的物件 即存在this。static成員函式指定物件沒有儲存,因此沒有關聯的例項要構造...