总体来说……是在懵逼中度过的六天
最可惜的是一直没时间去芙蓉街,我想吃章鱼小丸子啊啊啊啊
Day1
搜索与高精齐飞,前缀共折半一色
前缀和是个比较常用的东西在此略过不表,但是差值维护……挺神奇的,改变一个区间只需改变首尾位置与前/后的差值,再把差值的前缀和求出就是原数组
高精压位,应该平时用不到?
注:printf(“%04d”,x)可补0
以前没有接触过two point这样的,大体思路是二分
Day2
在全排列处理重复时只需要除掉重复的个数的阶乘,比如:
1 2 3 4 5 5!
1 1 3 4 5 5!/2
1 1 1 4 5 5!/3!
1 1 1 1 5 5!/4!
1 1 2 2 5 5!/2!/2!
重点是DP,但是某大神他没有讲树形DP/状压DP等看起来很高端我也不会偏偏老师让重点听的DP,总之真是造化弄人命运无常orz
讲了比较新颖的思路,先写出搜索,再转为记忆化搜索,如果闲的没事干可以变成时间复杂度一样的DP
但是这样写出来的DP真是怎么看怎么别扭,而且想不明白最后的结果在0里还是在1里……还是搜索吧
Day3
数论虐我千百遍,我待数论……谁要待数论如初恋!感觉自己宛如一个智障的一天,心情糟糕ヾ(。`Д´。)
重载运算符看起来挺方便的?
struct BigInt
{
int n,a[1003];
};
BigInt operator +(const BigInt & a,const BigInt & b)
{
BigInt c;
static int s[1003];
memset(s,0,sizeof(s));
for(int i=0;i<a.n;i++)
s[i]=a.a[i];
}
此题无力回天只能先记下来
// Extended Euclid
//已知a,b,c,p 求ax+by=c的解
void exEuclid(int a, int b, int& x, int& y)
{
if (b == 0)
{
if (a != 1) puts("Mei you jie la QwQ");
x = 1;
y = 0;
return;
}
int k = a / b, c = a % b;
exEuclid(b, c, x, y);
int xp = x, yp = y;
x = yp;
y = xp - k * yp;
}