【題目】:
\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
後面不是true
或false
的話,就輸出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成員函式指定物件沒有儲存,因此沒有關聯的例項要構造...