方程的解
考场上手推了 (exgcd)
然后挂成了 (20)
确实有些问题没有想清楚:
(1.) (ax+0y=c) 得在 (c\% a=0) 时有无数个解,反之没有
(2.) 计算正整数解的时候得调一个到 (>0) 然后维护另一个,这里的细节得想明白写对了
exgcd(a,b,x,y); x*=c; y*=c;
while(x<0) x+=b,y-=a;
//x>0
int res=0;
y+=(x/b)*a; x%=b;
if(y<=0) return puts("0"),void();
res=(x>0&&y>0)+y/a-(!(y%a));
Matrix
定义 (f_{i,j}) 为左端点结束在 (i) 以及之前的区间有 (j) 个区间在右边放了数字
和 (dp) 搬运工的几个题目的状态定义是有点像的
转移需要预处理两个数组,(l_i,r_i) 分别表示有多少行的左/右区间在 (i) 结束
(f_{i,j} imes= A_{i-j-l[i-1]}^{l[i]-l[i-1]}) 判断状态是不是可行,顺便乘上排列数
(f_{i+1,j}+=f_{i,j},f_{i+1,j+1}+=f_{i,j} imes (r_{i+1}-j))
分别在左边和右边放数字即可
思路的变换着实很妙,转到这个上去计数的思路积累了
光/CF274E
考试的时候写了 (2h) 但是写得有点不太得法,有些地方确实是写复杂了
以后立下来一个 (flag):如果 (1h) 内没有写完的题目,直接换掉去写暴力,防止其阻碍全局
不过对于 (3h) 场一小时也很珍贵了
挺难取舍的其实
上次考试调模拟题做了 (3h) ,这次又来了一个
其实也不知道自己为啥要刚这题,可能是为了逃避 数据结构 和 (dp) 吧,以后不能这样了
以后冲破头也要去干dp出来,要不然考试的时间拿来调代码和自闭就太无意义了
这题题解:当时自己想的是直接维护所有的对角线,然后二分最早的位置
就写就行了,诚然,写不出来