ABC347
A
link

很简单
遍历,判断模\(k\)是否为\(0\),如果为\(0\),输出\(a_i/k\)。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n,k;
int a[105];
signed main(){
cin >> n >> k;
for(int i = 1;i <= n;++ i){
cin >> a[i];
if(a[i]%k == 0) cout << a[i]/k << " ";
}
return 0;
}
B
link

前置知识:\(map\)
\(map\)类似数组,如\(a_b\),\(a\),\(b\)均可为任何类型,如字符串,大概意思就是,\(a\)对应\(b\)。
遍历每一个子串,看看这个子串在前面出没出现过,没出现过,答案加\(1\)。
怎样遍历子串。
首先两重循环,枚举子串的左右边界,在用一重循环,枚举在当前边界内每一个字符,组成子串。
怎样判断子串出没出过。
使用\(map\),看看\(map\)的当前字符串是否为\(1\),是,出现过,否,没出现过,答案加一,赋为\(1\),即出现过了。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
char s[105];
int n;
string t;
map<string,int> mp;
int ans;
signed main(){
cin >> s+1;
n = strlen(s+1);
for(int i = 1;i <= n;++ i){
for(int j = i;j <= n;++ j){
t.clear();
for(int k = i;k <= j;++ k){
t += s[k];
}
if(!mp[t]) mp[t] = 1,ans++;
}
}
cout << ans;
return 0;
}
C
link

首先,把每一个对应到第一周的上班日和第二周的休息日中。
那么只需要往后移动,把第一周上班日中的全移到第二周休息日,同时第二周休息日中的不能移出去。
找到这些中最大的和最小的(改后的数),如果大于休息日的时间,即会移出去,不可以。
还有一种方案,我们可以从前面截一段放到后面再判断。
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a,b;
int p[200005];
int d,ans = 1e18;
int ma,mi = 1e18;
signed main(){
cin >> n >> a >> b;
for(int i = 1;i <= n;++ i){
cin >> d;
d %= (a+b);
if(d == 0) d = a+b;
if(d <= a){
d += a+b;
}
ma = max(ma,d);
mi = min(mi,d);
p[i] = d;
}
sort(p+1,p+1+n);
for(int i = 1;i < n;++ i){
ans = min(ans,a+b-p[i+1]+p[i]+1);
}
ans = min(ans,ma-mi+1);
if(ans <= a) cout << "Yes";
else cout << "No";
return 0;
}
D
link

首先,我们定义一个\(cy\)为\(y\)中\(1\)的个数。
则,如果\(cy>a+b\),肯定不行。
如果\(cy=a+b\),把\(a\)个\(1\)给第一个数,\(b\)个\(1\)给第二个数,要对应到位置,即可。
如果\(cy<a+b\),\(a\)和\(b\)剩的是单数,不可以,双数可以。
双数的话,首先,在\(a\)和\(b\)中把多出来的平分去掉,剩下的把\(a\)个\(1\)给第一个数,\(b\)个\(1\)给第二个数,找够第一个和第二个数都是\(0\)的位置都赋成\(1\),即可。
注意不超过\(2^{60}\)。
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b,c,cy;
int ca[65];
int aa[65],ba[65];
signed main(){
cin >> a >> b >> c;
int t = c;
for(int i = 0;i <= 59;++ i){
if(t&1) ca[i] = 1,cy++;
t >>= 1;
}
if(cy > a+b||(a+b-cy)%2 != 0){
cout << -1;
return 0;
}
int mu = (a+b-cy)/2;
a -= mu,b -= mu;
for(int i = 0;i <= 59;++ i){
if(ca[i]){
if(a) aa[i] = 1,a--;
else if(b) ba[i] = 1,b--;
}
}
if(a < 0||b < 0){
cout << -1;
return 0;
}
for(int i = 0;i <= 59;++ i){
if(!ca[i]){
if(mu){
aa[i] = 1;
ba[i] = 1;
mu--;
}
}
}
if(mu){
cout << -1;
return 0;
}
int y,e,w;
y = e = 0ll;
w = 1ll;
for(int i = 0;i <= 59;++ i){
if(aa[i]) y += w;
if(ba[i]) e += w;
w *= 2;
}
cout << y << " " << e << endl;
return 0;
}
随机推荐
- Vue.js条件渲染与列表渲染指南
title: Vue.js条件渲染与列表渲染指南 date: 2024/5/26 20:11:49 updated: 2024/5/26 20:11:49 categories: 前端开发 tags: ...
- 使用C#开发微信公众号对接ChatGPT和DALL-E
本人是一家小公司的技术总监,工作包括写市场分析.工作汇报.产品推广文案及代码开发等.在ChatGPT推出之后本人一直在工作中使用,在头脑风暴.大纲生成.语句优化.代码生成方面很有效果.但ChatGPT ...
- makedown快速入门
Makedown学习 Makedown 作为一个强大文本编辑语言,学习并熟悉应用是写好一篇优秀博客的基础 那么接下来我将介绍makedown语言最常用的几个语法 标题 +"space&quo ...
- umount 报错umount: /new_room: target is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1))
挂载逻辑卷后,尝试更新逻辑卷的文件系统 [root@server lost+found]# umount /new_room/ umount: /new_room: target is busy. ( ...
- Hive 在工作中的调优总结
总结了一下在以往工作中,对于Hive SQL调优的一些实际应用,是日常积累的一些优化技巧,如有出入,欢迎在评论区留言探讨~ 一.EXPLAIN 查看执行计划 二.建表优化 2.1 分区 分区表基本操作 ...
- 剑指Offer-58.对称的二叉树(C++/Java)
题目: 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 分析: 从根结点开始递归对比左右子树即可.需要注意的是,当前左右两个结点相同比较 ...
- C# .NET Dictionary 将集合key以ascii码从小到大排序
.NET 不加参数,默认不是按ASC II 排序 .JAVA 默认是按ASC II 排序 . Array.Sort(arrKeys, string.CompareOrdinal); 按ASC II 排 ...
- springboot项目编译时,使用自定义注解类找不到符号
springboot项目编译时,使用自定义注解类找不到符号 Java项目编译时,使用自定义注解类找不到符号Spring-boot项目编辑器:idea问题:编译时找不到符号.项目中用到了自定义注解类.编 ...
- CSV文件存储
CSV 文件存储 CSV,全称为 Comma-Separated Values,中文可以叫作逗号分隔值或字符分隔值,其文件以纯文本形式存储表格数据.该文件是一个字符序列,可以由任意数目的记录组成,记录 ...
- C# Linq.FirstOrDefault、Linq.Where、Linq.AsParallel、List.Exists、List.Find、Dictionar.TryGetValue、HashSet.Contains 性能的比较
今天我们来比较一下集合检索方法性能更优问题,测试代码 public class Entity { public int Id { get; set; } public int No { get; se ...