Codeforces Round 893 (Div. 2)题解记录

news/2024/10/17 23:42:17/文章来源:https://www.cnblogs.com/cjcf/p/18473313

题目链接:https://codeforces.com/contest/1858

A. Buttons


从自身角度出发,我想赢就得保证我的按钮尽可能多所以,大家都优先按\(c\),然后分析先后顺序即可

	#include<iostream>#include<string.h>#include<map>#include<vector>#include<set>#include<unordered_set>#include<stack>#include<queue>#include<algorithm>#include<time.h>#include<random>#include<string>#include<string.h>#include<cctype>using namespace std;typedef long long ll;mt19937 rnd(time(0));const ll mod = 1e9 + 7;void fio(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);}ll gcd(ll x, ll y){if (y == 0)return x;elsereturn gcd(y, x % y);}ll ksm(ll x, ll y){ll ans = 1;while (y){if (y & 1)ans = ans%mod*(x%mod)%mod;x = x%mod*(x%mod)%mod;y >>= 1;}return ans%mod%mod;}int main(){ll t;cin>>t;while(t--){ll a,b,c;cin>>a>>b>>c;//swap(b,c);ll j=c%2;if(j==0){if(a<=b){cout<<"Second"<<endl;}elsecout<<"First"<<endl;}else{if(b<=a){cout<<"First"<<endl;}elsecout<<"Second"<<endl;}}}

B. The Walkway

题目乍看比较繁琐且翻译有问题?

一个饼干店的有无只会影响周围饼干店到这个饼干店的途中的吃饼干次数
分类讨论下即可

	#include<iostream>#include<string.h>#include<map>#include<vector>#include<set>#include<unordered_set>#include<stack>#include<queue>#include<algorithm>#include<time.h>#include<random>#include<string>#include<string.h>#include<cctype>using namespace std;typedef long long ll;mt19937 rnd(time(0));const ll mod = 1e9 + 7;void fio(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);}ll gcd(ll x, ll y){if (y == 0)return x;elsereturn gcd(y, x % y);}ll ksm(ll x, ll y){ll ans = 1;while (y){if (y & 1)ans = ans%mod*(x%mod)%mod;x = x%mod*(x%mod)%mod;y >>= 1;}return ans%mod%mod;}ll a[250000];ll b[250000];int main(){ll t;cin>>t;while(t--){ll n,m,d;cin>>n>>m>>d;for(ll i=0;i<=m;i++)b[i]=0;for(ll i=1;i<=m;i++){cin>>a[i];}ll op=0;ll k=0;ll ok=0;for(ll i=1;i<=m;i++){ll ans=0;ll cnt=0;if(i==1){if(a[i]==1){op=0;k=1;ok++;}else{ans=(a[i]-1-1)/d+2+((a[i+1]-1)-a[i])/d+1;cnt=(a[i+1]-1-1)/d+2;//cout<<ans<<" "<<cnt<<endl;ok+=(a[i]-1-1)/d+2;if(ans-cnt>op){op=ans-cnt;k=1;}else if(ans-cnt==op)k++;}}else if(i==m){ans=(a[i]-1-a[i-1])/d+1+(n-a[i])/d;cnt=(n-a[i-1])/d;ok+=ans;if(ans-cnt>op){op=ans-cnt;k=1;}else if(ans-cnt==op)k++;}else{ans=(a[i]-1-a[i-1])/d+1+(a[i+1]-1-a[i])/d+1;cnt=(a[i+1]-1-a[i-1])/d+1;ok+=(a[i]-1-a[i-1])/d+1;if(ans-cnt>op){op=ans-cnt;k=1;}else if(ans-cnt==op)k++;}}//	cout<<ok<<endl;cout<<ok-op<<" "<<k<<endl;}}

C. Yet Another Permutation Problem


优先考虑二倍递增,这样子一定gcd种类最多

	#include<iostream>#include<string.h>#include<map>#include<vector>#include<set>#include<unordered_set>#include<stack>#include<queue>#include<algorithm>#include<time.h>#include<random>#include<string>#include<string.h>#include<cctype>using namespace std;typedef long long ll;mt19937 rnd(time(0));const ll mod = 1e9 + 7;void fio(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);}ll gcd(ll x, ll y){if (y == 0)return x;elsereturn gcd(y, x % y);}ll ksm(ll x, ll y){ll ans = 1;while (y){if (y & 1)ans = ans%mod*(x%mod)%mod;x = x%mod*(x%mod)%mod;y >>= 1;}return ans%mod%mod;}ll a[250000];int main(){ll t;cin>>t;while(t--){ll n;cin>>n;//map<ll,ll>q;set<ll>f;for(ll i=1;i<=n;i++){f.insert(i);}ll pd=0;for(ll i=1;i<=n;i++){if(pd==0){pd=*f.begin();a[i]=pd;	f.erase(pd);}else{while(pd<=n){pd*=2;if(f.find(pd)!=f.end()){a[i]=pd;f.erase(pd);break;}}if(pd>n){pd=*f.begin();a[i]=pd;f.erase(pd);}}}//cout<<f.size()<<endl;for(ll i=1;i<=n;i++)cout<<a[i]<<" ";cout<<endl;}}

D. Trees and Segments

首先发现如果要求出$ a⋅l0+l1\(的最大值,并不是\)l0\(越大越好。所以考虑前缀求出每个\)l0\(对应的每个\)l1\(最大值 由于不能(n^3),所以直接用前缀和后缀数组去维护从某个点(且有多少改变机会)出发后的最长冷杉长度。 于是最后暴力下\)l0\(对应的\)l1$最大值,答案得解

	#include<iostream>#include<string.h>#include<map>#include<vector>#include<set>#include<unordered_set>#include<stack>#include<queue>#include<algorithm>#include<time.h>#include<random>#include<string>#include<string.h>#include<cctype>using namespace std;typedef int ll;mt19937 rnd(time(0));const ll mod = 1e9 + 7;void fio(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);}ll gcd(ll x, ll y){if (y == 0)return x;elsereturn gcd(y, x % y);}ll ksm(ll x, ll y){ll ans = 1;while (y){if (y & 1)ans = ans%mod*(x%mod)%mod;x = x%mod*(x%mod)%mod;y >>= 1;}return ans%mod%mod;}ll a[3500];ll b[3005][3005];ll c[3005][3005];int main(){ll t;cin>>t;while(t--){ll n,g;cin>>n>>g;string f;cin>>f;for(ll i=0;i<=n+1;i++){for(ll k=0;k<=g+1;k++){b[i][k]=0;c[i][k]=0;}}//cout<<99<<endl;for(ll i=0;i<=g;i++){ll sz=0;deque<ll>q;for(ll j=0;j<n;j++){if(q.empty()){q.push_back(j);if(f[j]=='0')sz++;while(sz>i){if(f[q.front()]=='0')sz--;b[q.front()][i]=max(b[q.front()][i],(ll)q.size()-1);q.pop_front();}}else{q.push_back(j);if(f[j]=='0')sz++;while(sz>i){if(f[q.front()]=='0')sz--;b[q.front()][i]=max(b[q.front()][i],(ll)q.size()-1);q.pop_front();}}if(!q.empty())b[q.front()][i]=max((ll)q.size(),b[q.front()][i]);}while(!q.empty()){b[q.front()][i]=max(b[q.front()][i],(ll)q.size());q.pop_front();}for(ll j=n-1;j>=0;j--)b[j][i]=max(b[j+1][i],b[j][i]);}for(ll i=0;i<=g;i++){ll sz=0;deque<ll>q;for(ll j=n-1;j>=0;j--){if(q.empty()){q.push_back(j);if(f[j]=='0')sz++;while(sz>i){if(f[q.front()]=='0')sz--;c[q.front()][i]=max(c[q.front()][i],(ll)q.size()-1);q.pop_front();}}else{q.push_back(j);if(f[j]=='0')sz++;while(sz>i){if(f[q.front()]=='0')sz--;c[q.front()][i]=max(c[q.front()][i],(ll)q.size()-1);q.pop_front();}}if(!q.empty())c[q.front()][i]=max((ll)q.size(),c[q.front()][i]);}while(!q.empty()){c[q.front()][i]=max(c[q.front()][i],(ll)q.size());q.pop_front();}for(ll j=1;j<=n-1;j++)c[j][i]=max(c[j-1][i],c[j][i]);}for(ll i=0;i<=n-1;i++){for(ll j=g;j>=1;j--){b[i][j]=max(b[i][j-1],b[i][j]);	c[i][j]=max(c[i][j],c[i][j-1]);}}//	cout<<b[0][0]<<endl;/*for(ll i=0;i<n;i++){for(ll j=0;j<=g;j++)cout<<b[i][j]<<" "<<c[i][j]<<endl;}*/pair<ll,ll>ans[5000];ll op=0;op=1;ans[op]={0,b[0][g]};//cout<<99<<endl;for(ll i=1;i<=n;i++){ll cnt=0;ll sz=0;ll u=0;ll pd=0;deque<ll>q;for(ll j=0;j<n;j++){q.push_back(j);if(f[j]=='1')sz++;while(sz>g){if(f[q.front()]=='1')sz--;q.pop_front();}while((ll)q.size()>i){if(f[q.front()]=='1')sz--;q.pop_front();}if(q.size()==i){pd=1;if(q.front()==0&&q.back()==n-1)u=max(u,0);else if(q.front()==0)u=max(u,b[q.back()+1][g-sz]);else if(q.back()==n-1)u=max(u,c[q.front()-1][g-sz]);elseu=max({u,b[q.back()+1][g-sz],c[q.front()-1][g-sz]});}}if(pd){op++;ans[op]={i,u};}}//cout<<55<<endl;for(ll i=1;i<=n;i++){ll u=0;for(ll j=1;j<=op;j++){ll x=ans[j].first;ll y=ans[j].second;u=max(u,i*x+y);}cout<<u<<" ";}cout<<endl;}}

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

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

相关文章

细胞大小,真核细胞直径平均: 3~30μm;

细胞大小 1毫米=1000微米, 1微米=1000纳米, 1毫米=1000000纳米。 单位有毫米(mm)、微米(μm)、纳米(nm) 。细胞的大小是细胞的重要特征,各类细胞的大小是有一定规律的。一般来说,原核细胞直径平均: 1~10μm; 真核细胞直径平均: 3~30μm; 某些不同来源的细胞大小变…

《使用Gin框架构建分布式应用》阅读笔记:p77-p87

《用Gin框架构建分布式应用》学习第5天,p77-p87总结,总计11页。 一、技术总结 1.Go知识点 (1)context 2.on-premises software p80, A container is like a separate OS, but not virtualized; it only contains the dependencies needed for that one application, which ma…

排序算法 - 快速排序

排序算法 - 快速排序概要快速排序(Quicksort)是对冒泡排序算法的一种改进。快速排序是一种基于分而治之的排序算法。它的基本思想是: 选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法…

学习groovy基础

简介 Groovy 是一种 JVM 语言,它可以编译与 Java 相同的字节码,然后将字节码文件交给 JVM 去执行,并且可以与 Java 无缝地互操作,Groovy 可以透明地与 Java 库和代码交互,可以使用 Java 所有的库。 Groovy 也可以直接将源文件解释执行 它还极大地清理了 Java 中许多冗长的…

高级语言程序设计第三次作业

这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/2024C 这个作业要求在哪里: https://edu.cnblogs.com/campus/fzu/2024C/homework/13284 学号:102400127 姓名:王子涵 4.8q2 打印引号的时候一开始忘了 然后在写d小题的时候宽度不知道怎么处理 后来询问了同学解决…

计量经济学(十)——正态性检验(Normality Test)

img { display: block; margin-left: auto; margin-right: auto } table { margin-left: auto; margin-right: auto } 正态性检验(Normality Test)是一种用于判断数据是否服从正态分布的重要统计方法,广泛应用于时间序列分析、回归分析等模型的构建与诊断中。许多统计模型,…

goldwave 循环播放

首先 得在选项 控制属性 里边,或者 右键这里选择 前奏/循环/结尾 或者 循环点 或者 循环 关于具体是什么意思,参考 https://www.goldwavechina.cn/bianji/boi-fa01.html这里有一些难以理解9.前奏/循环/结尾 这是一种特殊的播放功能,可以分三个部分播放声音。 首先,播放选择…

Response web登录操作 -2024/10/17

响应行设置响应状态码: void setStatus(int sc);设置响应头键值对: void setHeader(String name,String value);response实现重定向resp.setStatus(302);resp.setHeader("location","https://www.4399.com");前端a.html登录,将结果传给后端,用request接收…

Kail从入门到入狱第二课:mkdir、touch、vim、cat命令的基本应用

如果是日常生活,请不要使用root,因为root可以做任何事情比如"格式C盘" 创建目录:mkdir 很简单,在当前工作目录创建一个目录,如图所示测试:请说出cd /test的含义 今天我们将使用图形界面,请打开命令行创建文件:touch touch filename可以看到成功创建 文本编辑…

地平线与英伟达工具链 PTQ 工具功能参数对比与实操

1.理论简介在阅读本文之前,希望大家对 PTQ(Post-Training Quantization) 训练后量化有一定的了解~地平线 OpenExplorer 和 NVIDIA TensorRT 是两家公司为适配自己的硬件而开发的算法工具链,它们各自具有独特的特点和优势。分开看的时候,网上有很多资料,但却没找到将他们…

公网Linux环境搭建frp实现内网穿透

前提: 本实验为一台ubuntu22操作系统云主机 脚本适用于安装平台:CentOS、Debian、Ubuntu FRP项目地址:https://github.com/fatedier/frp FRP一键脚本地址:https://github.com/MvsCode/frps-onekey1、FRP服务器端一键安装脚本(脚本在本文最后有,如果在服务器上无法获取到下…

码城|计算机专业的00后转行数据分析,还有机会吗?【悟空非空也】

计算机背景学习数据分析是有优势的。数据分析需要一些技术基础,简单点的话,需要会使用 Excel ,复杂点会用 Python 进行数据挖掘和数据分析 ,当然SQL语句一定要会,自己多练习。如果再懂点深度学习,那就更加厉害啦。 有计算机底子,学习 Python 新语言应该也没有什么问题,…