多校A层冲刺NOIP2024模拟赛18

news/2024/12/26 15:21:53/文章来源:https://www.cnblogs.com/hzoi-Cu/p/18528626

赛时电脑死了,恼了就没交。赛后交是155pts。

T1 是二分答案+三维前缀和check,T2 瞎写了个搜索。

T1 选彩笔(rgb)

将r,g,b看做三个维度。

答案显然有可二分性,直接二分答案。那么就转化为是否存在一个边长为\(mid\)三维正方体,其内部有大于\(k\)个点。

三维前缀和维护即刻,时间复杂度是\(O(V^3\log V)\)的。

但貌似三维偏序也能做,只是非常非常麻烦?(雾)

点此查看代码
#include <bits/stdc++.h>
using namespace std ; 
#define rep(i,s,t,p) for(int i = s;i <= t;i += p)
#define drep(i,s,t,p) for(int i = s;i >= t;i -= p)
#ifdef LOCALFILE *InFile = freopen("in.in","r",stdin),*OutFile = freopen("out.out","w",stdout);// FILE *ErrFile = freopen("err.err","w",stderr);
#elseFILE *InFile = freopen("rgb.in","r",stdin),*OutFile = freopen("rgb.out","w",stdout);
#endif
using ll = long long;using ull = unsigned long long;
using db = double;using ldb = long double;
const int N = 1e5 + 100,V = 257;
struct Node {int r,g,b;}a[N];
int n,K,maxn[3],sum[V][V][V],VA = 256;
inline int P(int x){return x < 0? 0:x;}
inline int val(int i , int j , int k , int mid){return sum[i][j][k]-sum[P(i-mid-1)][j][k]-sum[i][P(j-mid-1)][k]-sum[i][j][P(k-mid-1)]+sum[P(i-mid-1)][P(j-mid-1)][k]+sum[P(i-mid-1)][j][P(k-mid-1)]+sum[i][P(j-mid-1)][P(k-mid-1)]-sum[P(i-mid-1)][P(j-mid-1)][P(k-mid-1)];
}
inline bool check(int mid) {rep(i,1,VA,1) rep(j,1,VA,1) rep(k,1,VA,1)if (val(i,j,k,mid) >= K) return true;return false ; 
}
inline void solve(){cin>>n>>K;rep(i,1,n,1){cin>>a[i].r>>a[i].g>>a[i].b;a[i].r++,a[i].b++,a[i].g++;maxn[0] = max(maxn[0],a[i].r),maxn[1] = max(maxn[1],a[i].g),maxn[2] = max(maxn[2],a[i].b);sum[a[i].r][a[i].g][a[i].b]++;}rep(i,1,VA,1) rep(j,1,VA,1) rep(k,1,VA,1)sum[i][j][k] += (sum[i-1][j][k]+sum[i][j-1][k]+sum[i][j][k-1]-sum[i][j-1][k-1]-sum[i-1][j][k-1]-sum[i-1][j-1][k]+sum[i-1][j-1][k-1]);int l = 1,r = 256,ans = 0;while(l <= r){int mid = (l + r) >> 1;if (check(mid)) ans = mid,r = mid - 1;else l = mid + 1 ; }cout<<ans<<'\n';
}
signed main() {cin.tie(nullptr)->sync_with_stdio(false);solve();
}

T2 兵蚁排序(sort)

考虑排序的性质是减少序列中的逆序对,且不会新增逆序对。

然后如果\(A\)中有的逆序对而\(B\)中没有,那么就将这俩swap一下,冒泡即可,时间复杂度\(O(n^2)\)

点此查看代码
#include<bits/stdc++.h>
using namespace std;
#define rep(i,s,t,p) for(int i = s;i <= t;i += p)
#define drep(i,s,t,p) for(int i = s;i >= t;i -= p)
#ifdef LOCALFILE *InFile = freopen("in.in","r",stdin),*OutFile = freopen("out.out","w",stdout);// FILE *ErrFile = freopen("err.err","w",stderr);
#elseFILE *InFile = freopen("sort.in","r",stdin),*OutFile = freopen("sort.out","w",stdout);
#endif
using ll = long long;using ull = unsigned long long;
using db = double;using ldb = long double;
const int N = 1e3 + 10;
int n,a[N],b[N];
#define pii pair<int,int>
#define mk make_pair
vector<pii> ans;
int cta[N],ctb[N];
inline void solve(){cin>>n;vector<pii>().swap(ans);rep(i,1,n,1) cta[i] = ctb[i] = 0;rep(i,1,n,1) cin>>a[i];rep(i,1,n,1) cin>>b[i];bool flag = true;rep(i,1,n,1){if(!flag) break;ctb[b[i]]++;int j = 1,k = 0;while(j <= n){if(a[j] == b[i]) k++;if(k == ctb[b[i]]) break;j++;}drep(k,j-1,max(ctb[b[i]],i),1){if(a[k] > a[k + 1]){ans.push_back(mk(k,k+1));swap(a[k],a[k+1]);}else{flag = false;break;}}}if(!flag) cout<<"-1\n";else{cout<<"0\n"<<ans.size()<<'\n';for(auto i:ans) cout<<i.first<<' '<<i.second<<'\n';}
}
signed main(){cin.tie(nullptr)->sync_with_stdio(false);int T;cin>>T;while(T--) solve();
}

T3 人口局 DBA(dba)

容斥。

\(f_{i,j}\)表示已经当前已经填了\(i-1\)个数,和为\(j\)的方案数。

有容斥柿子为\(f_{i,j}=\sum\limits_{k=0}^i(-1)^k\mathrm{C}_i^k\mathrm{C}_{j+i-km-1}^{i-1}\)

答案为\(\sum\limits_{i=1}^n\sum\limits_{j=0}^{a_i-1}f_{n-i,s_i-j}\),其中\(s_i\)表示\(a\)的后缀和。

将这个柿子拆开,有

\[\sum_{i=1}^n\sum_{j=0}^{a_i-1}\sum_{k=0}^{n-i}(-1)^k\mathrm{C}_{n-i}^k\mathrm{C}_{s_i-j-km-1+n-i,n-i-1} \]

转化一下就是

\[\sum_{i=1}^n\sum_{k=0}^{n-i}(-1)^k\mathrm{C}_{n-i}^k\sum_{j=0}^{a_i-1}\mathrm{C}_{s_i-km+n-i-1-j}^{n-i-1} \]

发现后面的\(s_i-km,n-i-1\)是个常量,所以后面的柿子等价于求

\[\sum_{i=0}^p\mathrm{C}_{n+m-i}^m \]

将这玩意扔到杨辉三角上,然后画一下图,推一下,可以得到后边这个柿子就是\(\mathrm{C}_{n+m+1}^{m+1}-\mathrm{C}_{n+m-p}^{m+1}\)

然后后面的就可以\(O(1)\)求了,直接递推就行,时间复杂度\(O(n^2)\)

点此查看代码
#include<bits/stdc++.h>
using namespace std;
#define rep(i,s,t,p) for(int i = s;i <= t;i += p)
#define drep(i,s,t,p) for(int i = s;i >= t;i -= p)
#ifdef LOCALFILE *InFile = freopen("in.in","r",stdin),*OutFile = freopen("out.out","w",stdout);
#elseFILE *InFile = freopen("dba.in","r",stdin),*OutFile = freopen("dba.out","w",stdout);
#endif
using ll = long long;using ull = unsigned long long;
using db = double;using ldb = long double;
const int N = 2e3 + 10,mod = 1e9 + 7;
inline int power(int a,int b,int mod){int res = 1;for(;b;b >>= 1,a = 1ll*a*a%mod)if(b&1) res = 1ll*res*a%mod;return res;
}
inline int Inv(int a){return power(a,mod-2,mod);}
int fac[N*N],inv[N*N],m,n,a[N],sum[N];
inline int C(int n,int m){return m>n?0:1ll*fac[n]*inv[n-m]%mod*inv[m]%mod;}
inline void solve(){cin>>m>>n;rep(i,1,n,1) cin>>a[i],a[i] += a[i - 1];fac[0] = 1;rep(i,1,m*n,1) fac[i] = 1ll*fac[i-1]*i%mod;inv[m*n] = Inv(fac[m*n]);drep(i,m*n-1,0,1) inv[i] = 1ll*inv[i+1]*(i+1)%mod;ll ans = 0;rep(i,1,n,1){int S = a[n] - a[i - 1] ; rep(j,0,n-i,1){int sgn = j&1?-1:1;ans = ((((1ll*sgn*C(n-i,j)*((1ll*C(S-j*m+n-i,n-i)-C(S-a[i]+a[i-1]-j*m+n-i,n-i)+mod)%mod))%mod)+mod)%mod+ans)%mod; }}cout<<ans;
}
signed main(){cin.tie(nullptr)->sync_with_stdio(false);solve();
}

T4

不会
image
image
image

有人说座位是按模拟赛调的,那我以后赛时都不交,看看他能给我排到哪里。

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

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

相关文章

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

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

从0开始搭建自己的直播平台

本文讲述了如何从0开始,利用腾讯云的平台,快速搭建一个直播平台的过程。本文讲述了如何从0开始,利用腾讯云的平台,快速搭建一个直播平台的过程。 准备工作 要有两个已经备案完成的域名。 域名申请及备案的操作,这部分可以直接看腾讯云的文档,也可以等我后面有时间自己再写…

[Zer0pts2020]easy strcmp

[Zer0pts2020]easy strcmp die查壳找到加密函数如何找到加密函数的找到init函数,跟进funcs_889 、跟进使用x交叉引用qword_201090即可找到主加密函数 那这个加密函数是如何连上main函数的呢? mainmain函数这里运用了strcmp,但我们却找不到strcmp到底对比了什么 但根据我们刚…

LDAP--Jenkins详解笔记

一、Ldap的结构1.组织角色 所有用户都可以登录,但是只有创建时的admin组角色有增删改的权限,相当于是根目录,千万不能删,删了就全没了注意,admin用户是首个超级登录用户(相当于根),需要用配置文件生成,详见:https://www.cnblogs.com/wangyuanguang/p/18189832 ##注意…

系统集成项目管理工程师笔记4 - 第四章 信息系统架构

信息系统集成项目涉及的架构通常有系统架构、数据架构、技术架构、应用架构、网络架构、安全架构; 4.1 架构基础架构的本质是决策; 4.1.1 指导思想通过指导思想的贯彻实施,推动项目多元参与者能保持集成关键价值的一致性理解,从而减少不必要的矛盾与冲突;4.1.2 设计原则太…

举例说明什么情况下会更倾向于使用抽象类而不是接口

接口和抽象类都遵循”面向接口而不是实现编码”设计原则,它可以增加代码的灵活性,可以适应不断变化的需求。 接口 vs 抽象类 继承限制:Java 中,一个类只能继承一个类,但可以实现多个接口。 继承一个类意味着失去了继承其他类的机会。行为表示:接口通常用于表示附加的行为…

智慧测绘数字化管理平台建设方案

随着信息技术的飞速发展,测绘地理信息与遥感专业正经历着一场革命性的变革。智慧测绘数字化管理平台的建设,不仅能够提高测绘数据的准确性和实时性,还能为城市规划、环境保护、灾害预防等领域提供强有力的数据支持。本文将探讨智慧测绘数字化管理平台的建设方案,以期为相关…

劫持微信聊天记录并分析还原 —— 解密数据库(二)

程序以 Python 语言开发,可读取、解密、还原微信数据库并帮助用户查看聊天记录,还可以将其聊天记录导出为csv、html等格式用于AI训练,自动回复或备份等等作用。本工具设计的初衷是用来获取微信账号的相关信息并解析PC版微信的数据库。程序以 Python 语言开发,可读取、解密、…

2024newstarweb题解

w1 headach3会赢吗 源码flag碎片X1: ZmxhZ3tXQTB3 再次查看源码flag碎片X2: IV95NF9yM2Fs 第三个页面也是直接查看源码直接改源码flag碎片X3: MXlfR3I0c1B 下一个页面直接禁用jsflag碎片X4: fSkpKcyF9 ZmxhZ3tXQTB3IV95NF9yM2FsMXlfR3I0c1BfSkpKcyF9 base64解码即可的flag智械危…

判断一个数是不是质数(素数)

​public static boolean isPrime(int n){if (n <= 3) { return n > 1;) for(int i = 2; i < n; i++){if (n % i == 0) { return false;} ) return true;} 质数(也称为素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的数。换句话说,质数只能被1和它…

Roaring Bitmap

Roaring Bitmap原理 Roaring Bitmaps 就是一种压缩位图索引,后文统称 RBM,RBM 的用途和 Bitmap 很差不多(比如说索引),只是说从性能、空间利用率各方面更优秀了。 RBM 的主要思想并不复杂,简单来讲,有如下三条:我们将 32-bit 的范围 ([0, n)) 划分为 2^16 个桶,每一个…