<--------二
<--------连
点赞+收藏!!!!!!!!!!!
点赞+收藏!!!!!!!!!!!
点赞+收藏!!!!!!!!!!!
重要的事情说3遍!!!!!!!!
T1.乘方
long long 定义
思路十分简单,把(a = 1)的情况特判了就循环b次
中途发现大于1e9或<0就输出-1用内置函数pow也要判断<0
代码就不给了
T2.解密
https://www.acwing.com/blog/content/27870/
T3.逻辑表达式
用栈遍历每一个
()
,再搜索&
,把每一个区块的值算出
再从头遍历一遍
值就求成了!!!
此部分代码参见csp-j2020的表达式
但是!!
找短路这里也得用栈
不过从最深的()
或&
开始放入(从最外层开始遍历)
我这里就放反了,所以一直就不知道哪里错了,因此直接打表|S|小于3和小于5的情况
代码转载
#include <bits/stdc++.h>
#define FOR(i, a, b) for(int i = a; i <= b; i ++ )
#define DOR(i, a, b) for(int i = b; i >= a; i -- )
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
int get (char ch) {
if (ch == '&') return 2;
if (ch == '|') return 1;
if (ch == '(') return 0;
}
stack<int> stk;
stack< pair<int, int> > c;
stack<char> op;
int res1, res2;
int p1, p2;
pair<int, int> m1, m2;
void calc () {
int n1 = stk.top (); stk.pop ();
m1 = c.top (); c.pop ();
int n2 = stk.top (); stk.pop ();
m2 = c.top (); c.pop ();
char opt = op.top (); op.pop ();
if (opt == '&') {
stk.push (n1 & n2);
if (! n2) {
c.push ({m2.first + 1, m2.second});
} else {
c.push ({m1.first + m2.first, m1.second + m2.second});
}
} else if (opt == '|') {
stk.push (n1 | n2);
if (n2 == 1) {
c.push ({m2.first, m2.second + 1});
} else {
c.push ({m1.first + m2.first, m1.second + m2.second});
}
}
}
int main () {
// freopen ("expr.in", "r", stdin);
// freopen ("expr.out", "w", stdout);
string s; cin >> s;
int flg, tmp; flg = tmp = 0;
for (int i = 0; i < s.size (); i ++ ) {
if (s[i] >= '0' && s[i] <= '1') {
tmp = s[i] - '0';
stk.push (tmp);
c.push ({0, 0});
} else {
if (s[i] == '(') {
op.push (s[i]);
} else if (s[i] == ')') {
while (op.top () != '(') calc ();
op.pop ();
} else {
while (op.size () && get (op.top ()) >= get (s[i])) {
calc ();
} op.push (s[i]);
}
}
}
while (op.size ()) calc ();
cout << stk.top () << '\n' << c.top ().first << ' ' << c.top ().second;
return 0;
}
作者:gsc0618
链接:https://www.acwing.com/solution/content/149045/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
T4.上升点列
找最密集的部分,把自由点加到这一部分
n <= 500,所以$n^3$不在话下,因此;
两个点之间的x坐标与y坐标距离之和要靠前他俩就越是这一部分的台湾
最后来算即可
用Floyd比较舒服
T4 Floyd做法:
T2 $O(k)$ 做法qwq
一元二次方程
我也是二分欸
az
我发现我错误的地方了
T4 用dp来做也可以qwq