docs: 添加仓库地址到README;chore: 整理实验分析;feat: Kruskal最小生成树与图存储结构
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
// 语法:
|
||||
// E := T ('|' T)* // 选择,取较长长度
|
||||
// T := F+ // 连接,长度相加
|
||||
// F := 'a' | '(' E ')' // 原子:一个 a 或括号组
|
||||
// 输出化简后(全为 a)的长度
|
||||
|
||||
static const char *s;
|
||||
static int n, pos;
|
||||
|
||||
static int parse_E(void);
|
||||
static int parse_T(void);
|
||||
static int parse_F(void);
|
||||
|
||||
static int parse_E(void)
|
||||
{
|
||||
int best = parse_T();
|
||||
while (pos < n && s[pos] == '|') {
|
||||
++pos; // consume '|'
|
||||
int t = parse_T();
|
||||
if (t > best) best = t;
|
||||
}
|
||||
return best;
|
||||
}
|
||||
|
||||
static int parse_T(void)
|
||||
{
|
||||
int sum = 0;
|
||||
while (pos < n && s[pos] != ')' && s[pos] != '|') {
|
||||
sum += parse_F();
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
static int parse_F(void)
|
||||
{
|
||||
if (pos < n && s[pos] == 'a') {
|
||||
++pos;
|
||||
return 1;
|
||||
}
|
||||
if (pos < n && s[pos] == '(') {
|
||||
++pos; // consume '('
|
||||
int v = parse_E();
|
||||
if (pos < n && s[pos] == ')') ++pos; // consume ')'
|
||||
return v;
|
||||
}
|
||||
// 理论上不会到达(保证输入合法且不含空串),安全返回 0
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
// 读取一行字符串(仅包含 a | ( )),长度不超过 1e5
|
||||
static char buf[1000005];
|
||||
if (scanf("%1000000s", buf) != 1) return 0;
|
||||
s = buf;
|
||||
n = (int)strlen(s);
|
||||
pos = 0;
|
||||
int ans = parse_E();
|
||||
printf("%d\n", ans);
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user