Educational Codeforces Round 82 (Rated for Div. 2)(A-C)(暑假训练8.13)(D可做)

2023-10-07 15:38

本文主要是介绍Educational Codeforces Round 82 (Rated for Div. 2)(A-C)(暑假训练8.13)(D可做),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前排高铁
经典战绩图
在这里插入图片描述
总结:自己模的一场,打之前看自己之前a题一直没有通过,所以模的时候a题想的比较透彻,然后过了之后罚站一个半小时,一开始开b想了个数学,发现wa了之后想可能没这么简单,看c能做果断开c,敲了个快百行的构造题,提交都没有自信果然wa了555,但是赛后补两个题不到三十分钟全补完了(就离谱!)状态感觉越来越好了捏

A. Erasing Zeroes

题意:给定一个由 0和1组成的字符串s,你需要去掉一些0,使得串内所有的 1 都连续,问最小去掉的0的个数。
思路:可以从结果去想,我要使得最后的串1都连续那么肯定只有三个结果
①:111110000 →前缀1
②:000001111 →后缀1
③:000111100 →中间1
那么暴力的模拟三种情况的删除情况,取个min即可
对于①而言,当出现第一个0之后再出现1那么1之前的0都要删
对于②而言,出现第一个1之后再出现0就删除即可
对于③而言,找前面①和②的最先找到的那么一段即可
具体看代码吧~

#include<bits/stdc++.h>using namespace std;int main()
{string s1;int n,i,j,t;cin>>t;while(t--){cin>>s1;int cnt=0,cnt1=0,cnt2=0;for(i=0;i<s1.length();i++){if(s1[i]=='0') cnt2++;}int d=s1.length();int f=0,ff=0;for(i=0;i<d;i++)  //000001111111{if(s1[i]=='1'){f=1;}else if(f==1&&s1[i]=='0'){cnt++;}else if(f==0&&s1[i]=='0')ff++;}f=0;for(i=0;i<d;i++) //111100000{if(s1[i]=='0'){f++;}else{cnt1+=f;f=0;}}cnt2-=(f+ff);cout<<max(0,min(cnt,min(cnt1,cnt2)))<<endl;}
}

B. National Project

题意:
工程队修长度为n的路,每天可以修长度为1的路或者跳过。每g天好天气以后是b天坏天气,然后又是g天好天气,b天坏天气,以此类推。在好天气修路长度至少为总长度的一半,求修完路所需的最小天数(包括跳过的天数)。
思路:
其实是个比较简单的数学题,虽然是1400分,可能是题意给的不清楚吧,首先明确题意的要求有两个:①所有道路必须要铺满,②至少在晴天铺满一半的路。

之后其实比较好想了 ,先把需要在晴天铺的天数求出来,再判断在晴天铺的天数是否能被g个连续的好天气整除,看需要几段好天气,因为知道要几段好天气就可以知道已经过去了几段差天气,再判断当条件②铺了一半之后,路有没有铺满。
①铺满了就输出好天气所用的天数+过去了几段差天气的天数
②没铺满就输出所需好天气天数+所需坏天气
本题还可以二分答案~
具体看代码吧~

#include<bits/stdc++.h>using namespace std;
#define int long longsigned main()
{int g,b,n,i,t,need1,need2;cin>>t;while(t--){cin>>n>>g>>b;need1=(n%2==0?n/2:n/2+1);need2=n-need1;int cnt1=0,cnt2=0;int ans=0;if(g>=n){cout<<n<<endl;continue;}if(need1%g==0){cnt1=need1/g;}else{cnt1=need1/g+1;}int ans1=0,ans2=0;ans2=(cnt1-1)*b;if(ans2>=need2){cout<<need1+ans2<<endl;}else{cout<<need1+need2<<endl;}}return 0;
}

C - Perfect Keyboard

题意:
给出一个字符串S,求是否存在一种26个字母排列的构造方式T使得S中任意相邻两位都在T中相邻,数据保证S不会存在相邻两位字母相同,若存在则输出YES并输出一种合法的构造方式,否则输出NO。
思路:
先去想能构造的情况,会发现只有两种,一种是有两个字母相邻的字母只有一个,那么一个做头一个做尾巴,如果能一直从头连到尾,那么成立,还有一种就是我wa蒙了且没考虑的情况,就是密码长度为1的时候。。
接下来就是大构造啦通过用结构体存每个字母相邻的两个或者一个字母是哪种,然后如果只有两个字母出现过一次,那么就进入循环判断,任取一个字母当头,递归的去找

#include<bits/stdc++.h>using namespace std;struct node{char c1,c2;int cnt;
}mo[1000];
void inti()
{for(int i=0;i<999;i++){mo[i].cnt=0;mo[i].c1=' ';mo[i].c2=' ';}}
int main()
{string s1;int t,n,i,j,d;cin>>t;while(t--){inti();cin>>s1;d=s1.length();for(i=0;i<d;i++){if(i==0){mo[s1[i]].c1=s1[i+1];mo[s1[i]].cnt++;}else if(i==d-1){if(mo[s1[i]].cnt==0)mo[s1[i]].c1=s1[i-1],mo[s1[i]].cnt++;else{if(s1[i-1]!=mo[s1[i]].c1)mo[s1[i]].c2=s1[i-1],mo[s1[i]].cnt++;}}else{int cn=mo[s1[i]].cnt;if(s1[i+1]==s1[i-1]){if(cn==0){mo[s1[i]].c1=s1[i+1];mo[s1[i]].cnt++;}else{if(s1[i-1]!=mo[s1[i]].c1)mo[s1[i]].c2=s1[i-1],mo[s1[i]].cnt++;}}else{mo[s1[i]].c1=s1[i+1];mo[s1[i]].c2=s1[i-1];mo[s1[i]].cnt=2;}}}int anss=0,flag=0;char bg,ed;for(i=0;i<26;i++){char c1='a'+i;if(mo[c1].cnt==1){anss++;if(anss==1) bg=c1;else ed=c1;}else if(mo[c1].cnt!=0){flag=1;}}if(anss==1){if(flag==1){cout<<"NO"<<endl;}else{cout<<"YES"<<endl;cout<<bg;for(i=0;i<26;i++){char c1='a'+i;if(mo[c1].cnt==0) cout<<c1;}cout<<endl;}}else if(anss==2){int flag=0;char cc=bg;string anss="";map<char ,int >m1;anss+=cc;m1[cc]++;int cntt=0;char lf=bg;while(1){if(mo[cc].c1!=lf){lf=cc;cc=mo[cc].c1;}else{lf=cc;cc=mo[cc].c2;}anss+=cc;m1[cc]++;if(m1[cc]>=2){flag=0;break;}if(cc==ed){flag=1;break;}cntt++;if(cntt==50){break;}}if(flag==0){cout<<"NO"<<endl;}else{cout<<"YES"<<endl;for(i=0;i<26;i++){char x='a'+i;if(m1[x]==0)anss+=x;}cout<<anss<<endl;}}else{cout<<"NO"<<endl;}}
}

这篇关于Educational Codeforces Round 82 (Rated for Div. 2)(A-C)(暑假训练8.13)(D可做)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/158727

相关文章

Codeforces Round #240 (Div. 2) E分治算法探究1

Codeforces Round #240 (Div. 2) E  http://codeforces.com/contest/415/problem/E 2^n个数,每次操作将其分成2^q份,对于每一份内部的数进行翻转(逆序),每次操作完后输出操作后新序列的逆序对数。 图一:  划分子问题。 图二: 分而治之,=>  合并 。 图三: 回溯:

Codeforces Round #261 (Div. 2)小记

A  XX注意最后输出满足条件,我也不知道为什么写的这么长。 #define X first#define Y secondvector<pair<int , int> > a ;int can(pair<int , int> c){return -1000 <= c.X && c.X <= 1000&& -1000 <= c.Y && c.Y <= 1000 ;}int m

Codeforces Beta Round #47 C凸包 (最终写法)

题意慢慢看。 typedef long long LL ;int cmp(double x){if(fabs(x) < 1e-8) return 0 ;return x > 0 ? 1 : -1 ;}struct point{double x , y ;point(){}point(double _x , double _y):x(_x) , y(_y){}point op

Codeforces Round #113 (Div. 2) B 判断多边形是否在凸包内

题目点击打开链接 凸多边形A, 多边形B, 判断B是否严格在A内。  注意AB有重点 。  将A,B上的点合在一起求凸包,如果凸包上的点是B的某个点,则B肯定不在A内。 或者说B上的某点在凸包的边上则也说明B不严格在A里面。 这个处理有个巧妙的方法,只需在求凸包的时候, <=  改成< 也就是说凸包一条边上的所有点都重复点都记录在凸包里面了。 另外不能去重点。 int

Codeforces 482B 线段树

求是否存在这样的n个数; m次操作,每次操作就是三个数 l ,r,val          a[l] & a[l+1] &......&a[r] = val 就是区间l---r上的与的值为val 。 也就是意味着区间[L , R] 每个数要执行 | val 操作  最后判断  a[l] & a[l+1] &......&a[r] 是否= val import ja

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering)

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering) Power Iteration Clustering (PIC) 是一种基于图的聚类算法,用于在大规模数据集上进行高效的社区检测。PIC 算法的核心思想是通过迭代图的幂运算来发现数据中的潜在簇。该算法适用于处理大规模图数据,特别是在社交网络分析、推荐系统和生物信息学等领域具有广泛应用。Spa

SigLIP——采用sigmoid损失的图文预训练方式

SigLIP——采用sigmoid损失的图文预训练方式 FesianXu 20240825 at Wechat Search Team 前言 CLIP中的infoNCE损失是一种对比性损失,在SigLIP这个工作中,作者提出采用非对比性的sigmoid损失,能够更高效地进行图文预训练,本文进行介绍。如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注

CSS实现DIV三角形

本文内容收集来自网络 #triangle-up {width: 0;height: 0;border-left: 50px solid transparent;border-right: 50px solid transparent;border-bottom: 100px solid red;} #triangle-down {width: 0;height: 0;bor

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的