真~签到题qwq

昨天在考场上先写了个70分暴力dp,然后发现好像可以优化。因为结界技能的模型相当于要求出 对于每个物品,仅仅不选它的背包是什么。。。。  于是当场脑补出两种做法: 前缀和后缀背包卷积NTT、以及单点删除背包的分治做法。

想了想两种做法都是 O(N^2 log N) 的,并且NTT我更有把握一点(写得多不太容易gg),所以果断写了NTT。。。

复测完之后,带log的只有NTT被卡成暴力分gg,其他的分治做法的都被放过去了qwq(虽然正解没log)。

艹NTT的log大的上天,我以后再也不写了mmp!!!

正解是这样的:仔细想想不难发现,这个背包删除物品其实可以做到 O(N),逆着退一下就好了hhhhhh。

GG

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int ha=998244353,maxn=205;
int F[maxn][105],f[maxn],g[maxn],tp[maxn];
int n,m,u,v,ni[maxn],op,num,now,P[maxn],Q;
inline int add(int x,int y){ x+=y; return x>=ha?x-ha:x;}
inline int ksm(int x,int y){ int an=1; for(;y;y>>=1,x=x*(ll)x%ha) if(y&1) an=an*(ll)x%ha; return an;} inline void update(int *a,int x){
a[0]=add(a[0],a[1]*(ll)u%ha);
for(int i=1;i<=tp[x];i++) a[i]=add(a[i]*(ll)v%ha,a[i+1]*(ll)u%ha);
} inline void output(){
for(int i=1,ans;i<=n;i++){
ans=0;
for(int j=1;j<=tp[i];j++) ans=add(ans,F[i][j]*(ll)j%ha);
printf("%d ",ans);
}
} inline void calc(){
memset(f,0,sizeof(f)); f[0]=1;
for(int i=1;i<=num;i++){
v=F[P[i]][0],u=add(1,ha-v);
for(int j=i;j>=0;j--) f[j]=add(f[j]*(ll)v%ha,j?f[j-1]*(ll)u%ha:0);
} for(int i=1,ans,iv,iu;i<=num;i++){
v=F[P[i]][0],u=add(1,ha-v),ans=0;
iv=ksm(v,ha-2),iu=ksm(u,ha-2); if(v){
g[0]=f[0]*(ll)iv%ha;
for(int j=1;j<num;j++) g[j]=add(f[j],ha-g[j-1]*(ll)u%ha)*(ll)iv%ha;
}
else for(int j=0;j<num;j++) g[j]=f[j+1]; for(int j=0;j<num;j++) ans=add(ans,ni[j+1]*(ll)g[j]%ha);
printf("%d ",ans*(ll)u%ha);
} puts("");
} inline void solve(){
scanf("%d",&Q);
while(Q--){
scanf("%d",&op);
if(!op){
scanf("%d%d%d",&now,&u,&v);
u=u*(ll)ksm(v,ha-2)%ha,v=add(1,ha-u);
update(F[now],now);
}
else{
scanf("%d",&num);
for(int i=1;i<=num;i++) scanf("%d",P+i);
calc();
}
} output();
} int main(){
ni[1]=1;
for(int i=2;i<=201;i++) ni[i]=-ni[ha%i]*(ll)(ha/i)%ha+ha;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&now),F[i][now]=1,tp[i]=now;
solve();
return 0;
}

  

「CTSC2018」假面的更多相关文章

  1. loj#2552. 「CTSC2018」假面

    题目链接 loj#2552. 「CTSC2018」假面 题解 本题严谨的证明了我菜的本质 对于砍人的操作好做找龙哥就好了,blood很少,每次暴力维护一下 对于操作1 设\(a_i\)为第i个人存活的 ...

  2. LOJ#2552. 「CTSC2018」假面(期望 背包)

    题意 题目链接 Sol 多年以后,我终于把这题的暴力打出来了qwq 好感动啊.. 刚开始的时候想的是: 设\(f[i][j]\)表示第\(i\)轮, 第\(j\)个人血量的期望值 转移的时候若要淦这个 ...

  3. LOJ 2552 「CTSC2018」假面——DP

    题目:https://loj.ac/problem/2552 70 分就是 f[i][j] 表示第 i 个人血量为 j 的概率.这部分是 O( n*Q ) 的:g[i][j][0/1] 表示询问的人中 ...

  4. LOJ2557. 「CTSC2018」组合数问题

    LOJ2557. 「CTSC2018」组合数问题 这道题是我第一道自己做完的题答题.考场上面我只拿了41分,完全没有经验.现在才发现其实掌握了大概的思路还是不难. 首先模拟退火,通过了1,2,6,9, ...

  5. Loj #2554. 「CTSC2018」青蕈领主

    Loj #2554. 「CTSC2018」青蕈领主 题目描述 "也许,我的生命也已经如同风中残烛了吧."小绿如是说. 小绿同学因为微积分这门课,对"连续"这一概 ...

  6. Loj #2553. 「CTSC2018」暴力写挂

    Loj #2553. 「CTSC2018」暴力写挂 题目描述 temporaryDO 是一个很菜的 OIer .在 4 月,他在省队选拔赛的考场上见到了<林克卡特树>一题,其中 \(k = ...

  7. LOJ #2533. 「CTSC2018」暴力写挂(边分治合并)

    题意 给你两个有 \(n\) 个点的树 \(T, T'\) ,求一对点对 \((x, y)\) 使得 \[ depth(x) + depth(y) - (depth(LCA(x , y)) + dep ...

  8. 「CTSC2018」暴力写挂

    毫无$ Debug$能力 全世界就我会被卡空间.jpg LOJ #2553 UOJ #400 Luogu P4565 题意 给定两棵树$ T,T'$,求一组点对$ (x,y)$使得$deep(x)+d ...

  9. LOJ 2553 「CTSC2018」暴力写挂——边分治+虚树

    题目:https://loj.ac/problem/2553 第一棵树上的贡献就是链并,转化成 ( dep[ x ] + dep[ y ] + dis( x, y ) ) / 2 ,就可以在第一棵树上 ...

随机推荐

  1. Python字符串的常用操作学习

    >>> name = "I love my job!" >>> name.capitalize() #首字母大写 'I love my job! ...

  2. 易语言.开源(绝地求生多功能盒子)类似LOL盒子

    下载地址:https://pan.baidu.com/s/1OXwCjGJODkcZVrCwVixu3Q     成品地址:https://pan.lanzou.com/i0rmdwj

  3. Ubuntu下禁用笔记本自带键盘

    想要禁用笔记本自带键盘(Ubuntu)只要2条命令. 1. 打开终端,输入: xinput list ⎡ Virtual core pointer id=2 [master pointer (3)] ...

  4. ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 I: 寻找大富翁

    http://acm.ocrosoft.com/problem.php?cid=1316&pid=8 题目描述 浙江杭州某镇共有n个人,请找出该镇上的前m个大富翁. 输入 输入包含多组测试用例 ...

  5. composer 库无法提交git

    composer require firebase/php-jwt 安装了该库,想提交到版本库,无论如何也提交不上去,.ignore中也没忽略,网上寻找答案,说有个.git文件夹需要删除 PHPSTO ...

  6. Codeforces Round #389 (Div. 2) 752F(树的权值重心)

    题目大意 给定2k个队伍分别住在2k个城市里,需要设定若干个城市,然后选取2个队伍要在它们的最短路径上设一个城市作为休息站 要求设立最少的休息站,然后输出如何安排2个队伍 首先若干个其实就是在坑人,实 ...

  7. 看了就学会之React redux入门示例

    环境准备 为了方便,这里使用create-react-app搭建react环境 create-react-app mydemo 弹出配置 如果需要自定义react的配置,需要运行下面的命令把配置文件弹 ...

  8. BZOJ4552 [Tjoi2016&Heoi2016]排序 【二分 + 线段树】

    题目链接 BZOJ4552 题解 之前去雅礼培训做过一道题,\(O(nlogn)\)维护区间排序并能在线查询 可惜我至今不能get 但这道题有着\(O(nlog^2n)\)的离线算法 我们看到询问只有 ...

  9. 刷题总结——Aeroplane chess(hdu4405)

    题目: Problem Description Hzz loves aeroplane chess very much. The chess map contains N+1 grids labele ...

  10. 汕头市队赛 SRM14 T2 最长上升子序列

    最长上升子序列 (tree.pas/c/cpp) 128MB 1s 有一个长度为n的序列a[i],其中1到n的整数各自在a[i]中出现恰好一次. 现在已知另一个等长的序列f[i],表示a[i]中以第i ...