ydq++ 语言
InversionShadow · · 个人记录
写在前面,本文仅娱乐,请勿参考!!!
基本信息:
名字:ydq++ 1.0.0
发明人:yuandingquan1101
主要框架:
#include <ydq++>
ydq ydqn() begin; // ydq = signed(ydq != int) ydqn = main
ydqrn 0;
end;
与 C++ 的不同:
int = ynt
long long = ydll
unsigned long long = ydq ydll
bool = yol
char = ydar
string = yding
double = ydble
float = ydoat
cin = yin
cout = yout
{ = begin;
} = end;
<< 、 >>(输出输入流) = (空)
头文件只有 #include <ydq++>,它可以代表一切头文件
例:
P1001 A+B Problem
#include <ydq++>
ydq ydqn() begin; // ynt ydqn()
ynt a, b;
yin a b;
yout a + b;
ydqrn 0;
end;
if 语句:
yf (表达式 >> 运行语句1 << 运行语句2)
当然,如果运行语句过长,也可以用函数(见下文)实现。
例:
输出 min(a, b)
#include <ydq++>
ydq ydqn() begin;
ynt a, b;
yin a b;
yout yf (a > b >> b << a);
ydqrn 0;
end;
P5711 【深基3.例3】闰年判断
#include <ydq++>
ydq ydqn() begin;
ynt a;
yin a;
yout yf ((a % 4 == 0 && a % 100 != 0) || (a % 400 == 0) >> 1 << 0);
ydqrn 0;
end;
函数
#include <ydq++>
ynt 函数名;
ynt ydqn() begin;
ynt x, y;
yin x y;
yout 函数名; // 输出函数名
函数名(函数参数) begin; // 调用函数
ydqrn 结果;
end;
ydqrn 0;
end;
例:
P5735 【深基7.例1】距离函数
#include <ydq++>
ydble F();
ydq ydqn() begin;
ydble x1, y1, x2, y2, x3, y3;
yin x1 y1 x2 y2 x3 y3;
yout fixed setprecision(2) F();
F(x1, y1, x2, y2) begin;
ydqrn sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)) + sqrt((x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3)) + sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
end;
ydqrn 0;
end;
循环
ydq++ 没有自带循环,所以循环要写成递归实现。
递归类型 递归名称(变量) begin;
递归终止条件,当然也可以用函数实现
你可以在这里写东西
end;
例:
P1046 [NOIP2005 普及组] 陶陶摘苹果
#include <ydq++>
ynt a[10001], n, sum;
yoid F, G;
ynt ydqn() begin;
G(i);
yin n;
yout F(1);
G(i) begin;
yin a[i];
endl;
F(i) begin;
yf (i == 10 >> return ; << );
sum += yf (n + 30 >= a[i] >> 1 << 0);
i++;
ydqrn F(i);
end;
yout sum;
ydqrn 0;
end;
树:
ydq++ 自带树型结构,名字叫 Family,根节点叫 ancestor,根节点的子树为 son,根节点的左子树为 ancestor__son(这里为名称),假如根节点的左子树为 ancestor__son1,那么根节点的子树为 son1__son(这里为名称),叶子结点有两个称号,一个是该叶子节点的直接根节点名称__son(名称),另一个是 leaf node(这里为名称)。
STL:
max(x,y) -> __BIG(x,y),返回类型为 ydq ydll 的
min(x,y) -> __SMALL(x,y),返回类型为 ydq ydll 的
sort(a + 1, a + n + 1) -> merge_sort(a, 1, n),实现归并, cmp,时间复杂度恒为
yap<类型>名称 同 map<类型>名称,功能一样,但是支持负数下标(数组不支持)。
ydq++ 1.01
-
输入
a -> in(a) -
输出
a -> out(a) -
循环
cir(i -> 1 for n),表示i 从1 \sim n 循环。 -
参数类型可以使用
ydq -> a, 编译器自动转换相应类型。 -
数组定义格式为
a.{10000},表示定义数组a ,大小为10000 。
eg:
luogu P2758:
ydq -> MAXN <- 2100
yding s, b;
ynt dp.{MAXN}.{MAXN};
s -> in(s);
b -> in(b);
s <- " " + s;
b <- " " + b;
cir (i -> 1 for __BIG(s.len(), b.len()) {
dp.{0}.{i} <- i;
dp.{i}.{0} <- i;
}
cir (i -> 1 for s.len()) {
cir (j -> 1 for b.len()) {
yf (s{i} = b{j} >> (dp.{i}.{j} <- dp.{i - 1}.{j - 1}, -> toGO1()) << );
dp.{i}.{j} <- __SMALL(dp.{i - 1}.{j}, dp.{i - 1}.{j - 1}, dp.{i}.{j - 1}) + 1;
}
-> toGO1();
}
dp[s.len()][b.len()] -> out(dp[s.len()][b.len()]);