点此看题面 大致题意: 有\(n\)个区间,每个区间有一个权值,当权值变成\(0\)时消失.每个时刻将覆盖某一位置的所有区间权值减\(1\),求每个时刻有多少个区间在这一刻消失. 前言 整体二分裸题啊,太久没写过,就当练手吧. 整体二分 我们把木板和子弹放在一起,然后以时间为关键字二分. 每次先枚举所有时间小于等于\(mid\)的子弹,在树状数组上把它对应的位置单点修改值加\(1\). 然后,枚举木板,区间查询它所覆盖区间有多少子弹,如果子弹个数大于等于它的权值,就扔到左区间,否则将它权值减去子…
分析 按照被穿过多少次整体二分即可 代码 #include<bits/stdc++.h> using namespace std; #define lb(x) x&(-x) ],ri[],s[],pl[],N; ],ans[],c1[],c2[],d[]; inline void add(int x,int k){while(x<=N)d[x]+=k,x+=lb(x);} inline ;while(x)res+=d[x],x-=lb(x);return res;} inline…
[LOJ#2402][THUPC2017]天天爱射击(整体二分) 题面 LOJ 题解 显然对于每块木板可以二分被打烂的时间. 那么直接上整体二分处理就行了. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<vector> using nam…
思路 和玩游戏一题类似 定义\(A_k(x)=\sum_{i=0}^\infty a_k^ix^i=\frac{1}{1-a_kx}\) 用\(\ln 'x\)代替\(\frac{1}{x}\), 所以就是求 \[ f(x)=\sum_{i=1}^n \ln'(1-a_ix) \] 这样没法快速计算 所以再设\(G(x)=\sum _{i=1}^n (ln(1-a_ix))'\) 所以 \[ G(x)=\sum_{i=1}^n\frac{-a_i}{1-a_ix} \] 所以 \[ f(x)=-…
题意 给定一个长为 \(n\) 的序列 \(\{a_i\}\) 对于 \(k \in [1, n]\) 求 \[ f_k = \sum_{i = 1}^{n} a_i^k \pmod {998244353} \] \(n \le 2 \times 10^5\) 题解 不会牛顿恒等式TAT,参考了这位大佬的博客. 我们令 \(F(x)\) 为 \(f_k\) 的生成函数,我们有 \[ \begin{aligned} F(x) &= \sum_{k} (\sum_{i = 1}^{n} a_i^k)…
https://loj.ac/problem/2403 题解 神仙题. 练习赛的时候想了个假建图. 正解太神仙了. 先把不合法情况判掉. 先对时间离散化,每个时间点开一个点. 然后把他们一次串起来,中间连\((A,0)\)的边. 我们先假设所有的飞机都停到\(B\)上了,然后对于每一架飞机,我们但开一个点. 设这个点为\(now\),来的时间为\(s\),走的时间为\(t\). 那么连\((s,now,1,0),(now,t+1,val,0),(now,s+1,val-val*p,0)\). 先…
题目传送门 题目大意 给出 \(a_{1,2,...,n}\),对于 \(\forall k\in [1,n]\) ,求出: \[\sum_{i=1}^{n}a_i^k \] \(n\le 2\times 10^5\),答案对 \(998244353\) 取模 . 思路 我们考虑对答案构造生成函数: \[F(x)=\sum_{k=0}^{\infty} \sum_{i=1}^{n}a_i^kx^k \] \[=\sum_{i=1}^{n}\frac{1}{1-a_ix} \] \[=\sum_{…
「THUSCH 2017」大魔法师 狗体面太长,帖链接了 思路,维护一个\(1\times 4\)的答案向量表示\(A,B,C,len\),最后一个表示线段树上区间长度,然后每次的操作都有一个转移矩阵,随便搞搞就成了,卡常 Code: #include <cstdio> #include <cstring> namespace io { const int SIZE=(1<<21)+1; char ibuf[SIZE],*iS,*iT,obuf[SIZE],*oS=ob…
「THUWC 2017」随机二分图 解题思路 : 首先有一个 \(40pts\) 的做法: 前 \(20pts\) 暴力枚举最终的匹配是怎样的,check一下计算方案数,后 \(20pts\) 令 \(f[s][i]\) 表示当前左边的点匹配到前 \(i\) 个,右边的点匹配状况是 \(s\) 时继续往下匹配方案数的期望,枚举与 \(i\) 相连的边转移即可. 对于剩下的 \(t=1,t=2\) 的情况,先和 \(t = 0\) 一样直接连 \((a1,b1), (a2,b2)\).然后观察此时…
LOJ 2288「THUWC 2017」大葱的神力 Link Solution 比较水的提交答案题了吧 第一个点爆搜 第二个点爆搜+剪枝,我的剪枝就是先算出 \(mx[i]\) 表示选取第 \(i \sim n\) 个物品所能达到的最大价值,如果当前价值加上后面一段的最大价值都打不到当前最大答案,那么返回 第三个点只有一个包,直接背包 \(f[i][j]\) 表示前 \(i\) 个物品占用空间为 \(j\) 时最大价值 第四.五个点每个物品的体积相同,所以每个包能够放下的物品数量相同,直接建图跑…