2023大联盟8 比赛总结

比赛经历

有点忘了,稍微写一些
本来早上有 n f l s nfls nfls 的,但因为今天大联盟 T 1 T1 T1 是我们学校的题,于是写大联盟
第一题因为下午要我们讲,所以讨论了一下做法,个人感觉第一步把 a + b + a a+b+a a+b+a 拆成 a + b a+b a+b a a a 两个不关联的部分很妙,其他随便贪或者我比较蠢,写了决策单调性优化 d p dp dp
大概过了 40 m i n 40min 40min
T 2 T2 T2 是串串题,看了一遍没什么思路,于是跳
接下来就是恶心的部分了
C C C 题一眼想到一个 n m 2 nm^2 nm2 d p dp dp,遂写,发现过了样例,考虑优化时一眼卷积,于是便直接开始打 n t t ntt ntt,打完之后发现坏了,模数是 1 e 9 + 7 1e9+7 1e9+7,改成 f f t fft fft 之后精度掉没了,这时大概 2 h 2h 2h
其他人 T 3 T3 T3 也没思路,分享了一下解法,我觉得还是我的 n 3 n^3 n3 比较简单,但始终优化不到 O ( n 2 ) O(n^2) O(n2),没办法,拼了个 m = 1145141919 m=1145141919 m=1145141919 的部分分上去
其实一开始我就大概知道 T 4 T4 T4 题意了,因为有人开 T 4 T4 T4 把题意报出来了,我感觉很不可做,于是就没细想
预估分数: 100 + 0 + 40 + 0 = 140 100+0+40+0=140 100+0+40+0=140
实际分数: 100 + 0 + 25 + 0 = 125 100+0+25+0=125 100+0+25+0=125
T 3 T3 T3 特殊性质拼错了,还是要二项式反演

反思

今天题感觉做着很难绷,没有一道题我是有十足的把握能够在赛场上场切的,感觉遗憾就是 T 3 T3 T3 没看到模数 1 e 9 + 7 1e9+7 1e9+7 然后浪费了 $4 0 m i n 0min 0min

题解

T1

a , b , a a,b,a a,b,a 拆成 a + b a+b a+b a a a,然后直接贪即可
我是写的决策单调性优化 d p dp dp,因为 a + b a+b a+b 选的个数一定不降
时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=100100,M=1000100;
int n,m,ans[M],a[N],b[N];
inline int read(){int FF=0,RR=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;return FF*RR;
}
void solve(int l,int r,int ql,int qr){if(l>r) return;int mid=(l+r)>>1;int pos=ql;for(int i=ql;i<=qr;i++){if(mid-2*i<0) break;int val=b[i]+a[mid-2*i];if(val>b[pos]+a[mid-2*pos]) pos=i;}ans[mid]=b[pos]+a[mid-2*pos];solve(l,mid-1,ql,pos),solve(mid+1,r,pos,qr);
}
signed main(){freopen("coin.in","r",stdin);freopen("coin.out","w",stdout);n=read(),m=read();for(int i=1;i<=n;i++) a[i]=read();for(int i=1;i<=n;i++) b[i]=read()+a[i];sort(a+1,a+n+1,greater<int>()),sort(b+1,b+n+1,greater<int>());for(int i=1;i<=n;i++) a[i]+=a[i-1],b[i]+=b[i-1];solve(1,min(m,3*n),0,n);int ANS=0;for(int i=1;i<=min(m,3*n);i++) ANS^=ans[i];for(int i=3*n+1;i<=m;i++) ANS^=ans[3*n];printf("%lld\n",ANS);return 0;
}

T2

感觉很有意思的一道题
首先一个结论是每个串的开头都是 T 0 T_0 T0
考虑贡献只有可能是在两串交接处和末串与 D D D 的交接处和 D D D 内部
我们记 m x s u f i mxsuf_i mxsufi 表示 T i T_i Ti 末尾与 S S S 的开头最多匹配的长度,每次只要跳 b o r d e r border border 就可以找到所有合法串,因为 T 0 T_0 T0 是已知的一串开头,所以我们可以预处理出 t o t i tot_i toti 表示 m x s u f = i mxsuf=i mxsuf=i 的匹配的个数
然后我们只要用类似 k m p kmp kmp 的方式暴力一个一个跳 D D D 即可
至于预处理我用的是字符串哈希进行匹配
细节有些多,时间复杂度 O ( ∑ ∣ D ∣ ) O(\sum |D|) O(D)

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=2000100;
typedef unsigned long long ull;
ull v[2][2],base[2]={1331,131},hS[2][N],hT[2][N],bs[2][N];
int n,mxsuf[N],tot[N];
ull ans[N];
int neS[N],fail[N][2];
int lens,lent0;
char t0[N],s[N],D[N];
inline int read(){int FF=0,RR=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;return FF*RR;
}
mt19937 mrand(chrono::steady_clock::now().time_since_epoch().count());
ull gethash(int l,int r,int t,ull *h){ return h[r]-h[l-1]*bs[t][r-l+1];}
void init(){lens=strlen(s+1);for(int i=2,j=0;i<=lens;i++){while(j&&s[j+1]!=s[i]) j=neS[j];if(s[j+1]==s[i]) j++;neS[i]=j;}for(int i=1;i<=lens;i++){int c=s[neS[i]+1]-48;fail[i][c]=neS[i],fail[i][c^1]=fail[neS[i]][c^1];}v[0][0]=mrand(),v[0][1]=mrand(),v[1][0]=mrand(),v[1][1]=mrand();lent0=strlen(t0+1);for(int i=1;i<=lent0;i++) for(int t:{0,1}) hT[t][i]=hT[t][i-1]*base[t]+v[t][t0[i]-48];for(int i=1;i<=lens;i++) for(int t:{0,1}) hS[t][i]=hS[t][i-1]*base[t]+v[t][s[i]-48];bs[0][0]=bs[1][0]=1;for(int i=1;i<=lens;i++) for(int t:{0,1}) bs[t][i]=bs[t][i-1]*base[t];for(int i=1;i<=lens;i++){if(hT[0][lens-i]==gethash(i+1,lens,0,hS[0])&&hT[1][lens-i]==gethash(i+1,lens,1,hS[1])) tot[i]=1;tot[i]+=tot[neS[i]];}for(int i=lens-1;i;i--) if(hS[0][i]==gethash(lent0-i+1,lent0,0,hT[0])&&hS[1][i]==gethash(lent0-i+1,lent0,1,hT[1])){ mxsuf[0]=i;break;}for(int i=1;i<=lent0-lens+1;i++) if(gethash(i,i+lens-1,0,hT[0])==hS[0][lens]&&gethash(i,i+lens-1,1,hT[1])==hS[1][lens]) ans[0]++;
}
int main(){freopen("string.in","r",stdin);freopen("string.out","w",stdout);n=read();scanf("%s",s+1),scanf("%s",t0+1);init();for(int i=1;i<=n;i++){int k=read(),pre=-1;while(k--){int id=read();ans[i]+=ans[id];if(pre!=-1) ans[i]+=tot[mxsuf[pre]];pre=id;}scanf("%s",D+1);int lenD=strlen(D+1);mxsuf[i]=mxsuf[pre];for(int j=1;j<=lenD;j++){if(D[j]==s[mxsuf[i]+1]) mxsuf[i]++;else{mxsuf[i]=fail[mxsuf[i]][D[j]-48];if(D[j]==s[mxsuf[i]+1]) mxsuf[i]++;}if(mxsuf[i]==lens) ans[i]++,mxsuf[i]=neS[mxsuf[i]];}}for(int i=1;i<=n;i++) printf("%llu\n",ans[i]);fprintf(stderr,"%d ms\n",int(1e3*clock()/CLOCKS_PER_SEC));return 0;
}

C

w x q n b ! ! ! wxq\;nb!!! wxqnb!!!
我也不知道 w x q wxq wxq 怎么想到的)用 E G F EGF EGF 求解
我忘了式子怎么推的了(。。。)
反正最后的式子是 ∑ S = 0 2 n − 1 ( − 1 ) p o p c n t ( S ) S . . . \sum\limits_{S=0}^{2^n-1}(-1)^{popcnt(S)}S... S=02n1(1)popcnt(S)S...
然后好像是二项式定理展开,再分治 d p dp dp 解决
我不记得了,改天再问一下他怎么做
时间复杂度 O ( n 2 l o g n ) O(n^2logn) O(n2logn)

#include <bits/stdc++.h>
using namespace std;
const int N=2100,P=1e9+7;
int n,m,f[N][N],g[N],h[(1<<20)+5];
int pw2[N*N],C[N][N];
inline int read(){int FF=0,RR=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;return FF*RR;
}
void solve(int n){if(!n||n==1) return;solve(n/2);for(int i=0;i<=m;i++)for(int j=0;j<=i;j++) f[n][i]=(f[n][i]+1ll*f[n/2][j]*f[n/2][i-j]%P*C[i][j]%P*pw2[j*(n/2)])%P;if(n&1){for(int i=0;i<=m;i++){g[i]=0;for(int j=0;j<=i;j++) g[i]=(g[i]+1ll*f[n][j]*f[1][i-j]%P*C[i][j]%P*pw2[j])%P;}for(int i=0;i<=m;i++) f[n][i]=g[i];}
}
int qmi(int a,int b){int res=1;for(;b;b>>=1){if(b&1) res=1ll*res*a%P;a=1ll*a*a%P;}return res;
}
void fwt(){for(int mid=1;mid<1<<n;mid<<=1)for(int i=0;i<1<<n;i+=mid<<1) for(int j=0;j<mid;j++) h[i+j+mid]=(h[i+j+mid]+h[i+j])%P;
}
void work_sb(){pw2[0]=1;for(int i=1;i<=n;i++) pw2[i]=pw2[i-1]*2%P;for(int S=0;S<1<<n;S++){int res=0;for(int i=0;i<n;i++) if(S>>i&1) res+=pw2[i];h[S]=qmi(res,m);}for(int S=0;S<1<<n;S++) if(__builtin_popcount(S)&1) h[S]=(P-h[S])%P;fwt();if(n&1) printf("%d\n",(P-h[(1<<n)-1])%P);else printf("%d\n",h[(1<<n)-1]);
}
int main(){freopen("glass.in","r",stdin);freopen("glass.out","w",stdout);n=read(),m=read();if(m==1145141919){ work_sb();exit(0);}C[0][0]=1;for(int i=1;i<=m;i++) for(int j=0;j<=i;j++) C[i][j]=(!j||i==j)?1:(C[i-1][j-1]+C[i-1][j])%P;pw2[0]=1;for(int i=1;i<=m*n;i++) pw2[i]=pw2[i-1]*2%P;f[0][0]=1;for(int i=1;i<=m;i++) f[1][i]=P-1;solve(n);if(n&1) printf("%d\n",(P-f[n][m])%P);else printf("%d\n",f[n][m]);fprintf(stderr,"%d ms\n",int(1e3*clock()/CLOCKS_PER_SEC));return 0;
}

D

大分块题,狗都不补!!!

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

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

相关文章

批量新增报错PSQLException: PreparedStatement can have at most 65,535 parameters.

报错信息&#xff1a; org.postgresql.util.PSQLException: PreparedStatement can have at most 65,535 parameters. Please consider using arrays, or splitting the query in several ones, or using COPY. Given query has 661,068 parameters ; SQL []; PreparedStatemen…

Oracle(10)Managing Undo Data

目录 一、基础知识 1、AUM :Init Parameters AUM:初始化参数 2、AUM:Other Parameters AUM:其他参数 3、AUM:Sizing an UNDO TS AUM:调整UNDOTS的大小 4、AUM :Undo Quota AUM:撤消配额 5、Get Undo Segment Info 获取撤消段信息 二、基础操作 1、AUM:UNDO Tablespace …

MySQL:至少参与xxx参与的全部事件(二)

MySQL&#xff1a;至少参与xxx参与的全部事件&#xff08;二&#xff09; – WhiteNights Site 标签&#xff1a;MySQL 本来不难的&#xff0c;结果实验课上又没能当场做出来。还是回到宿舍复盘才看到问题所在&#xff0c;令人感慨。 头歌例题 仔细审题 任务描述 创建一个名…

SpringBoot框架使用AOP + 自定义注解实现请求日志记录

一、SpringBoot记录日志 文章目录 一、SpringBoot记录日志1.1、环境搭建1.2、配置FastJson1.3、自定义LogRecord注解1.4、定义日志实体类1.5、创建HttpRequestUtil工具类1.6、定义AOP切面1.7、编写测试类1.8、运行测试 1.1、环境搭建 搭建SpringBoot工程。引入【spring-boot-st…

2023年软件系统架构师论文【回忆版】

2023年11月5日&#xff0c;全国计算机等级下半年考试&#xff0c;北京市软件架构师考试其中有个考点在首都经济贸易大学丰台校区&#xff09;&#xff0c;地址&#xff1a;北京市丰台区花乡张家路口121号&#xff08;北门入校&#xff09; 注意&#xff1a;机考的考试时间有所变…

BIOS开发笔记 - HDA Audio

在PC中,音频输出是一个重要的功能之一,目前大多数采用的是英特尔高清晰音效(英语:Intel High Definition Audio,简称为HD Audio或IHD)方案,它是由Intel于2004年所提出的音效技术,能够展现高清晰度的音质效果,且能进行多声道的播放,在音质(音效质量)上超越过去的其他…

FFmpeg 硬件加速视频转码指南

基于 Windows 下演示&#xff0c;Linux 下也可以适用。 所使用 ffmpeg 版本为 BtbN 编译的 win64-gpl 版&#xff08;非 gpl-share&#xff09;&#xff0c;项目地址&#xff1a;BtbN / FFmpeg-Builds 也可以使用 gyan.dev 编译的 git-full 版&#xff0c;地址&#xff1a;gyan…

通过pam_cap配置特权失效的原因

缘由 阅读官网上对于pam_cap介绍的用户特权配置&#xff0c;如果不特别注意官网介绍中的几个关键词&#xff0c;通常配置后并不起效。 而这段对于非root的运行的特权设定与传递、传播的研究&#xff0c;均来自于这个疑问&#xff0c;所以&#xff0c;想再深入谈谈这个问题&am…

Sqoop导入到Hive,Hive使用 HA

Sqoop写入Hive卡在连接Hive的JDBC上不执行 Sqoop访问 启用 HA模式的Hive 找到Hive的安装根目录&#xff1a;$HIVE_HOME/conf 创建一个新的配置文件&#xff1a;beeline-hs2-connection.xml <?xml version"1.0"?> <?xml-stylesheet type"text/xsl…

【自动控制原理】时域分析法:一阶、二阶、高阶系统的时间响应及动态性能

文章目录 第3章 时域分析法3.1 基本概念3.1.1 典型输入信号3.1.2 系统动态性能指标 3.2 一阶系统的时间响应及动态性能一阶系统的标准形式&#xff08;尾1标准型&#xff09;3.2.1一阶惯性环节的单位阶跃响应3.2.2一阶惯性环节的单位速度响应3.2.3一阶惯性环节的单位脉冲响应3.…

【gpt redis】原理篇

用的黑马程序员redis课程的目录&#xff0c;但是不想听讲了。后续都是用gpt文档获取的。 1.课程介绍(Av766995956,P145) 2.Redis数据结构-动态字符串(Av766995956,P146) sds 1M是个界限 其实他是个由c语言实现的结构体 有这么几个参数 len alloc flag char[] len是实际长度 …

白话熵增定律

白话熵增定律 热力学中的熵增定律 熵是指一个系统的混乱程度的度量&#xff0c;是热力学中的一个系统的属性。熵增定律是指一个封闭的系统随着时间的发展&#xff0c;在朝平衡状态发展时&#xff0c;其熵会增加&#xff0c;即其越来越混乱。 对于一个房间&#xff0c;如果经常…

idea插件(一)-- SequenceDiagram(UML自动生成工具)

目录 1. 安装 2. 默认快捷键 3. 操作说明 4. 导出为图片与UML类图 4.1 导出为图片&#xff1a; 4.2 导出 UML 类图 SequenceDiagram是从java、kotlin、scala&#xff08;Beta&#xff09;和groovy&#xff08;limited&#xff09;代码生成简单序列图&#xff08;UML&…

WorkManger学习汇总

一.使用 WorkManger主要是用来执行一定会执行的任务的&#xff0c;如即使app被杀掉、手机重启都会执行。 适用场景&#xff1a;定期重复性任务&#xff0c;如定期log上传等 使用的话首先引入库&#xff08;我使用的是2.7.1&#xff09; implementation "androidx.work:…

目标检测YOLO实战应用案例100讲-基于改进YOLOv4算法的自动驾驶场景 目标检测

目录 前言 国内外目标检测算法研究现状 传统目标检测算法的发展现状

C语言--判断一个年份是否是闰年(详解)

一.闰年的定义 闰年是指在公历&#xff08;格里高利历&#xff09;中&#xff0c;年份可以被4整除但不能被100整除的年份&#xff0c;或者可以被400整除的年份。简单来说&#xff0c;闰年是一个比平年多出一天的年份&#xff0c;即2月有29天。闰年的目的是校准公历与地球公转周…

Scala函数和闭包

1. 函数 1.1 函数与方法 Scala 中函数与方法的区别非常小&#xff0c;如果函数作为某个对象的成员&#xff0c;这样的函数被称为方法&#xff0c;否则就是一个正常的函数。 // 定义方法 def multi1(x:Int) {x * x} // 定义函数 val multi2 (x: Int) > {x * x}println(mult…

Elasticsearch 8.X 如何生成 TB 级的测试数据 ?

1、实战问题 我只想插入大量的测试数据&#xff0c;不是想测试性能&#xff0c;有没有自动办法生成TB级别的测试数据&#xff1f;有工具&#xff1f;还是说有测试数据集之类的东西&#xff1f;——问题来源于 Elasticsearch 中文社区https://elasticsearch.cn/question/13129 2…

实现自动接听电话

在Android 12中实现自动接听电话的功能可以通过使用特定的API来实现,具体的实现方法如下: 导入需要的类库和接口 import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.te…