T1:工业题 基本思路   这题有一个重要的小转化: 我们将原来的函数看作一个矩阵,\(f(i,j-1)*a\)相当于从\(j-1\)向右走一步并贡献a,\(f(i-1,j)*b\)相当于从\(i-1\)向下走一步并贡献b   那么问题就转化成了求从第\(0\)行与第\(0\)列的所有点走到点\((m,n)\)的所有方案数的总贡献   在一个点,对于他之前的点的所有走法,他都有可能向下或右走并带来贡献,所以是统计所有方案数.   易知从点\((i,j)\)到点\((m,n)\)的走的步数是\(m…
题面:https://www.cnblogs.com/Juve/articles/11484209.html 工业: 推一个式子,AC 没有用组合数....推了2个多小时 我sbsbsbsbsbsbsbsbsbsbsbsbsbsbsb #include<iostream> #include<cstdio> #include<cstring> #define int long long using namespace std; const int MAXN=3e5+5;…
题解 本题不用什么推式子,找规律(而且也找不出来) 可以将整个式子看成一个 \(n×m\) 矩阵 考虑 \(f_{i,j}\),它向右走一步给出 \(f_{i,j}×a\) 的贡献,向下走一步给出 \(f_{i,j}×b\) 的贡献,那么它到 \(f_{n,m}\) 给出 \(f_{i,j}×a^{m-j}+f_{i,j}×b^{n-i}\) 的贡献 但是,它到终点会有不同的走法,这个用组合数解即可,注意对于 \(f_{i,0}\) 它第一步只能向右走,因为向下的数是确定的.其它同理 预处理出阶…
简单的区间 $update$ 终于$AC$了 找到$(sum[r]+sum[l](sum表示以中间点为基准的sum)-mx)\%k==0$的点 注意这里$sum$表示是以$mid$为基准点,(即$sum[l]$为后缀和,$sum[r]$为前缀和) 回忆$(sum[r]-sum[l])\%k==0$这个经典问题做法(入阵曲简化版),开桶,桶里维护$sum[l]\%k$,那么$r$贡献就是桶里$sum[r]\%k$个数 于是这个题开桶维护$sum$,问题转化为求$max$即可 记录$max$位置是否…
工业题 题解 抱歉,题解没时间写了 代码 #include<bits/stdc++.h> using namespace std; #define ll long long #define A 6666666 #define mod 998244353 ll jie[A],ni[A],acnt[A],bcnt[A]; ll fheng[A],fshu[A]; ll n,m,a,b; ll meng(ll x,ll k){ ll ans=1; for(;k;k>>=1,x=x*x%m…
T1 工业题 这波行列看反就非常尴尬.....口糊出所有正解想到的唯独行列看反全盘炸列(因为和T1斗智斗勇两个半小时...) 这题就是肯定是个O(n+m)的,那就往哪里想,a,b和前面的系数分开求,前面系数显然是小学学过的走步数方法问题,排列组合搞掉就行,a,b分别是向下走和向右走的步数.然后会打快速幂,会打费马小定理,会组合数学就可以过掉.这里关于系数有两种不同求法. 第一个是打表出的规律,第二个是按照(i,j)(n,m)的位置求得. 1 #include<bits/stdc++.h> 2…
noip模拟44 solutions 这一场抱零的也忒多了,我也只有45pts 据说好像是把几套题里面最难的收拾出来让我们考得 好惨烈啊,这次的考试我只有第一题骗了40pts,其他都抱零了 T1 Emotional Flutter 这个我直接用线段树维护解集, 这样的,你不能踩到每一个黑块,所以每一个黑块都对应着一个不踩他的范围 我们用线段树维护这些范围的交集,因为值域有点大所以炸了 40pts #include<bits/stdc++.h> using namespace std; #def…
题解 一道环套树的最小点覆盖题目,所谓环套树就是有在 \(n\) 个点 \(n\) 条边的无向联通图中存在一个环 我们可以发现其去掉一条环上的边后就是一棵树 那么对于此题,我们把所有 \(x\) 方点当点 \(y\) 方点当边,随便找一条环上的边删掉,然后分别从此边的两个端点做树形 \(dp\) 对于一条边上的两个点,我们一定要选一个,但不需要都选,类似例题 所以方程很好推,\(dp_{i,0}\) 表示不选 \(i\) 后覆盖 \(i\) 子树的最小费用,\(dp_{i,0}\) 表示选 \(…
矩阵游戏 考试时思路一度和正解一样,考试到最后还是打了80分思路,结果80分打炸了只得了40分暴力分 题解 算出来第一列的总值,每次通过加每两列之间的差值得出下一列的总值 算第一列我们只需要让当前点*行增倍的数量就行了 for(ll i=1;i<=n;i++){ nowlie=(nowlie+elephant(i,1)*hang[i])%mod; sum=(sum+hang[i]); } 算其他列 nowlie=(nowlie+sum)%mod; 可能这一列会加倍只需乘上就行了 ans=(ans…
题解 题如其名,是挺玄学的. 我们发现每个值是 \(-1\) 还是 \(1\) 只与它的次数是奇是偶有关,而 \(\sum_j^{j\le m}d(i×j)\) 又只与其中有多少个奇数有关 对于 \(x\) 其 \(d(x)\) 只有在 \(x\) 是完全平方数时才是奇数(易证),那么我们将每个 \(i\) 表示为 \(p×q^2\) 其中 \(p\) 的因子次数全为 \(1\) 那么能对其造成贡献的 \(j\) 只有当 \(p_j=p_i\),而这种数的个数为 \(\sqrt{\frac{m}…