2024CCPC郑州邀请赛暨河南省赛

比赛记录:看群里大家嘎嘎拿牌,自己个人来solo了一下,发现简单到中等题很多,写了两小时出了7题,但是写的比较慢,对难题把握还是不准确

补题 : A题确实巧妙充分利用题目的数据范围来思考问题,D简单数数性质推理

A.Once In My Life

数理逻辑推理

题目要求我们构造奇怪的式子得满足出现123456789 + 一个指定的数,给定n要求找到一个k使得n*k符合要求,同时告诉我们 n < 1e8,k<2e10,可以注意到两者的乘积是刚好到达上限1e18级别那么我们如何去思考:我们无非就是想找到一个符合要求的数(1e18)同时是n的倍数->推出k,依照数据范围我们应该是在O(1-log)时间求出答案,我们看如何得到这个数,可以看到1234567890 + d是10位数 后面还可以接上8位数,也就是说这个 + 与n同级别数是可以构造出来的,那么构造完成之后加上快要变成n倍数的余数就是n的倍数了

void solve(){LL n,d; cin>>n>>d;LL ans = 1234567890 + d;LL x=n;while(x){x/=10;ans *= 10;}ans += (n-ans%n)%n;cout << ans/n << endl;return ;
}

B.扫雷1

贪心

我们是从前往后走的,可以得到如果要选择当前这个数必然是因为后面的点都小于等于这个数,否则我直接买后面的更优,所以我们只需要预处理出来后缀最小值即可

int w[N],suf[N];
void solve(){cin>>n;for(int i=1;i<=n;i++) cin>>w[i];suf[n+1]=2e9;for(int i=n;i>=1;i--) suf[i]=min(suf[i+1],w[i]);int ans=0,cnt=0;for(int i=1;i<=n;i++){ans++;if(ans>=w[i]){if(w[i]<=suf[i+1]){cnt += ans/w[i];ans %= w[i];}}}cout << cnt << endl;return ;
}

D.距离之比

数学推理

我们可以对题目中式子进行推理之后就是两个点之间的横纵坐标构成的三角形的的三角函数之比

\frac{|PQ1|}{|PQ2|} = \sin \theta +\cos \theta = \sqrt 2 \sin (\theta+\frac{\pi }{4})

我们对这个式子研究单调性之后可以得出结论实在45度或者135度的时候结果是最优的所以我们分别按照 x + y 和 x - y排序之后求解相邻两个点的结果即可

PII e[N];
bool cmp1(PII a,PII b){return a.x+a.y<b.x+b.y;
}
bool cmp2(PII a,PII b){return a.x-a.y<b.x-b.y;
}double get(PII a,PII b){double dx = abs(a.x-b.x),dy = abs(a.y - b.y);return 1.0*(dx+dy)/sqrtl((dx*dx+dy*dy));
}
void solve(){cin>>n;for(int i=1;i<=n;i++){int x,y; cin>>x>>y;e[i]={x,y};}    sort(e+1,e+1+n,cmp1);double ans = 0;for(int i=1;i<=n;i++){int last = i==1 ? n : i-1;double now =get(e[i],e[last]);ans = max(ans,now);}sort(e+1,e+1+n,cmp2);for(int i=1;i<=n;i++){int last = i==1 ? n : i-1;double now =get(e[i],e[last]);ans = max(ans,now);}cout << LF(11) << ans << endl;return ;
}

F.优秀字符串

签到模拟

直接按照题目意思要操作即可

void solve(){cin>>n;int ans = 0;while(n--){string s; cin>>s; if(s.size()!=5) continue;s=' '+s;set<char> S;for(int i=1;i<=4;i++) S.insert(s[i]);if(S.size()!=4) continue;if(s[3]!=s[5]) continue;ans ++ ;}cout << ans << endl;return ;
}

H.随机栈

模拟+概率

要求我们得到的是递增的序列,那么我们取出来的数一定是当前集合最小的数才有可能,同时取出来的数的概率为 cnt[x_{min}]/cnt_{size},用快速幂求逆元,维护集合最小值可以用优先队列,数量开个桶即可

LL qmi(LL a,LL b,LL p){LL res = 1;while(b){if(b&1) res=res*a%p;b>>=1;a=a*a%p;}return res;
}LL inv(LL x){return qmi(x,mod-2,mod);
}void solve(){cin>>n;priority_queue<int,vector<int>,greater<int>> q;vector<int> cnt(N);LL ans = 1;for(int i=1;i<=2*n;i++){int x; cin>>x;if(x!=-1) q.push(x),cnt[x]++;else{int x = q.top();ans *= (LL)cnt[x]*qmi((int)q.size(),mod-2,mod)%mod;ans %= mod;ans = (ans+mod)%mod;a.push_back(x); q.pop();cnt[x]--;}}int last = -1;bool ok = true;for(auto&v:a){if(v>=last) last=v;else{ok = false; break;}}if(!ok){cout << 0 << endl;return ;}ans = (ans%mod+mod)%mod;cout << ans << endl;return ;
}

J.排列和组合

暴力 or 小推理

做法1:我们可以发现测试数据不多,我们可以直接跑出全排列即可,可以用素数筛跑出来当前这个数是不是合数

做法2:以0,2,4,5,6,8结尾的一定是合数,由于歌巢原理这六个数至少会出现一个,调整到最后位置即可

int p[N];
bool st[N];
int cnt;
void get(){for(int i=2;i<N;i++){if(!st[i]) p[cnt++]=i;for(int j=0;p[j]<N/i;j++){st[i*p[j]]=true;if(i%p[j]==0) break;}}
}
void solve(){int n = 5;int x; cin>>x;for(int i=1;i<=n;i++) p[i]=x%10,x/=10;sort(p+1,p+1+n);do{int now = 0;for(int i=1;i<=n;i++) now = now*10+p[i];if(now<10000) continue;if(st[now]){cout << now << endl;return ;}}while(next_permutation(p+1,p+1+n));return ;
}

K.树上问题

树形dp

我们首先把1当成根来处理可以发现每一次换根节点只会影响当前这一条边,做个简单树形dp转移即可

vector<int> g[N];
int dp[N];void dfs1(int u,int fa){dp[u]= (2*a[u]>=a[fa]);for(auto&v:g[u]){if(v==fa) continue;dfs1(v,u);dp[u] += dp[v];}
}
void dfs2(int u,int fa){if(u!=1) dp[u] = dp[fa] - (2*a[u]>=a[fa]) + (2*a[fa]>=a[u]);for(auto&v:g[u]){if(v==fa) continue;dfs2(v,u);}
}
void solve(){cin>>n;for(int i=1;i<=n;i++) g[i].clear(),dp[i]=0;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<n;i++){int a,b; cin>>a>>b;g[a].push_back(b);g[b].push_back(a);}  dfs1(1,0);dfs2(1,0);int ans = 0;for(int i=1;i<=n;i++) ans += dp[i]==n;cout << ans << endl;return ;
}

L.Toxel 与 PCPC II

dp处理

我们可以发现对于当前点一定就是从前面几个点转移过来的,也就是说从上一次的最优情况到当前我和前面那几个一起,我们发现由于x^4很大,所以转移的次数不是很大简单论证一下就是n开四次方即可,我们可以处理到30,这样我们来定义dp[i][j]为当前处理到第i个数,处理第i个的时候是一次性处理j个以前debug的,时间复杂度就是30n

LL dp[N][32];
LL d[N];void solve(){cin>>n>>m;for(int i=1;i<=m;i++) cin>>a[i];for(int i=1;i<=m;i++){d[i]=2e18;for(int j=1;j<=i and j<=30;j++){dp[i][j]=d[i-j]+a[i]+(LL)j*j*j*j;d[i]=min(d[i],dp[i][j]);}}cout << d[m] << endl;return ;
}

M.有效算法

二分

依照题目意思我们发现明显的具有二分性质,接下来思考如何check我们直接依照式子推导可以得到a_i - k*b_i <= x <= a_i + k*b_i

对于每一个a,b可以得到一个区间,也就是所有的区间要有一个交点即可,也就是最大的右端点要小于最小的左端点

LL a[N],b[N];void solve(){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++) cin>>b[i];auto check = [&](LL k){LL l=-2e18,r=2e18;for(int i=1;i<=n;i++){l=max(l,a[i]-k*b[i]);r=min(r,a[i]+k*b[i]);}return l<=r;};LL l = 0 ,r = 1e9;while(l<r){LL mid = l+r>>1;if(check(mid)) r=mid;else l=mid+1;}cout << l << endl;return ;
}

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

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

相关文章

一套智慧水务平台大概多少钱?

在当今日益发展的水务行业中&#xff0c;如何实现高效、智能的管理&#xff0c;成为了摆在水务企业和相关部门面前的一大挑战。而智慧水务平台作为新时代的解决方案&#xff0c;以其强大的功能和卓越的性能&#xff0c;赢得了广泛的关注。那么&#xff0c;一套智慧水务平台大概…

PDF Squeezer for Mac,让PDF压缩更高效

还在为PDF文件过大而烦恼吗&#xff1f;试试PDF Squeezer for Mac吧&#xff01;它拥有强大的压缩功能&#xff0c;可以快速将PDF文件压缩至更小的体积&#xff0c;让你的文件传输更快捷。同时&#xff0c;它还支持多种压缩方式&#xff0c;满足你的不同需求。赶快下载体验吧&a…

【上海生物发酵展精选展商】三门峡市高瑞生物技术有限公司

三门峡市高瑞生物技术有限公司注册成立于2017年2月23日&#xff0c;经营范围是微生物培养基原材料制造、销售。2017年度因场地搬迁、异地重建&#xff0c;公司由“三门峡市高山生物制品有限公司”更名为“三门峡市高瑞生物技术有限公司”。 该公司具有20余年丰富经验的微生物培…

又一个行业被Ai背刺了:Comfyui生成你的专属模特!

工作流获取方式放在文末了 Ai技术的进步&#xff0c;带来了许多之前无法实现的新技术和新成品&#xff0c;这也使得曾经需要漫长的时间和复杂的创作过程才能够完成的工作呗Ai技术轻松代替。 于此同时&#xff0c;不同行业也在这个过程中受到了不同程度的冲击。 今天给大家分…

【自然语言处理】二元文法模型

实验名称 二元文法模型 实验目的1.掌握N-gram文法的公式&#xff1b; 2.理解语言模型的实现过程&#xff1b; 3.掌握简单的平滑方法&#xff1b; 4.用代码编程实现2元语言模型&#xff0c;即一阶马尔可夫链。 实验内容&#xff1a;使用免费的中文分词语料库&#xff0c;如人民…

使用 ONNX Runtime 在 iPhone 上运行 Phi-3-mini

更多科技分享&#xff0c;请关注公众号&#xff1a;ONE生产力 之前我们介绍了微软最新开源的小规模模型Phi-3-mini&#xff0c;其计算资源占用极少&#xff0c;非常适合嵌入式应用和移动智能终端。今天我们将探讨在iPhone上&#xff0c;通过ONNX Runtime运行Phi-3-mini模型。 …

基于QEMU-aarch64学习UEFI(EDK2)-2安装操作系统

1 基于QEMU-aarch64学习UEFI(EDK2)-2安装操作系统 文章目录 1 基于QEMU-aarch64学习UEFI(EDK2)-2安装操作系统1.1 二、基于qemu固件安装操作系统1.1.1 1、virt-manager安装1.1.2 2、创建虚拟机1.1.2.1 Ubuntu系统开机等待时间长问题解决 1.1.3 3、virt-manager日常使用1.1.4 4、…

实现mysql的主从复制、实现MySQL的读写分离与负载均衡

实验环境 &#xff08;注明&#xff09;以下的所有关于yum和rpm以及tar的软件需要自己准备&#xff0c;没有的话可以私信博主 实验目标&#xff1a; 1.实现mysql主从复制 2.实现mysql读写分离与负载均衡 实验一、搭建mysql主从复制 1.建立时间同步环境&#xff0c;在主节…

【Linux】高效文本处理命令

目录 一.sort命令&#xff08;排序&#xff09; 1.语法格式 2.常用选项 3.相关示例 3.1. 3.2. 二.unip命令&#xff08;去重&#xff09; 1.语法格式 2.常用选项 3.相关示例 3.1. 3.2. 三.tr命令&#xff08;替换&#xff09; 1.语法格式 2.常用选项 3.相关示例…

通过 Apple Vision Pro 释放创造力:深入研究空间计算

Apple 最新进军空间计算领域的 Apple Vision Pro,标志着重新定义我们与技术交互方式的重大飞跃。空间计算超越了传统界限,允许用户以无缝集成到物理世界的方式参与 2D 和 3D 内容。 我们可以关注两种类型的体验: 在空间中渲染 2D 内容。这涉及将现有设备窗口投影到空间领域…

广东芬蓝环境亮相2024上海生物发酵系列展

芬尼成立于2002年&#xff0c;是国家工信部评定的“制造业单项冠军示范企业”。公司拥有热泵行业领先水平的生产及研发实力&#xff0c;在固废处理处置领域&#xff0c;是《带式干化机》团标主笔起草单位。公司拥有三个制造基地&#xff0c;公司员工超过2000人&#xff0c;其中…

⭐️宁波ISO14000认证:⭐️成就“绿色环保”王者之路⭐️

&#x1f308;宁波ISO14000认证&#xff1a;&#x1f498;成就“绿色环保”&#x1f432;王者之路&#x1f34e; &#x1f936;宁波ISO14000认证&#xff1a;&#x1f42f;铸就环保先锋&#xff0c;&#x1f984;引领绿色发展新征程&#x1face; &#x1f682;宁波&#xff0c…