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

news/2024/10/20 0:49:58

比赛链接:https://codeforces.com/contest/2030

A. A Gift From Orangutan

肯定最小值和最大值放前面最好,答案得解

		#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[150000];int main(){fio();ll t;cin>>t;while(t--){ll n;cin>>n;for(ll i=1;i<=n;i++)cin>>a[i];sort(a+1,a+1+n);ll sum=0;for(ll i=2;i<=n;i++){sum+=a[n]-a[1];}cout<<sum<<endl;}}

B. Minimise Oneness

浅浅枚举下,发现答案不可能为0且1放在中间答案值最小为1

		#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[150000];int main(){fio();ll t;cin>>t;while(t--){ll n;cin>>n;for(ll i=1;i<=n/2;i++){cout<<0;}cout<<1;for(ll i=n/2+2;i<=n;i++){cout<<0;}cout<<endl;}}

C. A TRUE Battle

and是优先于or的,考虑1如果在最左或者最右,一个or即可胜利,否则看是否有两个连续的1,有即胜利

		#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[150000];int main(){fio();ll t;cin>>t;while(t--){ll n;cin>>n;string f;cin>>f;ll pd=0;if(f[0]=='1'||f[f.size()-1]=='1')pd=1;for(ll i=0;i<f.size()-1;i++){if(f[i]=='1'&&f[i+1]=='1')pd=1;}if(pd)cout<<"YES"<<endl;elsecout<<"NO"<<endl;}}

D. QED's Favorite Permutation

本题多个连续查询,于是得考虑连续维护;发现其实可以把数组分成多个不同得移动区间
,如果这个区间全是R或者L或者RRL这种单调的串就一定可以排好序
听说差分可以做,赛时只想到了线段树

		#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;//	const ll p=rnd()%mod;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;}const ll maxn = 2e5+5;
struct s
{ll l, r;ll ad, v, cf;//ad为加法的懒惰标记,cf为乘法的懒惰标记ll la;
}p[maxn << 2];
ll fa[maxn << 2];
void build(ll i, ll l, ll r)
{p[i].l = l,p[i].r = r,p[i].v = 0;p[i].la=-1;if (l == r){fa[l] = i;return;}build(i << 1, l, (l + r) >> 1);build(i << 1 | 1, ((l + r) >> 1) + 1, r);
}
void push_down(ll i)
{if (p[i].la!=-1){p[i].v=(p[i].r-p[i].l+1)*p[i].la;p[i<<1].v=(p[i<<1].r-p[i<<1].l+1)*p[i].la;p[i<<1|1].v=(p[i<<1|1].r-p[i<<1|1].l+1)*p[i].la;p[i<<1].la=p[i].la;p[i<<1|1].la=p[i].la;p[i].la=-1;}
}
void udq(ll i, ll ad, ll cf, ll l, ll r)
{if (p[i].l == l && p[i].r == r){p[i].v=ad*(r-l+1);p[i].la=ad;return;}push_down(i);ll i1 = i << 1, i2 = i << 1 | 1;if (l <= p[i1].r){if (r <= p[i1].r)udq(i1, ad, cf, l, r);elseudq(i1, ad, cf, l, p[i1].r);}if (r >= p[i2].l){if (l >= p[i2].l){udq(i2, ad, cf, l, r);}elseudq(i2, ad, cf, p[i2].l, r);}p[i].v = p[i1].v + p[i2].v;
}
ll query(ll i, ll l, ll r)
{ll ans = 0;if (p[i].l == l && p[i].r == r){ans = p[i].v;return ans;}push_down(i);ll i1 = i << 1, i2 = i << 1 | 1;if (l <= p[i1].r){if (r <= p[i1].r)ans = ans + query(i1, l, r);elseans = ans + query(i1, l, p[i1].r);}if (r >= p[i2].l){if (l >= p[i2].l){ans = ans + query(i2, l, r);}elseans = ans + query(i2, p[i2].l, r);}return ans;
}ll a[1800000];ll b[1800000];bool vis[1800000];ll d[2500000];map<ll,pair<ll,ll>>q;set<ll>pk;int main()//发现RRR or LLL or RRRLL都是对的,每次只要对应处理区间问题即可{fio();ll t;cin>>t;while(t--){//cout<<66<<endl;q.clear();pk.clear();ll n,m;cin>>n>>m;build(1,1,n);//cout<<66<<endl;for(ll i=1;i<=n;i++)cin>>a[i],b[i]=i,vis[i]=0,d[i]=0;string f;map<ll,ll>ok;cin>>f;ll cnt=0;ll l=0;ll op=0;for(ll i=1;i<=n;i++){if(cnt==0&&a[i]==i)continue;if(a[i]!=i){cnt=max(cnt,a[i]);if(l==0){l=i;}}if(cnt==i){cnt=0;op++;q[op]={l,i};//区间ll o=0;for(ll j=l;j<=i;j++){b[j]=op;vis[j]=1;if(f[j-1]=='R')o++;}ok[op]=o;//pk.insert();l=0;}}//cout<<66<<endl;for(ll i=0;i<f.size();i++){if(f[i]=='L')udq(1,0,0,i+1,i+1);else udq(1,1,0,i+1,i+1);}//cout<<66<<endl;cnt=0;//cout<<op<<endl;for(ll i=1;i<=op;i++){ll c=ok[i];ll l=q[i].first;ll r=q[i].second;//cout<<c<<" "<<r<<" "<<l<<endl;if(c==r-l+1)continue;ll j=(r-l+1)-c;if(query(1,r-j+1,r)==0){continue;}else cnt++;}//cout<<cnt<<endl;while(m--){ll wz;cin>>wz;if(vis[wz]==0){if(cnt==0)cout<<"YES"<<endl;else cout<<"NO"<<endl;}else {if(f[wz-1]=='L'){f[wz-1]='R';ll c=ok[b[wz]];ll l=q[b[wz]].first;ll r=q[b[wz]].second;ll j=(r-l+1)-c;ll hl1=0;if(c==r-l+1||query(1,r-j+1,r)==0){hl1=1;}udq(1,1,0,wz,wz);ok[b[wz]]++;c++;ll hl2=0;j=(r-l+1)-c;if(c==r-l+1||query(1,r-j+1,r)==0){hl2=1;}if(hl1==0&&hl2==1)cnt--;else if(hl1==1&&hl2==0)cnt++;if(cnt==0)cout<<"YES"<<endl;else cout<<"NO"<<endl;}else {f[wz-1]='L';ll c=ok[b[wz]];ll l=q[b[wz]].first;ll r=q[b[wz]].second;ll j=(r-l+1)-c;ll hl1=0;if(c==r-l+1||query(1,r-j+1,r)==0){hl1=1;}udq(1,0,0,wz,wz);ok[b[wz]]--;c--;ll hl2=0;j=(r-l+1)-c;if(c==r-l+1||query(1,r-j+1,r)==0){hl2=1;}if(hl1==0&&hl2==1)cnt--;else if(hl1==1&&hl2==0)cnt++;if(cnt==0)cout<<"YES"<<endl;else cout<<"NO"<<endl;}}}}}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

AI工人操作行为流程规范识别系统

AI工人操作行为流程规范识别系统利用高清监控摄像头覆盖现场作业区域,AI工人操作行为流程规范识别系统通过图像识别和深度学习技术对作业人员的操作行为进行实时分析。AI工人操作行为流程规范识别系统能够准确识别工人的操作行为是否符合作业标准规定的流程和合规SOP,并根据设…

高级程序语言课第三次作业

2024高级语言程序设计:https://edu.cnblogs.com/campus/fzu/2024C 高级语言程序设计课程第三次个人作业:https://edu.cnblogs.com/campus/fzu/2024C/homework/13284 学号:102400115 姓名:洪育豪 作业内容:编写并运行书本第4章4.8编程练习题目中的第2题到第4题,第6题到第8题 编…

传送带下料口堵塞识别检测系统

传送带下料口堵塞识别检测系统利用AI视觉识别算法,传送带下料口堵塞识别检测系统通过现场监控摄像头对传送带的运输物料过程进行实时分析和识别。传送带下料口堵塞识别检测系统能够准确判断下料口是否出现堵塞现象,并及时抓拍有关图像进行记录。传送带下料口堵塞识别检测系统…

React/Vue 实现的前端应用, java/Go/Python 实现的后端应用,前后端分离的应用部署的最佳实践

前后端分离的应用(React 前端 + Java 后端)在部署过程中,需要考虑性能、扩展性、安全性、以及维护方便性等多个方面。下面我将详细介绍前后端分离应用的最佳实践,从架构设计、构建和打包、部署策略、CI/CD 集成、安全性措施等几个角度来描述。 微服务架构图示例壹.总体概述…

gradle配置代理

下载gradle项目 访问:https://start.spring.io/如上图所示,生成代码 配置代理服务器 买个国外的节点,使用 xshell 带代理方式连接,会暴露出 socks://localhost:1080建议开启 BBR 拥塞控制 # 要确保 linux 内核版本是4.9或更高,否则后面不用做了 uname -r # 加载 TCP BBR 模…

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

《用Gin框架构建分布式应用》学习第6天,p88-p100总结,总计13页。 一、技术总结 1.MongoDB CRUD操作 (1)InsertOne(), InsertMany() (2)Find() (3)UpdateOne, UpdateMany() (4)DeleteOne(), DeleteMany() 2.MongoDB primitive p96,recipe.ID = primitive.NewObjectID() 中的…

在blender中打开pmx文件

适用blender版本: 3.6 - 4.0 - 4.1 - 4.2 等 本人使用的blender版本为3.6 和 4.2 这里用3.6作案例下载cats插件在github中查找cats-blender-plugin 比如说这个:https://github.com/absolute-quantum/cats-blender-plugin下载最新的插件 注意: 插件版本只对应相应的blender版本…

操作系统_Paxos协议实现数据一致性更新

一、实验环境 系统:Windows10 编译软件:Visual Studio 2022 语言:C 二、内容 假设由5台服务器Ai(i=1,2..5)组成集群,每份数据在5台服务器中各保留一个副本。当客户端C1和C2同时修改存储在集群中的同一个数据时,由于网络修改延迟的存在无法保证两个数据的请求到达每台服务器…