ICPC-思维-CFJamie and Binary Sequence+No to Palindromes!【刷题记录】

2024-06-07 15:08

本文主要是介绍ICPC-思维-CFJamie and Binary Sequence+No to Palindromes!【刷题记录】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

https://codeforces.com/contest/916/problem/B
Jamie and Binary Sequence
没有一丝丝防备,被审题给坑了(看完题解,折服于贪心)
大家肯定会想到分解成二进制数,然后进行每一位拆分,使得1的个数刚好等于k,但是题目不是构造题。。。。
要求
1.y最小:所有幂次的最大值最小
所以在1的数量符合条件的情况下,每一位幂次要么全往后移(使得y值减小),要么不操作。
2.字典序最大:大的值放前面(负数也是一样)
比如:
1 3 ans=-1 -2 -2
1 4 ans=-2 -2 -2 -2
3.在第一步操作之后,可能会产生1的数量不够,然后为了保持字典序最大,从最后一个1开始拆分,直到数量符合

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mem(a,b) memset(a,b,sizeof a)
const int mod=1e9+7;
const int maxn=1e6;
ll n,m;
map<int,int>vis;
int main(){cin>>n>>m;vis.clear();int sum=0;int i=0;int l=0;int r=-1;while(n>0){if(n&1){vis[i]++;sum++;if(r<0)r=i;l=i;}i++;n>>=1;}if(sum>m){printf("No\n");return 0;}else {printf("Yes\n");multiset<int>ms;for(int j=l;j>=-63;j--){//1.从前往后分if(sum+vis[j]<=m){sum+=vis[j];vis[j-1]+=2*vis[j];vis[j]=0;}else break;}for(int k=l;k>=-63;k--){for(int j=0;j<vis[k];j++)ms.insert(k);}int y=ms.size();//2.从最小位进行补位while(y<m){int t=*ms.begin();ms.erase(ms.begin());ms.insert(t-1);ms.insert(t-1);y++;}for(auto it=ms.rbegin();it!=ms.rend();it++)printf("%d ",*it);printf("\n");}return 0;
}

https://codeforces.com/contest/791/problem/C
Bear and Different Names
这个呀,才是构造题。
就是NO的时候让每一段的最后一位等于第一位,这样就不会对中间部分的其他的可能的yes产生影响了
然后呀,这个最坑的一个是名字问题,首字母大写,而且有50个名字,单个字符还不够。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mem(a,b) memset(a,b,sizeof a)
const int mod=1e9+7;
const int maxn=1e6;
ll n,m;
int name[105];
int main(){int a,b,c;cin>>n>>m;string s;for(int i=1;i<=n;i++)name[i]=i;//坑点50个名字for(int i=1;i<=n-m+1;i++){cin>>s;if(s[0]=='N'){name[i+m-1]=name[i];}}for(int i=1;i<=n;i++){if(name[i]<26)cout<<char('A'+name[i])<<" ";else {cout<<"A"<<char('a'+name[i]-26)<<" ";}}return 0;
}

https://codeforces.com/contest/237/problem/C
Primes on Interval
质数打表,求质数个数的前缀和,再二分答案(长度)。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mem(a,b) memset(a,b,sizeof a)
const int mod=1e9+7;
const int maxn=1e6;
ll n,m;
int a,b,k;
vector<int>prim;
bool vis[maxn+5];
int prisum[maxn+5];
void init(){mem(vis,1);vis[1]=0;prisum[1]=0;for(int i=2;i<=maxn;i++){if(vis[i]){prim.push_back(i);prisum[i]=prisum[i-1]+1;}else prisum[i]=prisum[i-1];for(int j=0;j<prim.size()&&1LL*i*prim[j]<=maxn;j++){vis[i*prim[j]]=0;if(i%prim[j]==0)break;}}
}
bool check(int l){for(int i=a;i<=b-l+1;i++){if(prisum[i+l-1]-prisum[i-1]<k)return false;}return true;
}
int main(){init();cin>>a>>b>>k;int l=0,r=b-a+2,mid,ans=-1;while(l<=r){mid=(l+r)/2;if(check(mid)){ans=mid;r=mid-1;}else l=mid+1;}if(ans>0&&ans<=b-a+1)cout<<ans<<endl;else cout<<"-1\n";return 0;
}

https://codeforces.com/contest/900/problem/C
Remove Extra One
前缀里维护一个区间最大值mx和区间第二大的值mxs
如果一个数是被挡住了,那么他一定是小于前缀区间的最大值,但是大于前缀区间的第二大值。
注意因为第一个不算record数,所以一开始的最大值的数值被定义为-1

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mem(a,b) memset(a,b,sizeof a)
const int mod=1e9+7;
const int maxn=1e5;
ll n,m;
int b,k;
int a[maxn+5];//i这个数后面有多少个被隐藏的记录数
int main(){cin>>n;int mx=0;int mxs=0;mem(a,0);for(int i=1;i<=n;i++){cin>>m;if(m>mx){//之前的最大值挡不住mxs=mx;///更新最大值mx=m;a[m]=-1;//最大值找后面被它挡住的数}else if(m>mxs){//最大值挡住当前这数a[mx]++;mxs=m;}}a[0]=-1*maxn;int ans=0;for(int i=1;i<=n;i++){//第一个元素是不算record的。if(a[i]>a[ans])ans=i;}cout<<ans<<endl;return 0;
}

https://codeforces.com/contest/464/problem/A
No to Palindromes!
将字符串转化为p进制

然后进行进位判断,同时对于回文部分判断处理有:
相邻相同,第二位+1,后面改成abcabc…
相隔一个相同,第三位+1,后面改成abcabc…

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mem(a,b) memset(a,b,sizeof a)
const int mod=1e9+7;
const int maxn=1e5;
ll n,m;
int b,k;
string s;
int a[maxn+5];
int main(){cin>>n>>m;//m-pcin>>s;for(int i=0;i<n;i++)a[i]=s[i]-'a';a[n-1]++;///进制+1while(1){///进位处理for(int i=n-1;i>0;i--){if(a[i]>=m){a[i-1]+=a[i]/m;a[i]=a[i]%m;}}if(a[0]/m>0){cout<<"NO\n";break;}///找回文int repeat=-1;for(int i=0;i<n;i++){if(i+1<n&&a[i]==a[i+1]){repeat=i+2;}if(i+2<n&&a[i]==a[i+2]){repeat=i+3;}if(repeat>=0)break;}if(repeat>=0){//有回文for(int i=0;repeat+i<n;i++){a[i+repeat]=i%3;}a[repeat-1]++;continue;}for(int i=0;i<n;i++)cout<<char(a[i]+'a');printf("\n");break;}return 0;
}

https://codeforces.com/contest/900/problem/B
Position in Fraction
给你分子a,分母b,数字c,求在这个分数的小数形式里,c的位置
这个我想到小数的分类
本质是判断 a * 10 - b的倍数【最大的,小于等于(a*10)】=余数(假设这种叫法)
有限小数:余数为0。。。这里很好判断
无限循环:余数重复。。。这里可能没有c
无限不循环:余数不重复。。。这里我猜测会出现一个c

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mem(a,b) memset(a,b,sizeof a)
const int mod=1e9+7;
const int maxn=1e5;
ll m;
int a,b,c;
string s;
map<int,int>hhh;
int main(){cin>>a>>b>>c;int d=__gcd(a,b);a=a/d;b=b/d;ll p=a,temp;int ans=0;hhh.clear();bool f=false;for(int i=1;;i++){temp=p*10/b;p=p*10-temp*b;if(temp==c){//找到ans=i;f=true;break;}if(hhh.find(p)!=hhh.end()){//循环break;}else hhh[p]=i;}if(f)cout<<ans<<endl;else cout<<"-1\n";return 0;
}

https://codeforces.com/problemset/problem/399/B
Red and Blue Balls
这里是找规律
发现和二进制有关系。
从左往右,直到最后一个蓝色球
蓝色是1,红色是0,再翻转这个二进制,就是答案。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mem(a,b) memset(a,b,sizeof a)
const int mod=1e9+7;
const int maxn=1e5;
ll m;
int u,v;
string s;
ll num[105];
bool n[105];
int edge[105][105];
int main(){//ios::sync_with_stdio(false);cin>>m;cin>>s;int cur=0;ll sum=0;ll p=1;mem(n,0);for(int i=0;i<m;i++){if(s[i]=='B'){cur=i;n[i]=1;}num[i]=p;p=p*2LL;}for(int i=0;i<=cur;i++){sum=sum+num[i]*n[i];}cout<<sum<<endl;return 0;
}

这篇关于ICPC-思维-CFJamie and Binary Sequence+No to Palindromes!【刷题记录】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定

国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)

《国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)》本文给大家利用deepseek模型搭建私有知识问答库的详细步骤和遇到的问题及解决办法,感兴趣的朋友一起看看吧... 目录1. 第1步大家在安装完ollama后,需要到系统环境变量中添加两个变量2. 第3步 “在cmd中

Spring Retry 实现乐观锁重试实践记录

《SpringRetry实现乐观锁重试实践记录》本文介绍了在秒杀商品SKU表中使用乐观锁和MybatisPlus配置乐观锁的方法,并分析了测试环境和生产环境的隔离级别对乐观锁的影响,通过简单验证,... 目录一、场景分析 二、简单验证 2.1、可重复读 2.2、读已提交 三、最佳实践 3.1、配置重试模板

在 Spring Boot 中使用异步线程时的 HttpServletRequest 复用问题记录

《在SpringBoot中使用异步线程时的HttpServletRequest复用问题记录》文章讨论了在SpringBoot中使用异步线程时,由于HttpServletRequest复用导致... 目录一、问题描述:异步线程操作导致请求复用时 Cookie 解析失败1. 场景背景2. 问题根源二、问题详细分

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短