Good Bye 2021: 2022 is NEAR

2023-11-01

A. Integer Diversity

题目:

思路分析:

就是给你一个序列 通过改变数字的正负 可以得到最大不同数字的个数是多少 

代码分析:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long  ull;
inline int read() {
    int x=0,f=1; char c=getchar();
    while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+c-'0';c=getchar();}
    return x*f;
}
ll _gcd(ll m, ll n){return n == 0 ? m : _gcd(n, m%n);}
ll _lcm(ll m, ll n){return m*n / _gcd(m, n);}
ll pows(ll base, ll power,ll mod){ll result=1;while(power>0){if(power&1){result=result*base%mod;}power>>=1;base=(base*base)%mod;}return result;}
ll poww(ll base, ll power){ll result=1;while(power>0){if(power&1){result=result*base;}power>>=1;base=(base*base);}return result;}
void init(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);}
const int MAX=1e6+10;
int t;
bool cmp(int a,int b){return a>b;}
ll max(ll a,ll b){if(a>b)return a;else return b;}


void solve(){
    int n;cin>>n;
    int a[110];
    for(int i=0;i<=100;i++)a[i]=0;
    for(int i=0;i<n;i++) {int x;cin>>x;a[abs(x)]++;}int ans=0;
    if(a[0]!=0) ans++;
    for(int i=1;i<=100;i++) {
        if(a[i]>=2) ans+=2;
        else if(a[i]==1) ans++;
    }
    cout<<ans<<endl;
}
int main(){
    init();
    cin>>t;
    while(t--) solve();
//    solve();
    return 0;
}


B. Mirror in the String

题目:

思路分析:

就是从字符串的第一位找一小段字符串 然后镜像对称使其字典序最小

我们可以开头遍历如果遇到字符序不减则停止 然后镜像对称即可

代码实现:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long  ull;
inline int read() {
    int x=0,f=1; char c=getchar();
    while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+c-'0';c=getchar();}
    return x*f;
}
ll _gcd(ll m, ll n){return n == 0 ? m : _gcd(n, m%n);}
ll _lcm(ll m, ll n){return m*n / _gcd(m, n);}
ll pows(ll base, ll power,ll mod){ll result=1;while(power>0){if(power&1){result=result*base%mod;}power>>=1;base=(base*base)%mod;}return result;}
ll poww(ll base, ll power){ll result=1;while(power>0){if(power&1){result=result*base;}power>>=1;base=(base*base);}return result;}
void init(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);}
const int MAX=1e6+10;
int t;
bool cmp(int a,int b){return a>b;}
ll max(ll a,ll b){if(a>b)return a;else return b;}


void solve(){
    int n;cin>>n;
    string s;s="";cin>>s;s="z"+s;
    int ans=1;
    if(s[1]==s[2]) ans=1;
    else {for(int i=1;i<=n;i++){
        if((s[i]-'a')>(s[i-1]-'a')){
            ans=i-1;break;
        }
        else ans=i;
        
    }}
//    cout<<ans<<endl;
    for(int i=1;i<=ans;i++){
        cout<<s[i];
    }
    for(int i=ans;i>=1;i--){
        cout<<s[i];
    }
    cout<<endl;
}
int main(){
    init();
    cin>>t;
    while(t--) solve();
//    solve();
    return 0;
}


C. Representative Edges

题目:

思路分析:

题意就是给你一个数字序列 然后可以修改单个数字的值 来构造一个等差序列

找出最少的操作数

由于数据很小 我们可以枚举d  然后遍历得出最小的操作数就行 

代码实现:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long  ull;
inline int read() {
    int x=0,f=1; char c=getchar();
    while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+c-'0';c=getchar();}
    return x*f;
}
ll _gcd(ll m, ll n){return n == 0 ? m : _gcd(n, m%n);}
ll _lcm(ll m, ll n){return m*n / _gcd(m, n);}
ll pows(ll base, ll power,ll mod){ll result=1;while(power>0){if(power&1){result=result*base%mod;}power>>=1;base=(base*base)%mod;}return result;}
ll poww(ll base, ll power){ll result=1;while(power>0){if(power&1){result=result*base;}power>>=1;base=(base*base);}return result;}
void init(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);}
const int MAX=1e6+10;
int t;
bool cmp(int a,int b){return a>b;}
ll max(ll a,ll b){if(a>b)return a;else return b;}


void solve(){
    int n;cin>>n;
    int a[110];
    for(int i=0;i<n;i++){int x;cin>>x;a[i]=x;}
    int ans=0x3f3f3f3f;
    if(n<=2) {cout<<0<<endl;return;}
    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            int num=n;
            double d=1.0*(a[j]-a[i])/(j-i);
            for(int z=0;z<n;z++){
                if(abs(a[z]-(a[i]+(z-i)*d))<=1e-10)
                    num--;
            }
            ans=min(ans,num);
        }
    }
    cout<<ans<<endl;
}
int main(){
    init();
    cin>>t;
    while(t--) solve();
//    solve();
    return 0;
}


D. Keep the Average High

题目:

思路分析:

题意就是从给出的数学序列里找出x个数字 然后这个x个数字的序列中 任意区间和都满足一个关系 区间元素不少于二个

我们可以1-n进行枚举 当前第i个数能否选中和前面的数有关系

dp[i][0/1][0/1] 表示第i位前一位和第i位的选择情况

状态转移方程看代码吧!

代码实现:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long  ull;
inline int read() {
    int x=0,f=1; char c=getchar();
    while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+c-'0';c=getchar();}
    return x*f;
}
ll _gcd(ll m, ll n){return n == 0 ? m : _gcd(n, m%n);}
ll _lcm(ll m, ll n){return m*n / _gcd(m, n);}
ll pows(ll base, ll power,ll mod){ll result=1;while(power>0){if(power&1){result=result*base%mod;}power>>=1;base=(base*base)%mod;}return result;}
ll poww(ll base, ll power){ll result=1;while(power>0){if(power&1){result=result*base;}power>>=1;base=(base*base);}return result;}
void init(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);}
const int MAX=2e5+10;
int t;
bool cmp(int a,int b){return a>b;}
ll max(ll a,ll b){if(a>b)return a;else return b;}
ll min(ll a,ll b){if(a>b)return b;else return a;}


void solve(){
    int a[MAX];int n;cin>>n;int dp[50005][2][2];
    memset(dp,0,sizeof dp);
    for(int i=1;i<=n;i++){cin>>a[i];}int k;cin>>k;
    for(int i=1;i<=n;i++) a[i]-=k;
    dp[1][0][1]=1;
    if(n==1) {cout<<1<<endl;return;}
    for(int i=2;i<=n;i++){
        dp[i][0][0]=max(dp[i-1][1][0],dp[i-1][0][0]);
        dp[i][0][1]=max(dp[i-1][0][0],dp[i-1][1][0])+1;
        dp[i][1][0]=max(dp[i-1][1][1],dp[i-1][0][1]);
        //1 1
        if(a[i]+a[i-1]>=0){
            dp[i][1][1]=dp[i-1][0][1]+1;
            if(a[i-2]+a[i-1]+a[i]>=0){
                dp[i][1][1]=max(dp[i][1][1],dp[i-1][1][1]+1);
            }
        }
    }
    int ans=0;
    for(int i=1;i<=n;i++){
        for(int j=0;j<2;j++){
            for(int z=0;z<2;z++){
                ans=max(ans,dp[i][j][z]);
            }
        }
    }
    cout<<ans<<endl;
}
int main(){
    init();
    cin>>t;
    while(t--) solve();
//    solve();
    return 0;
}

 

E. Lexicographically Small Enough

题目:

思路分析:

给出二个字符串 s1 s2 我们可以交换相邻二个字符 要让s1调整到字典序严格小于s2的最少操作数

首先用最少操作次数使得s[i]<t[i],并更新答案,但并不真的执行该操作。然后用最少操作次数使得s[i]==t[i],这次操作需要执行。如果没有合法字符使得s[i]==t[i],则退出循环。每轮操作都需要将一个连续子串右移一位。等价地,我们也可以把该子串后的后缀子串向前移动一位。记pos[i]为s[i]移动后的位置,上述操作等价于对后缀的pos[]同时减1,可以用树状数组维护,转化为单点修改,前缀求和的问题

代码实现:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long  ull;
inline int read() {
    int x=0,f=1; char c=getchar();
    while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+c-'0';c=getchar();}
    return x*f;
}
ll _gcd(ll m, ll n){return n == 0 ? m : _gcd(n, m%n);}
ll _lcm(ll m, ll n){return m*n / _gcd(m, n);}
ll pows(ll base, ll power,ll mod){ll result=1;while(power>0){if(power&1){result=result*base%mod;}power>>=1;base=(base*base)%mod;}return result;}
ll poww(ll base, ll power){ll result=1;while(power>0){if(power&1){result=result*base;}power>>=1;base=(base*base);}return result;}
void init(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);}
const int MAX=2e5+10;
int t;
bool cmp(int a,int b){return a>b;}
ll max(ll a,ll b){if(a>b)return a;else return b;}
ll min(ll a,ll b){if(a>b)return b;else return a;}

int n,sum[MAX];
queue<int>qu[30];
string s1,s2;
void add(int x,int d){for(int i=x;i<=n;i+=(i&(-i))){sum[i]+=d;}}
int get_sum(int x){
    int ans=0;
    for(int i=x;i;i-=(i&(-i))){ans+=sum[i];}
    return ans;
}
void updata(ll &x,ll y){
    if(x==-1) x=y;
    else x=min(x,y);
}
void solve(){
    cin>>n;cin>>s1;cin>>s2;s1=" "+s1;s2=" "+s2;
    for(int i=0;i<=25;i++) {while(!qu[i].empty()) qu[i].pop();}
    for(int i=1;i<=n;i++){qu[s1[i]-'a'].push(i);sum[i]=0;}
    for(int i=1;i<=n;i++){add(i,1);}
    ll ans=-1;ll ans2=0;
    for(int i=1;i<=n;i++){
        int num=n+1;int mx=s2[i]-'a';
        for(int j=0;j<mx;j++){
            if(!qu[j].empty()){
                int k=qu[j].front();
                num=min(num,get_sum(k-1));
            }
        }
        if(num<n+1) updata(ans,num+ans2);
        if(!qu[mx].empty()){
            int k=qu[mx].front();qu[mx].pop();
            ans2+=get_sum(k-1);
            add(k,-1);
        }
        else break;
    }
    printf("%lld\n",ans);

}
int main(){
    init();
    cin>>t;
    while(t--) solve();
//    solve();
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Good Bye 2021: 2022 is NEAR 的相关文章

  • 2018年第九届蓝桥杯C/C++A组省赛 题面&部分题解

    首先 原题 链接 https pan baidu com s 1UzRN6Mf2Dwp0263F MMESg 密码 2ryh 第一题 标题 分数 1 1 1 2 1 4 1 8 1 16 每项是前一项的一半 如果一共有20项 求这个和是多少
  • Verilog实现两路组相联cache

    cache代码 timescale 1ns 1ps cache共32块 分为16组 每组2块 即两路组相联 1块 4字 1字 4字节 主存共1024块 4096个字 主存地址共12位 1 0 为块内偏移 5 2 为组地址 11 6 为Tag
  • 八段数码管动态显示(输入数据为BCD编码)

    八段数码管动态显示 输入数据为BCD编码 一 数码管概述 图1 八段共阴数码管内部等效原理图 图2 八段共阳数码管内部等效原理图 上面两图分别是对应八段共阴 共阳的数码管内部等效图 共阴是将八个LED数码管的阴极连接在一起接低 阳极segm
  • IC数字后端

    在 innovus 里面 有时候我们需要控制 tie cell 的 fanout 和 net length 来避免 tie cell 可能出现 max transition 或者 max fanout 的违例 一般来说 只要 fanout
  • C++:压缩算法1.0

    题目描述 某压缩算法的基本思想是用一个数值和一个字符代替具有相同值的连续字符 例如 输入字符串 RRRRRGGBBBBBBC 压缩后为 5R2G6B1C 请编写程序实现上述功能 输入 输入共一行 一串待压缩的字符 输出 输出共一行 压缩后的
  • 【DDR3 控制器设计】(3)DDR3 的写操作设计

    写在前面 本系列为 DDR3 控制器设计总结 此系列包含 DDR3 控制器相关设计 认识 MIG 初始化 读写操作 FIFO 接口等 通过此系列的学习可以加深对 DDR3 读写时序的理解以及 FIFO 接口设计等 附上汇总博客直达链接 DD
  • 每日一练-仓库日志

    仓库日志 题目描述 解题思路 Python源码 Summary Date 2023年1月9日 Author 小 y 同 学 Classify 蓝桥杯每日一练 Language Python 题目描述 题意 M海运公司最近要对旗下仓库的货物进
  • [从零开始学习FPGA编程-28]:进阶篇 - 基本组合电路-奇偶校验生成器(Verilog语言版本)

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 目录 第1章 奇偶校验生成器 1 1 什么是奇校验 1 2 Verilog语言描述
  • 寻宝游戏 HDU - 6289 (DP)

    小Q最近迷上了一款寻宝游戏 这款游戏中每局都会生成一个n mn m的网格地图 从上往下依次编号为第11行到第nn行 从左往右依次编号为第11列到第mm列 每个格子上都有不同数量的金币 第ii行第jj列的格子上的金币数量为ai jai j 小
  • 1141 二维数组的输入和输出

    题目描述 输入m行n列的二维数组的值 再按行列形式输出 输入要求 第一行输入m n代表行数和列数 接着输入具体的m n个元素 输出要求 按行列形式换行输出 每一个数据后面都有空格 一行输出完毕后换行 输入样例 2 5 1 4 6 23 1
  • 2021蓝桥杯模拟赛-跳跃

    题目 题目链接 题解 动态规划 算是比较基础的状态方程和状态定义 但是难点在于处理负权重的情况 代码 include
  • 七段码(建图+搜索+并查集)

    思路 step1 邻接表建图 相邻为1 不相邻为0 题目就等价为在图中求连通子图的个数 step2 深度搜索每条边 并存储下来 step3 对选择的边用并查集保存下来 然后看father i i的个数 等于1 表示连通 否则表示不连通 易错
  • 蓝桥杯python,acwimg,备赛笔记

    目录 一 python基本的语法 二 掌握python标准库 三 acwimg算法课 四 注意事项 四 刷题 五 用python刷算法题中的小技巧 六 完整代码 一 python基本的语法 学到面向对象就差不多了 不需要太深入学习面向对象后
  • 第十二届蓝桥杯 2021年省赛真题 (Java 大学C组) 第二场

    蓝桥杯 2021年省赛真题 Java 大学C组 第二场 A 浮点数 B 求余 C 双阶乘 D 格点 E 整数分解 F 3 的倍数 G 特殊年份 H 小平方 I 完全平方数 J 负载均衡 A 浮点数 题目 问题描述 IEEE 754 规定一个
  • 多少个X 蓝桥杯模拟

    问题描述 给定一个字母矩阵 一个 X 图形由中心点和由中心点向四个45度斜线方向引出的直线段组成 四条 线段的长度相同 而且四条线段上的字母和中心点的字母相同 一个 X图形可以使用三个整数 r c L 来描述 其中 r c 表示中心点位于第
  • 【FPGA多周期时序约束详解】- 解读FPGA多周期时序约束的全过程

    FPGA多周期时序约束详解 解读FPGA多周期时序约束的全过程 FPGA作为数字电路设计的常见工具 其设计中必然会遇到时序约束的问题 而多周期时序约束更是FPGA设计中不可避免的难点之一 本文将详细介绍FPGA多周期时序约束的全过程 并结合
  • [从零开始学习FPGA编程-24]:进阶篇 - 基本组合电路-编码器与译码器(Verilog语言)

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 125247358 目录 前言 Veri
  • shared_ptr使用场景、陷阱、性能分析,使用建议

    1 std shared ptr使用场景 include
  • Matlab图像处理系列——图像复原之噪声模型仿真

    微信公众号上线 搜索公众号 小灰灰的FPGA 关注可获取相关源码 定期更新有关FPGA的项目以及开源项目源码 包括但不限于各类检测芯片驱动 低速接口驱动 高速接口驱动 数据信号处理 图像处理以及AXI总线等 本节目录 一 图像复原的模型 二
  • 如何查看崩溃日志

    目录 描述 思路 查看ipa包崩溃日志 简单查看手机崩溃信息几种方式 方式1 手机设置查看崩溃日志 方式2 Xocde工具 方式3 第三方软件克魔助手 环境配置 实时日志 奔溃日志分析 方式四 控制台资源库 线上崩溃日志 线上监听crash

随机推荐

  • Python入门实战题目

    1 有1 2 3 4个数字 能组成多少个互不相同且无重复数字的三位数 都是多少 2 两个乒乓球队进行比赛 各出三人 甲队为a b c三人 乙队为x y z三人 已抽签决定比赛名单 有人向队员打听比赛的名单 a说他不和x比 c说他不和x z比
  • Python3 [爬虫实战] Redis+Flask 动态维护cookies池(上)

    Redis 使用 1 首先去官网下载Reidszip文件 http www redis cn topics config html 2 Reids的安装 直接解压缩zip文件 然后放在一个文件夹中 在文件夹路径下用dos窗口启动服务器端 r
  • 入门算法题002

    题目 给你一个正整数n 假设有两个质数加起来等于n 问一共有多少组这样的质数 思路 1 我们得要先有一个函数去判断是否是质数 2 循环拆解为两个数 暴力拆解 试下10 15分钟内做出来 public class Leecode002 pub
  • selenium爬虫运行慢如何解决?

    Selenium作为一个强大的自动化工具 可用于编写爬虫程序 尽管Selenium在处理动态网页上非常强大 但对于静态网页爬简单数据提取 使用轻量级库或工具可能更加上所述 Selenium作为一个灵活可定动化工具 在需要模拟用户行为 处理动
  • VS2005中分页和多列排序

    最近在使用ASP net 2 0的GridView 控件时 发现排序与分页功能Microsoft实现的都很简单 比如排序 在点击列名的时候来触发整页的PostBack 然后排序 但是在列头上没有一个显示升序降序的图标 这会让最终用户使用时很
  • OJ在线编程常见输入输出练习(11题)

    1 输入包括两个正整数a b 1 lt a b lt 10 9 输入数据包括多组 输出描述 输出a b的结果 输入例子1 1 5 10 20 输出例子1 6 30 import java io BufferedReader import j
  • java web 项目配置日志框架log4j

    第一步 log4j 框架所关联的第三方jar 文件 commons logging xxx jar log4j xxx jar slf4j api xxx jar slf4j log4j12 xxx jar 以下是我搭建web框架集成log
  • 【C++】“没有可用成员”问题的原因之一

    今天碰到一个定义类成员函数的时候一直提示没有可用成员的问题 琢磨半天终于解决 记录一下 以免再犯 问题描述 在头文件中声明了名称空间SALES 并在名称空间中声明了类Sales 在类中声明了一系列类成员后 切换到另一个cpp文件中定义相关的
  • 基于CIFAR100的VGG网络结构详解

    基于CIFAR100的VGG网络详解 码字不易 点赞收藏 1 数据集概况 1 1 CIFAR100 cifar100包含20个大类 共100类 train集50000张图片 test集10000张图片 CIFAR100下载地址 http w
  • QTday3(QT实现文件对话框保存操作、实现键盘触发事件【WASD控制小球的移动】)

    1 实现文件对话框保存操作 include widget h include ui widget h Widget Widget QWidget parent QWidget parent ui new Ui Widget ui gt se
  • Unity3d 在HDRP项目中更换天空球

    两种情况 首先是直接通过unityhub创建的HDRP工程中 选中Sky and Fog Volume 进行如下图中标注的操作即可 其次是旧工程中 看到此教程说明你已经将旧工程升级到新的渲染管线工程 就略过升级旧工程的步骤直接开始配置天空盒
  • iptables 查看相关命令

    参考 https www zsythink net archives 1493 一些命令的总结 1 查看对应表的所有规则 t 指定要操作的表 省略 t 表名时 默认表示操作filter 表 L 表示列出规则 即查看规则 iptables t
  • 分治法求最近点对问题

    目录 蛮力法 分治法 探究分治规模小于一定程度时采用暴力解法 蛮力法 算法思想 蛮力法 顾名思义 即穷举所有点与点之间的距离 两层循环暴力找出最近点对 算法执行可视化如图1所示 word文档GIF静态显示 附件已含动图 图1 伪代码 mat
  • Vscode 代码插件 Code Runner,一键运行代码

    Vscode 代码插件 Code Runner 一键运行代码 为了方便可以安装代码运行插件进行简单化运行 不用终端运行 Code Runner插件 一键运行代码 支持40多种语言 安装这种插件后面 可以鼠标放到代码文件上面 点击鼠标右键有个
  • Linux三种修改打开文件数量限制的方法

    系统环境 Centos7 为什么要限制打开文件的数量 因为操作系统需要内存来管理每个文件 所以可以打开的文件数可能会受到限制 由于程序也可以关闭文件处理程序 它可以创建任意大小的文件 直到所有可用磁盘空间都已满为止 在这种情况下 安全性的一
  • 华为OD机试 - 字符串反转(C++ & Java & JS & Python)

    目录 描述 输入描述 输出描述 示例1 Java C python 描述 接受一个只包含小写字母的字符串 然后输出该字符串反转后的字符串 字符串长度不超过1000
  • QT接入聊天机器人(OpenAI)

    QT接入聊天机器人 OpenAI 下面的是引用的中国日报对chatgpt的描述 中国日报网2月17日电 综合外媒报道 近段时间来 由美国人工智能公司OpenAI推出的大语言模型ChatGPT在全球科技界和产业界刮起了一场 旋风 数据显示 自
  • 布萌区块链底层技术介绍,看完就能搭私链

    布萌是做什么的 布萌是一个使用区块链技术搭建的数字资产网络 任何拥有资产的机构 个人都可以在这个网络上发行自己的数字资产 例如数字黄金 积分 游戏装备等 资产在网络中可以自由兑换和流通 链上资产的交易流通将不依赖于任何中心化系统 因为服务器
  • VUE----watch和compute

    1 computed 计算属性 computed是一个对象 而里面需要计算的属性是一个函数的返回值 计算属性默认只有getter 可以在需要的时候自己设定setter 在data中没有直接声明出要计算的变量 也可以直接在computed中写
  • Good Bye 2021: 2022 is NEAR

    A Integer Diversity 题目 思路分析 就是给你一个序列 通过改变数字的正负 可以得到最大不同数字的个数是多少 代码分析 include