Codeforces Round 900 (Div. 3)(A-F)

比赛链接  :

Dashboard - Codeforces Round 900 (Div. 3) - Codeforces

A. How Much Does Daytona Cost?

题面 : 

思路 :

在序列中只要找到k,就返回true ;

代码 : 

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;
typedef long long LL;
const int N = 2e5+10;inline void solve(){int n , k ; cin >> n >> k ;bool tag = false;for(int i=0;i<n;i++){int x ; cin >> x ;if(x==k) tag = true;}if(tag) cout << "Yes" << endl;else cout << "No" << endl;return ;
}int main()
{IOSint _ = 1;cin >> _;while(_ --) solve();return 0;
}

B. Aleksa and Stack

题面 : 

思路 :

在这道题中,只要满足任意两个相邻数的和,不能够不是3的倍数,且数组单调递增,那么便可以构造出这样一个序列,每两个相邻数中第一个数 mod 3 = 0,另一个数mod 3 = 1 ,然后递增的话,就可以使a1 = 3 *1 , a2= a1 + 1,a3 = 3 * 2,a4 = a3 + 1,即可满足题目条件;

代码

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;
typedef long long LL;
int gcd(int a,int b){ return b==0 ? a : gcd(b,a%b); }
int lcm(int a,int b){ if(a==0||b==0) return 0; return (a*b)/gcd(a,b); }
bool is_prime(int x){if(x<2) return false;
for(int i=2;i<=x/i;i++) if(x%i==0) return false; return true;}
//numbers.erase(std::unique(numbers.begin(), numbers.end()), numbers.end()); // 去重操作
const int N = 2e5+10;// 任意两个数的和不是3的倍数 // 0, 1, 2
// 3 , 4 , 6, 7 inline void solve(){int n ; cin >> n ;int x = 3;while(n>1){cout << x << " " << x + 1 << " ";x += 3;n -= 2;}if(n) cout << x ;cout << endl ;return ;}int main()
{IOSint _ = 1;cin >> _;while(_ --) solve();return 0;
}

 C. Vasilije in Cacak

题面 : 

思路 : 

对于从  [1 ,n ]  中 选k个数 的 和为x;

假如 n = 2 (并且假设k = 2,下面一样):

         1,2 --> 1, 2, 3
n = 3 :

        1, 2 ,3 : 1,2,3,4,5,6 选两个 : 3-5 
n = 4 :

        1,2,3,4 : 3-7 :  

那么我们就可以发现一个规律 : 在[1,n]中取k个数和的范围是[最小的k个数相加,最大的k个数相加];

为了计算的方便,我们可以使用等差数列求和 : s = n*a1+(n-1)*n*d/2  ;

代码 : 

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;
typedef long long LL;LL n , k , x ;// [1,n] 中 选k个数 的 和为x;// 1,2 --> 1, 2, 3
//1, 2 ,3 : 1,2,3,4,5,6 选两个 : 3-5 
// 1,2,3,4 : 3-7 :  // 等差数列求和 : s = n*a1+(n-1)*n*d/2 inline void solve(){cin >> n >> k >> x;LL l = (1+k)*k/2 , r = (n+n-k+1)*k/2;if(x>=l && x<=r) cout << "Yes" << endl;else cout << "No" << endl;return ;
}int main()
{IOSint _ = 1;cin >> _;while(_ --) solve();return 0;
}

D. Reverse Madness

题面

思路 : 

l和r都是单调递增的,且对于每一段区间都是不相交的,所有可以很快找到x对应的li和ri来满足li<=x && x<=ri ;

找到之后就是进行区间的反转,对于每个区间假设li = 2,ri =6,如果x = 4,则a=b=4,如果x=3,则a=3,b=5;那么说明是关于终点对称的,那么就可以使用前缀和算法,来对每个点进行反转次数的统计,如果统计次数为偶那就不用反转了,为奇,则要反转,具体请看代码;

代码

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;
typedef long long LL;
const int N = 2e5+10;inline void solve(){int n,k;cin >> n >> k ;string s ; cin >> s ;s = ' ' + s ;vector<int> l(k+1) , r (k+1) ;for(int i=1;i<=k;i++) cin >> l[i] ;for(int i=1;i<=k;i++) cin >> r[i] ;int q ; cin >> q ;vector<int> x(q+1) ;for(int i=1;i<=q;i++) cin >> x[i] ;vector<pair<int,int>> sum(n+3) ;for(int i=1;i<=q;i++){int pos = lower_bound(r.begin()+1,r.end(),x[i]) - r.begin();int a = min(x[i] , r[pos]+l[pos]-x[i]);int b = max(x[i],r[pos]+l[pos]-x[i]);sum[a].first++ ; sum[b+1].first--;sum[a].second = b ; sum[b].second = a ;}for(int i=1;i<n;i++){sum[i].first += sum[i-1].first ;}int start = -1 , end = -1 ;for(int i=1;i<=n;i++){if(sum[i].first % 2 == 1){start = i ;int end = sum[i].second ;while(start <= end){while(start<=end && sum[start].first % 2 == 1){swap(s[start],s[end]);start ++;end--;}while(start <= end && sum[start].first % 2 == 0){start ++;end -- ;}}i = sum[i].second ;}}for(int i=1;i<=n;i++) cout << s[i] ;cout << endl; 
}int main()
{IOSint _ = 1;cin >> _;while(_ --) solve();return 0;
}

E. Iva & Pav

题面 :

思路 : 

// f(l,r)=al & al+1 &…& ar
// 给定一个 l , k ,求最大的r,满足f(l , r) >= k ;
// 定l,则f随着r单调递减 
// & : 按位与 

按位与的特点是,对于某一位,[l,r]上的所有数的该位上为1,结果才为1,那么我们可以采用前缀和的思想,用bit[i][j]来存[1,i]上第j位上为1的个数,具体实现请看代码,再获得bit数组之后,因为在l确定之后,f(l,r)随着r的增大具有单调递减的性质,所有可以使用二分来进行操作;

具体实现请看代码 ;

代码 : 

// f(l,r)=al & al+1 &…& ar
// 给定一个 l , k ,求最大的r,满足f(l , r) >= k ;
// 定l,则f随着r单调递减 
// & : 按位与 
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;
typedef long long LL;
const int N = 2e5 + 10 ;inline void solve(){int n ; cin >> n ;vector<array<int,32>> bit(n+1);for(int i=1;i<=n;i++){int x ; cin >> x ;for(int j = 0;j<32;j++){bit[i][j] = 0 ;bit[i][j] += x % 2 ;x /= 2 ;bit[i][j] += bit[i-1][j] ; // 进行前缀和操作,统计i前面j位上为1的个数 }	} auto check = [&](int l,int r ,int c){vector<int> b(32) ;for(int i=0;i<32;i++){b[i] = bit[r][i] - bit[l-1][i] ;}int ans = 0 ;for(int i=0;i<32;i++){if(b[i]==r-l+1) ans += pow(2,i);}return ans >= c ; };int q ; cin >> q ;while(q--){int l , k ; cin >> l >> k ;int L = l, R = n;int ans = -1 ;while(L<=R){int mid = (L+R)>>1 ;if(check(l,mid,k)){ans = mid ;L = mid + 1; }else{R = mid - 1 ;}}cout << ans << " " ;}cout << endl ;
}int main()
{IOSint _ = 1;cin >> _;while(_ --) solve();return 0;
}

F. Vasilije Loves Number Theory

题面 : 

思路 : 

  •  1 : n *= x,然后问是否存在一个a使得gcd(n,a)=1并且n*a的约数个数等于n,
  • gcd(n,a)=1 --> n,a互质
  • 由于n,a互质,那么 d(n)*d(a)=d(n*a),那么就是要d(a) = n / d(n),所以n % d(n)一定要等于零 

然后就可以通过唯一分解定理来解;

具体实现请看代码 :

代码

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;
typedef long long LL;
const int N = 2e5+10;// 1 : n *= x,然后问是否存在一个a使得gcd(n,a)=1并且n*a的约数个数等于n,
// gcd(n,a)=1 --> n,a互质
// --> d(n)*d(a)=d(n*a),那么就是要d(a) = n / d(n),所以n % d(n)一定要等于零 inline void solve(){int n,q;cin>>n>>q;int cnt = 1 ; // 记录因数的数量 map<int,int> doc ;// 质因数分解 : // num = b1^c1 + b2 ^c2 + .... + bn^cn ; for(int i=2;i*i<=n;i++){// i相当于上面的b,c相当于上面的c ; if(n%i==0){int c =  0 ;while(n%i==0) n/=i,c++;doc[i] = c ;cnt *= (c+1);}}if(n>1) doc[n] = 1 , cnt *= 2 ; // 最后剩下的n本身也是一个质因数 int now = cnt;auto doc2 = doc ;while(q--){int op ; cin >> op ;if(op == 2){now = cnt  ;doc2 = doc ;}else{int x ; cin >> x ;for(int i=2;i*i<=x;i++){if(x%i==0){int c =  0 ;while(x%i==0) x/=i,c++;now /= (doc2[i]+1);doc2[i] += c; now *= (doc2[i]+1);}}if(x>1){now /= (doc2[x]+1);doc2[x]+=1;now *= (doc2[x]+1);}int t = now  ;for(auto it:doc2){int x = it.first ;int y = it.second ;while(y>0 && t % x== 0){t /= x ;y -- ;}}cout << (t==1?"YES":"NO")<<endl; }}
}int main()
{IOSint _ = 1;cin >> _;while(_ --) solve();return 0;
}

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

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

相关文章

spring 之 事务

1、JdbcTemplate Spring 框架对 JDBC 进行封装&#xff0c;使用 JdbcTemplate 方便实现对数据库操作 1.1 准备工作 ①搭建子模块 搭建子模块&#xff1a;spring-jdbc-tx ②加入依赖 <dependencies><!--spring jdbc Spring 持久化层支持jar包--><dependency&…

性能优化(CPU优化技术)-ARM Neon详细介绍

本文主要介绍ARM Neon技术&#xff0c;包括SIMD技术、SIMT、ARM Neon的指令、寄存器、意图为读者提供对ARM Neon的一个整体理解。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09…

2024年总结的前端学习路线分享(学习导读)

勤学如春起之苗&#xff0c;不见其增&#xff0c;日有所长 。辍学如磨刀之石&#xff0c;不见其损&#xff0c;日有所亏。 在写上一篇 2023年前端学习路线 的时候&#xff0c;时间还在2023年初停留&#xff0c;而如今不知不觉时间已经悄然来到了2024年&#xff0c;回顾往昔岁月…

三、Mysql安全性操作[用户创建、权限分配]

一、用户 1.创建用户 CREATE USER test1localhost identified BY test1;2.删除用户 DROP USER test2localhost;二、权限分配 1.查询用户权限 SHOW GRANTS FOR test1localhost;2.分配权限 # 分配用户所有权限在for_end_test库的test1表 GRANT ALL PRIVILEGES ON for_end_t…

Pycharm引用其他文件夹的py

Pycharm引用其他文件夹的py 方式1&#xff1a;包名设置为Sources ROOT 起包名的时候&#xff0c;需要在该文件夹上&#xff1a;右键 --> Mark Directory as --> Sources ROOT 标记目录为源码目录&#xff0c;就可以了。 再引用就可以了 import common from aoeweb impo…

OCP NVME SSD规范解读-3.NVMe管理命令-part2

NVMe-AD-8&#xff1a;在某些情况下&#xff08;如Sanitize命令、Format NVM命令或TCG Revert方法后数据被清除&#xff09;&#xff0c;设备应允许读取已清除的LBAs而不产生错误&#xff0c;并在最后一次清除完成后&#xff0c;对未写入LBAs的读取返回所有零值给主机 NVMe-AD…

鸿蒙开发之android对比开发《基础知识》

基于华为鸿蒙未来可能不再兼容android应用&#xff0c;推出鸿蒙开发系列文档&#xff0c;帮助android开发人员快速上手鸿蒙应用开发。 1. 鸿蒙使用什么基础语言开发&#xff1f; ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风…

二叉树题目:根到叶路径上的不足结点

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;根到叶路径上的不足结点 出处&#xff1a;1080. 根到叶路径上的不足结点 难度 6 级 题目描述 要求 给定二叉树的根结点 root \texttt{root} root…

关键字:throw关键字

在 Java 中&#xff0c;throw关键字用于抛出异常。当程序执行过程中发生意外情况&#xff0c;如错误的输入、资源不足、错误的逻辑等&#xff0c;导致程序无法正常执行下去时&#xff0c;可以使用throw关键字抛出异常。 以下是使用throw关键字的一些示例&#xff1a; 抛出异常…

服装店收银系统不只是收银 还需要线上商城和线上批发

一个综合性的服装店收银系统可以结合线上商城和线上批发功能&#xff0c;提供以下特点和优势&#xff1a; 线上商城&#xff1a;将服装店的商品信息同步到线上商城平台&#xff0c;让顾客可以通过网站或移动应用程序浏览和购买商品。线上商城可以实现在线支付、订单跟踪、售后服…

MySQL数据库索引优化

一、引言 1. 索引的重要性 MySQL数据库索引的重要性主要体现在&#xff0c;一是查询速度优化&#xff0c;索引可以极大地提高查询速度。对于没有索引的表&#xff0c;MySQL必须进行全部扫描来找到所需的行&#xff0c;如果表中数据量很大&#xff0c;那么通常很慢。通过适当的…

大数据规模存储的几个核心问题

文章目录 三个关键问题RAID&#xff08;独立磁盘冗余阵列&#xff09;RAID是如何解决关于存储的三个关键问题&#xff1f;水平伸缩 大规模数据存储都需要解决几个核心问题&#xff0c;这些问题都是什么呢&#xff1f; 三个关键问题 1.数据存储容量的问题 既然大数据要解决的…

图像分割实战-系列教程1:语义分割与实例分割概述

&#x1f341;&#x1f341;&#x1f341;图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 下篇内容&#xff1a; Unet系列算法 1、图像分割任务概述 1.1 图像分割 分割任务就是在原始图像…

Elasticsearch8集群部署

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 本文记录在3台服务器上离线搭建es8.7.1版本集群。 1. 修改系统配置 1.1 hosts配置 在三台es节点服务器加入hostname解析&…

加法器原理详解

加法器的介绍与原理分析 什么是加法器&#xff1f; 加法器是一种数字电路&#xff0c;用于将两个二进制数相加并输出它们的和。 如何实现加法器 要讨论如何实现加法器就要先从只有一位的数字先进行考虑 一位二进制数相加 不考虑来自低位的进位——半加器 对于一位二进制…

【VTK三维重建-体绘制】第四期 VTK中GPU加速

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ&#xff1a;870202403 前言 上期内容讲到VTK的体绘制技术vtkGPUVolumeRayCastMapper&#xff0c;本文分享VTK中GPU加速的相关内容&#xff0c;希望对各位小伙伴有所帮助&#xff01; 感谢各位小伙伴的点赞关注&#xff0c;小易会…

机器学习的分类与经典算法

机器学习算法按照学习方式分类&#xff0c;可以分为有监督学习&#xff08;Supervised Learning&#xff09;、无监督学习&#xff08;Unsupervised Learning&#xff09;、半监督学习&#xff08;Semi-supervised Learning&#xff09;、强化学习&#xff08;Reinforcement Le…

图文证明 等价无穷小替换

等价无穷小替换 定义 等价无穷小是无穷小之间的一种关系&#xff0c;指的是&#xff1a;在同一自变量的趋向过程中&#xff0c;若两个无穷小之比的极限为1&#xff0c;则称这两个无穷小是等价的。无穷小等价关系刻画的是两个无穷小趋向于零的速度是相等的。 设当 x → x 0 时…

Android 接入第三方数数科技平台

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、数数科技平台是什么&#xff1f;二、使用步骤1.集成SDK2. 初始化3. 发送事件和设置账号id4. 验证发送事件是否成功 小结 前言 一个成熟的App必然不可缺少对…

算法学习系列(十四):并查集

目录 引言一、并查集概念二、并查集模板三、例题1.合并集合2.连通块中点的数量 引言 这个并查集以代码短小并且精悍的特点&#xff0c;在算法竞赛和面试中特别容易出&#xff0c;对于面试而言&#xff0c;肯定不会让你去写一两百行的代码&#xff0c;一般出的都是那种比较短的…