Codeforces Round 764 (Div. 3)

news2024/11/25 12:26:17

比赛链接

Codeforces Round 764

  • A. Plus One on the Subset
  • B. Make AP
  • C. Division by Two and Permutation
  • D. Palindromes Coloring
  • E. Masha-forgetful

A. Plus One on the Subset

在这里插入图片描述

Example
input

3
6
3 4 2 4 1 2
3
1000 1002 998
2
12 11

output

3
4
1

题意:

你可以选择多个数字,将其加1。上述操作你可以执行多次。
最终使得数组里的数全部相等
请输出最少操作次数

题解:

需要加最多次的是最小的数到最大的数,所以直接 m a x − m i n max-min maxmin即可

#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#define int long long
#define end(x) {cout<<x<<endl;return;}
using namespace std;
typedef pair<int,int> PII;
const int N = 2*1e5+10;
string s;char ch;int n;double d;float f;
int a[N],b[N];
void sove(){
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    sort(a+1,a+n+1);
    cout<<a[n]-a[1]<<endl;
}

signed main(void){
    int _=1;
    cin>>_;
    while(_--)sove();
    return 0;
}

B. Make AP

在这里插入图片描述
Example
input

11
10 5 30
30 5 10
1 2 3
1 6 3
2 6 3
1 1 1
1 1 2
1 1 3
1 100000000 1
2 1 1
1 2 2

output

YES
YES
YES
YES
NO
YES
NO
YES
YES
NO
YES

题意:

给你一个 a , b , c a,b,c a,b,c。你可以将三个中的任意一个数乘上正整数 m m m,如果最后能形成等差数列,那么就输出"YES",否则输出"NO"

题解:

分别考虑 a ∗ m , b , c a*m,b,c am,b,c a , b ∗ m , c a,b*m,c a,bm,c a , b , c ∗ m a,b,c*m a,b,cm的情况
等差数列就是前两项的差和后两项的差相等情况
就可以得到关于 m = f ( a , b , c ) m=f(a,b,c) m=f(a,b,c)的关系式子,我们只需要判断 m m m是否是正整数即可

#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#define int long long
#define end {cout<<"YES"<<endl;return;}
using namespace std;
typedef pair<int,int> PII;
const int N = 2*1e5+10;
string s;char ch;int n;double d;float f;
int a[N],b[N];
inline bool check(double x){
    return x==(int )x;
}
void sove(){
   double a,b,c;cin>>a>>b>>c;
    if((2*b-c)/a>0&&check((2*b-c)/a))end
    if((a+c)/(2*b)>0&&check((a+c)/(2*b))) end
    if((2*b-a)/c>0&&check((2*b-a)/c)) end
    cout<<"NO\n";
}

signed main(void){
    int _=1;
    cin>>_;
    while(_--)sove();
    return 0;
}

C. Division by Two and Permutation

在这里插入图片描述
Example
input

6
4
1 8 25 2
2
1 1
9
9 8 3 4 2 7 1 5 6
3
8 2 1
4
24 7 16 7
5
22 6 22 4 22

output

YES
NO
YES
NO
NO
YES

题意:

给你一个数组,你可以多次将数组里的一个数字除二,向下取整,问最终能不能得到一个 1 − n 1-n 1n的排列

题解:

先将数组排序(从大到小),然后大的先降,因为是 1 − n 1-n 1n,所以大于n都需要缩小到 n n n以内,还需要记录 1 − n 1-n 1n的数字出现情况,如果出现过就继续除二,如果最后出现数字变成 0 0 0了,就说明这个数组变不成。

#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <cstring>
#define int long long
#define end {cout<<"NO"<<endl;return;}
using namespace std;
typedef pair<int,int> PII;
const int N = 2*1e5+10;
string s;char ch;int n;double d;float f;
int a[N];
bool b[N];
void sove(){
    cin>>n;
    memset(b,false,sizeof(b));
    for(int i=1;i<=n;i++)cin>>a[i];
    sort(a+1,a+n+1,[&](int x,int y){return x>y;});
    bool flag=true;
    for(int i=1;i<=n;i++){
        while(a[i]>n||b[a[i]])a[i]/=2;
        b[a[i]]=true;
        if(!a[i])end
    }
    //for(int i=1;i<=n;i++)if(!b[i])end
    cout<<"YES";
    cout<<endl;

}

signed main(void){
    std::ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int _=1;
    cin>>_;
    while(_--)sove();
    return 0;
}

D. Palindromes Coloring

在这里插入图片描述
Example
input

10
8 2
bxyaxzay
6 3
aaaaaa
6 1
abcdef
6 6
abcdef
3 2
dxd
11 2
abcabcabcac
6 6
sipkic
7 2
eatoohd
3 1
llw
6 2
bfvfbv

output

3
2
1
1
1
5
1
1
3
3

题意:

给出长度为 n n n字符串,你可以将其中的若干个字符挑选出来并分成 k k k 组,使每组字符串均为回文串,且这 k k k组字符串中最短的字符串尽可能长。

题解:

记录每个字母出现的次数,然后计算成对出现的和剩余的,因为回文串相当于对称,所以成对出现的就可以有效的增加回文串的长度。
剩下的加上没有用上的配对(成对),如果能大于 k k k组,那就可以增加一个长度(相当于放在回文串的中间!)

#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <cstring>
#define int long long
#define end {cout<<"NO"<<endl;return;}
using namespace std;
typedef pair<int,int> PII;
const int N = 2*1e5+10;
string s;char ch;int n;double d;float f;
int a[N];
bool b[N];
void sove(){
    int k;
    cin>>n>>k>>s;
    int num[CHAR_MAX+1]={0};
    for(int i=0;i<s.size();i++)num[s[i]]++;
    int dui=0,sheng=0;
    for(ch='a';ch<='z';ch++){
        dui+=num[ch]/2;
        sheng+=num[ch]%2;
    }
    //cout<<"sheng:"<<sheng<<endl;
    cout<<(dui/k)*2+(sheng+(dui%k)*2>=k)<<endl;

}

signed main(void){
    std::ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int _=1;
    cin>>_;
    while(_--)sove();
    return 0;
}

E. Masha-forgetful

在这里插入图片描述
Example
input

5

4 8
12340219
20215601
56782022
12300678
12345678

2 3
134
126
123

1 4
1210
1221

4 3
251
064
859
957
054

4 7
7968636
9486033
4614224
5454197
9482268

output

3
1 4 1
5 6 2
3 4 3
-1
2
1 2 1
2 3 1
-1
3
1 3 2
5 6 3
3 4 1

题意:

给出 n n n, m m m,表示有 n n n个长度为 m m m的字符串
再给出一个字符串 s s s
题目是按照电话的记忆来讲的,实际上就是:
你可以在 n n n个字符串里面截取多个长度大于2的字串,将字串拼接能合成为字符串 s s s
输出截取字串个数和字串位置( l , r , i l,r,i l,r,i i i i表示在哪一个字符串, [ l , r ] [l,r] [l,r]表示位置左端点和右端点))
如果不能输出-1

当场写的:

#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <cstring>
#define int long long
#define end {cout<<-1<<endl;return;}
using namespace std;
typedef pair<int,int> PII;
const int N = 2*1e5+10;
string s[N];char ch;int n,m;double d;float f;
//int a[N];
//bool b[N];
void sove(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>s[i];
    string string1;cin>>string1;
    int ans=0;
    vector<tuple<int,int,int>>v;
    int string1_i=0;
    for(int i=1;i<=n;i++){
        int flag=0,first=-1,last=-1;
        int go_end=0;
        for(int j=0;j<s[i].size();j++){
            if(s[i][j]==string1[string1_i]){
                flag++;
                if(flag==1)first=j;
                string1_i++;
                if(string1_i==string1.size()){
                    if(j-first>=1)
                    {
                        v.push_back({first+1, j+1, i});//last
                        go_end=1;
                        break;
                    }
                    else {
                        //还原
                        string1_i--;
                        flag=0;
                        continue;
                    }
                }
            }
            else if(flag){
                last=j-1;
               //input
               if(last-first>=1)
               v.push_back({first+1,last+1,i});
               else {
                   //还原
                   string1_i--;
                   flag=0;
                   continue;
               }
               flag=0;
               j=0;
               //i=1; //不加,最后一个测试没过,加了 需要判的 -1 全错
               //ok //缘由:每个这样的段必须有长度至少2
               i=1;
            }
        }
        if(go_end)break;
    }
    if(string1_i!=string1.size()) end
    else{
        ans=(int)v.size();
        cout<<ans<<endl;
        for(int i=0;i<v.size();i++){
            cout<<get<0>(v[i])<<' '<<get<1>(v[i])<<' '<<get<2>(v[i])<<endl;
        }
    }

}

signed main(void){
    std::ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int _=1;
    cin>>_;
    while(_--)sove();
    return 0;
}

感觉是还原那边有点问题,如果另一个地方有长度大于2的字串还包含了现在判断的字符,那么其实就需要还原多个了。。。

offical:

#include <bits/stdc++.h>

using namespace std;
const int N = 1e4;
map<string, bool> have;
map<string, tuple<int,int,int>> pos;

void solve() {
    int n, m; cin >> n >> m;
    vector<bool> dp(m+1, false);
    vector<int> pr(m+1);
    vector<string> cache;
    dp[0] = true;

    for (int i = 0; i < n; i++) {
        string s; cin >> s;
        for (int j = 0; j < m; j++) {
            string t;
            t += s[j];
            for(int k = 1; k <= 2; k++) {
                if (k + j >= m) break;
                t += s[j+k];

                if (!have[t]) {
                    have[t] = true;
                    pos[t] = make_tuple(j, j+k, i);
                    cache.push_back(t);
                }
            }
        }
    }

    string s; cin >> s;
    for (int i = 0; i < m; i++) {
        string t;
        t += s[i];
        for (int k = 1; k <= 2; k++) {
            if (i - k < 0) break;
            t = s[i-k] + t;
            if (have[t] && dp[i-k]) {
                dp[i+1] = true;
                pr[i+1] = i-k;
            }
            if (dp[i+1]) break;
        }
    }
    for (string t : cache) {
        have[t] = false;
    }

    if (!dp[m]) {
        cout << "-1\n";
        return;
    }
    vector<tuple<int,int,int>> ans;

    for (int k = m; k > 0; ) {
        int p = pr[k];
        string t = s.substr(p, k - p);
        ans.emplace_back(pos[t]);
        k = p;
    }

    cout << (int)ans.size() << '\n';
    reverse(ans.begin(), ans.end());
    for (auto [l,r,i] : ans) cout << l+1 << ' ' << r+1 << ' ' << i+1 << '\n';
}

int main() {
    int t;
    cin >> t;
    for (int tt = 0; tt < t; tt++) {
        solve();
    }
}

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

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

相关文章

怎么学习机械学习相关的技术?

学习机器学习相关技术的过程可以分为以下几个步骤&#xff1a; 掌握基本数学和统计知识&#xff1a; 机器学习建立在数学和统计学的基础上&#xff0c;了解线性代数、概率论、统计学等基本概念和方法对于理解机器学习算法至关重要。 学习编程和数据处理&#xff1a; 掌握一门…

kafka基础介绍

目录 前言&#xff1a; 一:kafka架构 1.kafka基础架构 2、kafka多副本架构 二、kafka基础概念 1、produce 2. Consumer 3、Broker ​ 4、Topic 5、Partition 6、Replicas 7、Offset 8、 AR 9、 ISR 10、OSR 11、HW 12、LEO 13、Lag 三、kafka特性 四、kafka…

总结加载Shellcode的各种方式

1.内联汇编加载 使用内联汇编只能加载32位程序的ShellCode&#xff0c;因为64位程序不支持写内联汇编 #pragma comment(linker, "/section:.data,RWE") //将data段的内存设置成可读可写可执行 #include <Windows.h>//ShellCode部分 unsigned char buf[] &qu…

FreeRTOS-任务通知详解

✅作者简介&#xff1a;嵌入式入坑者&#xff0c;与大家一起加油&#xff0c;希望文章能够帮助各位&#xff01;&#xff01;&#xff01;&#xff01; &#x1f4c3;个人主页&#xff1a;rivencode的个人主页 &#x1f525;系列专栏&#xff1a;玩转FreeRTOS &#x1f4ac;保持…

Spring Security入门

1. Spring Security 简介 Spring Security 是一个高度可定制的身份验证和访问控制框架&#xff0c;它基于 Spring 框架&#xff0c;并可与 Spring 全家桶无缝集成。该框架可以精确控制用户对应用程序的访问&#xff0c;控制用户的角色和权限等。 Spring Security 最早是由 Be…

C Primer Plus第三章编程练习答案

学完C语言之后&#xff0c;我就去阅读《C Primer Plus》这本经典的C语言书籍&#xff0c;对每一章的编程练习题都做了相关的解答&#xff0c;仅仅代表着我个人的解答思路&#xff0c;如有错误&#xff0c;请各位大佬帮忙点出&#xff01; 1.通过试验&#xff08;即编写带有此类…

第三节 HLMSEditor场景编辑器的编译

本节注意介绍下HLMSEditor场景编辑器的源码编译使用 一 安装依赖的资源 使用编译器为VS2019 X64&#xff0c;操作系统为WIN10&#xff0c;Ogre2.1&#xff0c;HLMSEditor 注意&#xff1a;为什么不用Ogre2.3?因为HLMSEditor版本为0.5.5&#xff0c;很久没有更新了&#xff0…

【Linux进阶之路】yum与vim操作

文章目录 前言一.yum——Linux的应用商店介绍基本使用① yum源②安装数据传输软件1.将Linux的文件传输到Windows平台上2.将Windows的文件传到Linux系统上 ③删除数据传输软件⑥查看安装包版本⑤练习安装与卸载小火车安装与卸载牛会说话 二.vim —— 一款优雅的编辑器①基本模式…

安卓基础巩固(一):工程结构、基本概念、常用布局、基本组件、动画

文章目录 安卓项目结构AndroidMainfest.xmlres资源目录简介 基本概念LayoutR类 Application与ActivityContextIntent数据传递可传递的数据类型intent.putExtra&#xff08;&#xff09;和使用Bundle的区别数据传递大小的限制 通过Intent 过滤器接收隐式 Intent&#xff1a; 单位…

国内免费的Chatgpt网站分享 支持Ai对话绘图

Chatgpt正式进入大众视野&#xff0c;已半年有余&#xff0c;作为一款媲美于百度、谷歌搜索的工具&#xff0c;它已经成为我们工作、生活、学习中不可缺少的左膀右臂&#xff0c;相比于搜索引擎&#xff0c;它寻找答案&#xff0c;不再需要自己在众多模糊不定的结果中寻找自己需…

【生物信息】调控基因组学 (Regulatory Genomics) 和Deep CNN

文章目录 Regulatory GenomicsBiological motivation of Deep CNNMulti-task CNN 来自Manolis Kellis教授&#xff08;MIT计算生物学主任&#xff09;的课《人工智能与机器学习》 主要内容就是调控基因组学和深度卷积网络的结合 由于这部分在我学习的课程中内容很少&#xff0c…

使用虚拟机安装ikuai软路由系统,搭建pppoe拨号服务器

搭建pppoe拨号服务器 一、搭建ikuai软路由系统1、VMware版本2、ikuai官网上下载系统镜像3、使用虚拟机安装ikuai系统4、登录ikuai管理界面 二、安装win7虚拟机验证拨号功能三、其他电脑要使用这个pppoe虚拟机进行拨号怎么办呢&#xff1f; 一、搭建ikuai软路由系统 先说一下背景…

【C++/嵌入式笔试面试八股】一、11.C内存分配/堆栈

C内存分配/堆栈 01.C内存分配❤️ #include <stdio.h>const int g_A = 10; //常量区 int g_B = 20; //数据段 static<

冲冲冲冲冲

目录 java基础 面向对象 集合 线程 异常 IO 反射 MySQL SpringMVC 1.SpringMVC常用的注解有哪些&#xff1f; 2.说说你对Spring MVC的理解 Spring 1. spring是什么&#xff1f; 2.Autowired和Resource关键字的区别&#xff1f; 3.说说你对Spring的IOC是怎么理解的…

计算机硬件系统 — 冯诺依曼体系结构运行原理解析

目录 文章目录 目录计算机系统计算机硬件系统&#xff08;冯诺依曼体系结构&#xff09;PC 主机硬件CPU&#xff08;中央处理器&#xff09;CPU 的组成部分CPU 总线控制器单元运算器单元寄存器组超线程与多核架构三级高速缓存为什么需要缓存三级缓存结构 CPU 的指令集指令集的类…

IIS6.0 put文件上传GetShell

目录 WebDAV 环境配置 漏洞复现 漏洞修复 WebDAV WebDAV &#xff08;Web-based Distributed Authoring and Versioning&#xff09; 是一种HTTP1.1的扩展协议。它扩展了HTTP 1.1&#xff0c;在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新HTTP请求方法&#xff0c…

生成模型(自编码器、VAE、GAN)

文章目录 自编码器Autoencoder潜在表示&#xff08;latent representation&#xff09;VAE迁移学习 生成对抗网络GAN李沐论文精读摘要导言相关工作Adversarial net简单总结 精读挖坑&#xff08;上课内容 来自Manolis Kellis教授&#xff08;MIT计算生物学主任&#xff09;的课…

14种UML图(统一建模语言)

目录 1.简述2.UML组成3.UML事物4.UML关系5.UML图5.1 UML图的分类5.2 结构图&#xff08;静态图&#xff09;1&#xff09;类图2&#xff09;对象图3&#xff09;构件图4&#xff09;部署图5&#xff09;制品图6&#xff09;包图7&#xff09;复合结构图 5.3 行为图&#xff08;…

k8s进阶4——安全机制常用工具之kube-beach、kube-hunter、Trivy、kubesec

文章目录 一、K8s安全机制二、kube-beach工具2.1 安装2.2 工具使用2.2.1 改成INFO状态2.2.2 改成pass状态 三、kube-hunter工具四、Trivy镜像漏洞扫描工具五、kubesec检查YAML文件安全配置 一、K8s安全机制 基本了解&#xff1a; 我们在前面学习的安全控制RBAC就属于K8s安全机制…

【Midjourney】Midjourney Prompt 提示词 ② ( 怀旧像素风 | 物体 A 被物体 B 包围 | 折纸艺术风格 )

文章目录 一、8-bit 16bit 提示词 - 怀旧像素风二、A out of B 提示词 - 物体 A 被物体 B 包围三、layered paper 提示词 - 折纸艺术风格 一、8-bit 16bit 提示词 - 怀旧像素风 使用 8-bit 16-bit 提示词 , 可以绘制出 像素游戏风格的图像 , 如下图所示 ; 该提示词适合创作与游…