Codeforces Round 937 (Div. 4)

目录

A. Stair, Peak, or Neither?

B. Upscaling

C. Clock Conversion

D. Product of Binary Decimals

E. Nearly Shortest Repeating Substring

F. 0, 1, 2, Tree!

G. Shuffling Songs


A. Stair, Peak, or Neither?

直接按照题意模拟即可

void solve(){int a,b,c; cin>>a>>b>>c;if(a<b and b<c ) cout<<"STAIR"<<endl;else if(a<b and b>c) cout<<"PEAK"<<endl;else cout<<"NONE"<<endl;return ;
}

B. Upscaling

简单构造,找到题目的性质即可,然后交替输出构造的串

void solve(){cin>>n;string s1,s2;for(int i=1;i<=n;i++){if(i&1){s1.push_back('#');s1.push_back('#');s2.push_back('.');s2.push_back('.');}else{s1.push_back('.');s1.push_back('.');s2.push_back('#');s2.push_back('#');}}for(int i=1;i<=n;i++){if(i&1) cout<<s1<<endl<<s1<<endl;else cout<<s2<<endl<<s2<<endl;}return ;
}

C. Clock Conversion

时间模拟按照题意即可

void solve(){int a,b; char op;cin>>a>>op>>b;int ok = a>=12;if(a==0) a=12;if(a>12)a-=12; if(a<10) cout<<0;cout<<a;cout<<":";if(b<10) cout<<0;cout<<b<<' ';cout<<(ok ? "PM" :"AM")<<endl;return ;
}

D. Product of Binary Decimals

我们可以发现我们要求的是这个数得要用0101构成的穿的乘积构成,所以我们可以看直接用约数的乘法同时要求这个数是01这样的数即可,注意从大到小的枚举同二进制数取数一样因为有些01数可以由小的01数同其他数的乘积构成

vector<int> s;
void intn(){for(int i=N;i>=10;i--){int x=i;bool ok = true;while(x){int t=x%10;if(t>1) ok = false;x/=10;}if(ok) s.push_back(i);}
}
void solve(){int x; cin>>x; for(auto&v:s) while(x%v==0) x/=v;cout<<(x==1 ? "YES" : "NO")<<endl;return ;
}

E. Nearly Shortest Repeating Substring

典型的做法就是使用枚举约数由于这些数只会被约数整除所以直接枚举约数然后检查即可

void solve(){cin>>n;string s; cin>>s;int ans = n;auto check = [&](int i,string now){int t =0;for(int j=0;j<n;j+=i){for(int k=0;k<i;k++){if(s[j+k]!=now[k]) t++;if(t==2) return false;}}return true;};for(int i=1;i<=n/i;i++){if(n%i==0){string now =s.substr(0,i);if(check(i,now)){cout<<i<<endl;return ;}now = s.substr(n-i);if(check(i,now)){cout<<i<<endl;return ;}string x = s.substr(0,n/i);if(check(n/i,x)) ans = min(ans,n/i);x = s.substr(n-n/i);if(check(n/i,x)) ans = min(ans,n/i);}}cout << ans << endl;return ;
}

F. 0, 1, 2, Tree!

首先我们来看看无解的情况可以发现只有2的度数会给后面带来需要接的点,带来入度,所以最后就是a+1的入度 a+1==c才是有解可以发现如果我们要树的高度低那就是按照满二叉树的方式构造即可,所以我们直接按照先构造2的方式即可,接着处理1的数,1的数量,最后处理没有入度的点

void solve(){int a, b, c;cin >> a >> b >> c;queue<tuple<int, int>> q;q.push({1, 1});int ans = 0;while (a){auto [now, cur] = q.front();q.pop();ans = max(ans, cur);a--;q.push({2 * now, cur + 1});q.push({2 * now + 1, cur + 1});}while (b){auto [now, cur] = q.front();q.pop();ans = max(ans, cur);b--;q.push({2 * now, cur + 1});}if (c != q.size()){cout << -1 << endl;return;}cout << ans << endl;
}

G. Shuffling Songs

题目一直在暗示使用2^n的解法,我们考虑dfs或者是状态压缩dp,顺序是可以变化的一个点后面接哪一个点是未知的,也就是我们的哈密顿图,按照题目意思先把可抵达的边建好,然后跑一个状压dp即可

string s[M][2];
void solve(){cin>>n;for(int i=0;i<n;i++){cin>>s[i][0]>>s[i][1];}vector<vector<bool>> g(n,vector<bool>(n,false));for(int i=0;i<n;i++)for(int j=i+1;j<n;j++)if(s[i][0]==s[j][0] or s[i][1]==s[j][1])g[i][j]=g[j][i]=true;vector<vector<bool>> dp(n,vector<bool>(1<<n,false));for(int i=0;i<n;i++) dp[i][1<<i]=true;int ans = 1;for(int state=0;state<(1<<n);state++){for(int i=0;i<n;i++){if(dp[i][state]){for(int j=0;j<n;j++){if(!(state>>j&1) and g[i][j]){dp[j][state|(1<<j)]=true;ans = max(ans,(int)__builtin_popcount((state|(1<<j))));		}}}}} cout<<(n-ans)<<endl;return ;
}

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

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

相关文章

YOLOv9改进策略 : C2f改进 | 引入YOLOv8 C2f结构

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a;应订阅者需求&#xff0c;如何将YOLOv8 C2f结构引入到YOLOv9 &#x1f4a1;&#x1f4a1;&#x1f4a1;C2f层是一种特殊的卷积层&#xff0c;用于将不同尺度的特征图融合在一起&#xff0c;以提高目标检测的准…

真心建议今年拿下软考证书,再不冲就晚了!

随着国家计算机与软件技术的发展&#xff0c;每年报名参加计算机软件资格考试&#xff08;简称&#xff1a;软考&#xff09;的人越来越多。 据工信部新闻发布会消息&#xff1a;2023年有超500万人都在考软考&#xff0c;报名人数较2020年直翻10倍。 据悉&#xff0c;国内持软…

leetcode216组合总和III

本题思考&#xff1a; 对于输入样例k3,n9 输出里面为什么只有 [[1,2,6],[1,3,5],[2,3,4]]而没有下图所示的重复情况出现呢&#xff1f; 当时代码写错了&#xff0c;思考许久不得解&#xff0c;后面经过仔细对比代码之后发现是我的代码出现了逻辑错误&#xff0c;而正是这一关键…

了解一下npm i的流程与原理

流程 执行npm install&#xff0c;先判断有无lock文件。 1、没有lock文件。会先根据依赖构建出扁平的依赖关系决定下哪些包。新版本的依赖关系是扁平化的&#xff0c;老版本是树结构&#xff0c;可能会出现依赖重复安装的问题&#xff0c;老版本示意图如下&#xff1a; 作为前…

Jupyter notebook修改默认存储位置

1. 首先&#xff0c;打开Anaconda Prompt 输入命令&#xff1a; jupyter notebook --generate-config2. 根据刚才命令行输出的结果找到config文件&#xff0c;如图所示 3. 打开文件 ctrl F &#xff0c;然后输入notebooks and kernels找到对应的内容&#xff0c;在The dire…

Git实现提交代码自动更新package.json版本号

此文章主要讲诉如何通过git提交代码来自动更新我们的版本号&#xff0c;也可以指定固定分支才能更新 只要涉及到package version的项目都可以&#xff0c;例如&#xff1a;Vue、React、Node等等 前提是当前项目已经关联了Git仓库 一、编写我们的Node更新版本逻辑&#xff0c;名…

Qt与编码

ASCII码:一个字节&#xff0c;256个字符。 Unicode:字母&#xff0c;汉字都占用两个字节。 utf-8:字母一个字节&#xff0c;汉字3个字节。 gbk:字母一个字节&#xff0c;汉字2个字节。 gb2312:可以表示汉字&#xff0c;gb2312<gbk。 编码查看&#xff1a; https://www.…

实时通讯技术实现

实时通讯技术实现 前言 在CS架构中&#xff0c;经常会有实时通信的需求。客户端和服务端建立连接&#xff0c;服务端实时推送数据给客户端。本文介绍几种常见的实现方式&#xff0c;希望能给读者们一点点参考。 实时通讯的主要实现技术 长轮询(Long Polling) WebSocket 服务器发…

C++初阶篇----内存管理

目录 引言1. 内存分布2.C动态内存管理方式&#xff1a;malloc/calloc/realloc/free3. C动态内存管理:new和delete3.1内置类型3.2 自定义类型 4.operator new与operator delete函数4.1 operator new 与operator delete函数 5. new和delete的实现底层5.1 内置类型5.2 自定义类型 …

Redis 特性,为什么要用Redis,Redis到底是多线程还是单线程

一、Redis介绍 Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务&#xff0c;是一个开源的&#xff0c;使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 二、特性(为什么要用Redis&#x…

如何注册谷歌邮箱gmail

不知道大家在工作生活中有没有需要用到谷歌邮箱的地方&#xff0c;但是最近我就用到了它。因为注册ChatGPT的事&#xff0c;用了outlook&#xff0c;hotmail邮箱注册的gpt账号都被封了&#xff0c;然后通过各方面的了解&#xff0c;发现谷歌的邮箱是没有问题的&#xff0c;不会…

基于springboot的人事管理系统

人事管理系统 摘 要 人事管理系统理工作是一种繁琐的&#xff0c;务求准确迅速的信息检索工作。随着计算机信息技术的飞速发展&#xff0c;人类进入信息时代&#xff0c;社会的竞争越来越激烈&#xff0c;人事就越显示出其不可或缺性&#xff0c;成为学校一个非常重要的模块。…