2024.11.10 鲜花

news/2024/11/14 13:49:34/文章来源:https://www.cnblogs.com/xrlong/p/18535925

Triple 扩展

像神一样呐
愛のネタバレ
「別れ」っぽいな
人生のネタバレ
「死ぬ」っぽいな
なにそれ意味深で
かっこいいじゃん
それっぽい単語集で踊ってんだ
失敬
とぅ とぅる とぅ とぅ とぅる
“風”
とぅ とぅる とぅ とぅ とぅる
“風”
とぅ とぅる とぅ とぅ とぅる
“風”
ぽいじゃん ぽいじゃん
とぅ とぅる とぅ とぅ とぅる
“風”
とぅ とぅる とぅ とぅ とぅる
“風”
とぅ とぅる とぅ とぅ とぅる
神っぽいな
もういいぜ もういいぜ それ
もういいぜ もういいぜ
逆に興奮してきたなあ
おっきいね おっきいね 夢
おっきいね おっきいね
景気いいけど 品性はthe end
うええい うええい
"Gott ist tot"
神っぽいな それ 卑怯
神っぽいな それ "my god"
アイウォンチュー ウォンチュー
IQが下がっていく感じ
邪心ぽいな それ 畢竟
邪心ぽいな それ "my god"
アイヘイチュー ヘイチュー
害虫はどっち
その髪型 その目 その口元
その香水 その服 そのメイク
アレっぽいな それ 比況
アレっぽいな それ
その名言 その意見 その批評
そのカリスマ
そのギャグ そのセンス
神っぽいな それ 卑怯
ぽいな ぽいな ぽい 憧れちゃう
とぅ とぅる とぅ とぅ とぅる
“風”
とぅ とぅる とぅ とぅ とぅる
“風”
とぅ とぅる とぅ とぅ とぅる
“風”
ぽいじゃん ぽいじゃん
とぅ とぅる とぅ とぅ とぅる
“風”
とぅ とぅる とぅ とぅ とぅる
“風”
とぅ とぅる とぅ とぅ とぅる
神っぽいな
メタ思考する本質は悪意?
人を小馬鹿にしたような作為
無為に生き延びるのは難しい
権力に飲まれて揺らぐ灯り
神を否定し神に成り代わり
玉座で豹変する小物達
批判に見せかけ自戒の祈り
Do you know?
何言ってんの? それ ウザい
何言ってんの? それ
意味がよくわかんないし
眠っちゃうよ マジ
飽きっぽいんだ オーケー
みんな 飽きっぽいんだ オーケー
踊れるやつ
ちょうだい ちょうだい ビーム
きっしょいね きっしょいね それ
きっしょいね きっしょいね
逆にファンになってきたじゃん
ちっちゃいね ちっちゃいね 器
ちっちゃいね ちっちゃいね
天才ゆえ孤独ですね
かっけえ かっけえ
"Gott ist tot"
神っぽいな それ 卑怯
神っぽいな それ "my god"
超健康 健康 言い張って
くたばっていく感じ
ヤケっぽいな それ 畢竟
ヤケっぽいな それ "my god"
もう哀愁 哀愁
エピゴーネンのヒール
そのタイトル その絵
そのストーリー
その音楽 その歌 そのメロディ
アレっぽいな それ 比況
アレっぽいな それ
その名言 その意見 その批評
そのカリスマ
そのギャグ そのセンス
神っぽいな それ 卑怯
ぽいな ぽいな ぽい 憧れちゃうわ
とぅ とぅる とぅ とぅ とぅる
“風”
とぅ とぅる とぅ とぅ とぅる
“風”
とぅ とぅる とぅ とぅ とぅる
“風”
ぽいじゃん ぽいじゃん
とぅ とぅる とぅ とぅ とぅる
“風”
とぅ とぅる とぅ とぅ とぅる
“風”
とぅ とぅる とぅ とぅ とぅる
神っぽいな
愛のネタバレ
「別れ」っぽいな
人生のネタバレ
「死ぬ」っぽいな
すべて理解して患った
無邪気に踊っていたかった 人生

miaomaio:什么玩意,听得脑袋疼,下回请你们听儿歌。

上次鲜花已经讲了这题做法,就不在赘述了。

考虑扩展,形式化的,求:

给定 \(n,m,k\),有 \(n\) 个多项式 \(f_i=\sum\limits_{j=1}^k w_ix^{a_{i,j}},0\le a_{i,j} < 2^m\),求其异或卷积。

显然直接暴力有 \(nm2^m\),或者简单调整一下是 \((n+km)2^m\)

考虑当 \(n\) 较大而 \(k\) 很小时,如 Triple,考虑一些更好的解法。

首先我们容易发现,考虑变换后的函数的 \(o\) 次项系数 \(\widehat{f}=\sum_{i=1}^k s_{o,i}w_ix^o\) 我们的变换系数 \(s\)\(2^k\) 种取值,我们将其压成 \(k\) 位二进制数,\(1\) 表示取 \(-1\)\(0\) 表示取 \(i\),后面就会发现这样定义的深意,并设 \(c_{Now,t}\) 表示状态是 \(t\) 的次数。这里以及以后我们考虑当前是 \(Now\) 次项。

考虑 Triple 的解题过程,考虑枚举 \(t< 2^k\),即 \(t\) 是全集的子集,设 \(z_{i}=\bigoplus_{j\in t} a_{i,j}\),求 \(\sum\limits_{i=0}^{m} x^{z_{i}}\) 的变换,考虑其第 \(Now\) 项的总共 \(2^k\) 个值。

考虑到卷积是线性变换,其第 \(i\) 实际上是求的 \(\sum FMT(x^{z_i})\),考虑到每种 \(c\) 的情况对系数的贡献,这个值显然等于一些 \(c_i\) 有正有负的加起来。

考虑 \(c_i\) 前面的系数,\(z_{i}=\bigoplus_{j\in t} a_{i,j}\),求 \(\sum\limits_{i=0}^{m} x^{z_{i}}\) 本质是在求卷积,所以其相当于是单独卷 \(a_{i,j}\) 的贡献做点乘,简单分析一下,当 \(t\) 的第 \(k\) 位是 \(1\)\(i\) 的第 \(k\) 位也是 \(1\)\(i\) 是状压的 \(s\),而 \(i\) 的第 \(k\) 位是一意味着是负)的时候会有 \(-1\) 的贡献,所以其系数是 \((-1)^{|t\&i|}\)

发现这就是 XOR 变换的系数,于是我们将每个逆变换一下就知道次数了,最后快速幂即可,复杂度 \(n2^k+(m+k)2^{m+k}\)

下面代码实现了 $k=3$ 的 Triple,可以自行更改 $k$,注意要改值域
#include<bits/stdc++.h>
using namespace std;
using llt=long long;
using llf=long double;
using ull=unsigned long long;
#define endl '\n'
#ifdef LOCALFILE *InFile=freopen("in_out/in.in","r",stdin),*OutFile=freopen("in_out/out.out","w",stdout);
#elseFILE *InFile=stdin,*OutFile=stdout;
#endifconst int N=1e5+3,MOD=998244353,Inv=(MOD+1)/2,M=17,K=3;
int Add(int a,int b){return (a+=b)>=MOD?a-MOD:a;}
int Sub(int a,int b){return (a-=b)<0?a+MOD:a;}
int n,m,ck,h[1<<K|3][1<<M|3],sm[1<<K|3],c[N][K+3],tim[1<<M|3],cw[K+3],sw[1<<K|3],aas[1<<M|3];int Fpw(int a,int b){int ans=1;while(b){if(b&1) ans=1ll*a*ans%MOD;a=1ll*a*a%MOD,b>>=1;}return ans;
}
void Fmt(int *f,int l,const function<void(int &,int &)> &F){for(int i=1;i<l;i<<=1) for(int j=0;j<l;++j) if(j&i) F(f[j^i],f[j]);}
const auto Xor=[](int &a,int &b){int t=a; a=Add(a,b),b=Sub(t,b);};
const auto IXr=[](int &a,int &b){int t=a; a=1ll*(a+b)*Inv%MOD,b=1ll*(t-b+MOD)*Inv%MOD;};int main(){ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);cin>>n>>m; ck=3;for(int i=0;i<ck;++i) cin>>cw[i];for(int i=0;i<1<<ck;++i) for(int j=0;j<ck;++j) sw[i]=(i>>j&1)?Sub(sw[i],cw[j]):Add(sw[i],cw[j]); // sw[i] 表示状态是 i 的值。for(int i=1;i<=n;++i){for(int j=0;j<ck;++j) cin>>c[i][j];++h[0][0]; for(int j=1;j<1<<ck;++j){int low=j&-j,p=__lg(low); ++h[j][sm[j]=sm[j^low]^c[i][p]];} // sm 是异或和,h 维护的是枚举 t 后的多项式。}for(int i=0;i<1<<ck;++i) Fmt(h[i],1<<m,Xor); // 变换 hfor(int i=0;i<1<<m;++i){for(int j=0;j<1<<ck;++j) tim[j]=h[j][i]; Fmt(tim,1<<ck,IXr); // 复制并做 IFMTaas[i]=1; for(int j=0;j<1<<ck;++j) aas[i]=1ll*aas[i]*Fpw(sw[j],tim[j])%MOD; // 统计}Fmt(aas,1<<m,IXr); for(int i=0;i<1<<m;++i) cout<<aas[i]<<' ';
}

考虑做 OR 卷积,状态设计和推导基本是一样的,就是最后做逆变换是 AND 卷积的逆变换。

下面代码实现了 OR 卷积,没有题,但是和暴力在 $n\le 1000,m\le 10,k\le 10$ 值域在模数范围内的随机数据过拍了,应该不会错
#include<bits/stdc++.h>
using namespace std;
using llt=long long;
using llf=long double;
using ull=unsigned long long;
#define endl '\n'
#ifdef LOCALFILE *InFile=freopen("in_out/in.in","r",stdin),*OutFile=freopen("in_out/out.out","w",stdout);
#elseFILE *InFile=stdin,*OutFile=stdout;
#endifconst int N=1003,MOD=998244353,M=10,K=10;
int Add(int a,int b){return (a+=b)>=MOD?a-MOD:a;}
int Sub(int a,int b){return (a-=b)<0?a+MOD:a;}
int n,m,ck,h[1<<K|3][1<<M|3],sm[1<<K|3],c[N][K+3],tim[1<<M|3],cw[K+3],sw[1<<K|3],aas[1<<M|3];int Fpw(int a,int b){int ans=1;while(b){if(b&1) ans=1ll*a*ans%MOD;a=1ll*a*a%MOD,b>>=1;}return ans;
}
void Fmt(int *f,int l,const function<void(int &,int &)> &F){for(int i=1;i<l;i<<=1) for(int j=0;j<l;++j) if(j&i) F(f[j^i],f[j]);}
const function<void(int &,int &)> Or=[](int &a,int &b){b=Add(a,b);},IOr=[](int &a,int &b){b=Sub(b,a);},IAd=[](int &a,int &b){a=Sub(a,b);};int main(){ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);cin>>n>>m>>ck;for(int i=0;i<ck;++i) cin>>cw[i];for(int i=0;i<1<<ck;++i) for(int j=0;j<ck;++j) if(i>>j&1) sw[i]=Add(sw[i],cw[j]); // sw[i] 表示状态是 i 的值。for(int i=1;i<=n;++i){for(int j=0;j<ck;++j) cin>>c[i][j];++h[0][0]; for(int j=1;j<1<<ck;++j){int low=j&-j,p=__lg(low); ++h[j][sm[j]=sm[j^low]|c[i][p]];} // sm 是或和,h 维护的是枚举 t 后的多项式。}for(int i=0;i<1<<ck;++i) Fmt(h[i],1<<m,Or); // 变换 hfor(int i=0;i<1<<m;++i){for(int j=0;j<1<<ck;++j) tim[j]=h[j][i]; Fmt(tim,1<<ck,IAd); // 复制并做 IFMT,做的是 IAndaas[i]=1; for(int j=0;j<1<<ck;++j) aas[i]=1ll*aas[i]*Fpw(sw[j],tim[j])%MOD; // 统计}Fmt(aas,1<<m,IOr); for(int i=0;i<1<<m;++i) cout<<aas[i]<<' ';
}

AND 类似。

感觉可以上升到子集卷积,有时间在说吧。

P


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/830820.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python decimal模块用法

decimal 模块:decimal意思为十进制,这个模块提供了十进制浮点运算支持1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。在Python中,将变量声明为 Decimal 类型通常用于需要高精度和小数运算的场合。Decimal 类型属于 decimal 模块,提…

使用Visual Studio Code 快速新建Net项目

前言最近,总是听大家说Visual Studio Code写后端代码非常好用,蓝后,就自己亲身体验了一下,还是很香的。正文1.首先需要安装Dotnet SDK,我这里安装的8.0版本,如下图:2.安装完DotNet SDK,就可以使用命令创建控制台应用了,如下图:3.新建的控制台应用如下图,有一丢丢的简…

20222402 2024-2025-1《网络与系统攻防技术》实验四实验报告

一、实验内容 本周学习内容 计算机病毒(Virus):通过感染文件(可执行文件、数据文件、电子邮件等)或磁盘引导扇区进行传播,一般需要宿主程序被执行或人为交互才能运行 蠕虫(Worm):一般为不需要宿主的单独文件,通过网络传播,自动复制通常无需人为交互便可感染传播 恶意移动代码…

GeoHash处理经纬度,降维,空间填充曲线

个人博客:无奈何杨(wnhyang) 个人语雀:wnhyang 共享语雀:在线知识共享 Github:wnhyang - Overview参考 https://segmentfault.com/a/1190000042971576 GeoHash原理以及代码实现_geohash编码-CSDN博客 GeoHash代码实现--java_geohash java代码示例-CSDN博客 在线经纬度距离…

windows环境下cmd窗口打开就进入到对应目录,一般人都不知道~

前言 很久以前,我还在上一家公司的时候,有一次我看到我同事打开cmd窗口的方式,瞬间把我惊呆了。原来他打开cmd窗口的方式,不是一般的在开始里面输入cmd,然后打开cmd窗口。而是另外一种方式。 我这个同事是个技术控,喜欢研究新的技术,研究一些提高效率的小窍门。这一方面…

黑马PM- B端产品-客户管理

客户管理公海管理商机管理

C盘满了,C盘无损扩容,简单实现

C盘爆满原因很多,无外乎当年固态硬盘贵,C盘分区过小,或者装系统时无意把分区分的太小,这就造成了一个困扰,C盘满了,变成红色,造成软件无法运行,电脑无法启动。如果重新分区,电脑上的资料就没了,所以今天就来介绍一款不用重装系统,扩充C盘容量的方法,操作非常简单,…

SchedulingConfigurer 实现定时任务(动态修改cron,解决@Scheduled需重启服务问题)

通过实现Sc接口,实现定时任务,解决@Scheduled的定时任务改动cron需要服务重启的问题。@Slf4j @Component public class ATestScheduleJob implements SchedulingConfigurer {@Value("${a.c:0/5 * * * * ?}")private String cron1;@Overridepublic void configureT…

20222319 2024-2025-1 《网络与系统攻防技术》实验四实验报告

1.实验要求 1.1 实验内容 一、恶意代码文件类型标识、脱壳与字符串提取 对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下: (1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具…

黑马PM- B端产品- CRM产品概述

CRM的定义CRM的核心要素CRM的设计思路

推荐模型梳理

Summary 目录Summary标准序列推荐模型其他推荐模型FPMCDNN(Pooling)GRU4Rec(RNN-based)GRU4Rec+(RNN-based)Caser(CNN-based)SASRec(Transformer-based)DIN(Transformer-based)BERT4Rec(Transformer-based)TiSASRec(Transformer-based)FMLP-Rec(Transformer-b…