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 的相关文章

  • 蓝桥杯:斐波那契数列最大公约数

    题目表示的很明确 要用两个算法 斐波那契数列是很经典的dp问题 最大公约数是很经典的辗转相除法 从而我理所应当的就定义一个数组存放斐波那契数列 long long int F 2021 0 F 1 1 F 2 1 for int i 3 i
  • 过河卒 蓝桥杯 755

    题目描述 如图 A 点有一个过河卒 需要走到目标 B 点 卒行走规则 可以向下 或者向右 同时在棋盘上的 C 点有一个对方的马 该马所在的点和所有跳跃一步可达的点称为对方马的控制点 例如上图 C 点上的马可以控制 99 个点 图中的 P1
  • 第十四届蓝桥杯程序设计C++B组 (详细图解+保姆级注释)

    0 写在前面 本届CB组题目难度较往年整体提升了一些 考察知识点全面 题目质量很高 推荐备赛蓝桥杯或感兴趣的同学深入研究本套题 废话不多说 直接上干货 一 冶炼金属 签到题难度 考察数论分块知识or二分 有部分同学可能知道下取整的定义 但是
  • 关于xilinx BRAM IP的延迟以及流程

    关于RAM IP的延迟 1 选择了output registers 可以在RAM输出端口添加register 也可以在core的输出添加 在primitives添加 降低clock to out到primitive的延迟 在core添加re
  • IC数字后端

    在 innovus 里面 有时候我们需要控制 tie cell 的 fanout 和 net length 来避免 tie cell 可能出现 max transition 或者 max fanout 的违例 一般来说 只要 fanout
  • Java语言 ASCII to Hex 互转(IOT-示例)

    概述 最近想起之前做的IOT项目 使用JAVA写了一个
  • FPGA_时钟显示(时钟可调)

    1 实验说明 在数码管显示数据的基础上 让六位数码管显示数字时钟 并且通过按键可以对时间进行修改 实验目标 六位数码管分别显示时间的时分秒 且通过按键可实现加减调整时间及清零功能 key1 切换键 选择待调整的时间单位 时 分 秒 key2
  • 1093: 数1的个数

    存限制 128 MB 题目描述 给定一个十进制正整数n 1 n 10000 写下从1到n的所有整数 然后数一下其中出现的数字 1 的个数 例如当n 2时 写下1 2 这样只出现了1个 1 当n 12时 写下1 2 3 4 5 6 7 8 9
  • 蓝桥杯 成绩统计

    目录 问题描述 思路分析及代码实现 问题描述 小蓝给学生们组织了一场考试 卷面总分为 100 分 每个学生的得分都是一个 0 到 100 的整数 如果得分至少是 60 分 则称为及格 如果得分至少为 85 分 则称为优秀 请计算及格率和优秀
  • 蓝桥杯-2020年省赛-回文日期

    498 import datetime n input start datetime date int n 4 int n 4 6 int n 6 delta datetime timedelta days 1 flag 0 for i i
  • 【数字IC】从零开始的Verilog SPI设计

    从零开始的Verilog SPI协议设计 一 写在前面 1 1 协议标准 1 2 数字IC组件代码 1 3 设计要求 1 4 其他协议解读 1 4 1 UART协议 1 4 2 SPI协议 1 4 3 I2C协议 1 4 4 AXI协议 二
  • 寻宝游戏 HDU - 6289 (DP)

    小Q最近迷上了一款寻宝游戏 这款游戏中每局都会生成一个n mn m的网格地图 从上往下依次编号为第11行到第nn行 从左往右依次编号为第11列到第mm列 每个格子上都有不同数量的金币 第ii行第jj列的格子上的金币数量为ai jai j 小
  • PAJ7620U2手势识别——配置0x00寄存器(3)

    文章目录 前言 一 为啥要配置0x00寄存器 二 配置步骤 1 单个读操作步骤图 2 模块状态转移图绘制 3 模块波形图绘制 4 上板验证 5 参考代码 总结 前言 在前面的教程中 小编带领各位读者学习了如何通过I2C协议去唤醒PAJ762
  • 动态规划之多重背包模型

    前置知识 01背包问题 动态规划之01背包模型 如何何何的博客 CSDN博客 完全背包问题 动态规划之完全背包模型 如何何何的博客 CSDN博客 多重背包问题 给定一个有一定容量的背包 和 n 个物品 每个物品有 si 件 每个物品有其对应
  • 蓝桥杯第23天(Python)(疯狂刷题第6天)

    题型 1 思维题 杂题 数学公式 分析题意 找规律 2 BFS DFS 广搜 递归实现 深搜 deque实现 3 简单数论 模 素数 只需要判断到 int sqrt n 1 gcd lcm 快速幂 位运算移位操作 大数分解 分解为质数的乘积
  • 【快速选择算法】O(n)时间复杂度

    快速选择的期望时间复杂度为O n 最坏时间复杂度为O n 2 当每次划分只划分为n 1个和1个时 由于划分时间复杂度为O n 最坏时间复杂度为O n 2 void quickselect vector
  • 多少个X 蓝桥杯模拟

    问题描述 给定一个字母矩阵 一个 X 图形由中心点和由中心点向四个45度斜线方向引出的直线段组成 四条 线段的长度相同 而且四条线段上的字母和中心点的字母相同 一个 X图形可以使用三个整数 r c L 来描述 其中 r c 表示中心点位于第
  • 基于FPGA的简易BPSK和QPSK

    1 框图 2 顶层 3 m generator M序列的生成 输出速率为500Kbps 4 S2P是串并转换模块 将1bit的m序列转换到50M时钟下的2bit M序列数据 就有4个象限 5 my pll是生成256M的时钟作为载波 因为s
  • Vivado ILA的debug信息保存与读取

    保存 write hw ila data D Project FPGA ILA Debug Data 202401041115 ila upload hw ila data hw ila 1 读取 display hw ila data r
  • TRICONEX MA2211-100 芯片上相互连接

    TRICONEX MA2211 100 芯片上相互连接 TRICONEX MA2211 100 所有相同的组件 io的电源 处理器 和内存将需要 但是 你可以看到所有这些带存储器和处理器的OO板 针不能嵌入到一个小的单片机上 现在是 普拉克

随机推荐

  • 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