首页 > 其他分享 >F. Shift and Reverse

F. Shift and Reverse

时间:2023-12-13 23:56:43浏览次数:25  
标签:cnt Reverse int Shift sum printf 递减 数列

通过操作获得非递减数列,采用KMP算法求解。

通过把一个数列打印两遍,遍历是否有长度为N的非递减数列或者非递增数列。

通过计算求出最小操作数量。

主要代码:

#include<bits/stdc++.h>
using namespace std;
const int N=200010;
int a[N];
int work(int n){
    int index=0,cnt=1,index2=0,cnt2=1;
    bool bol=false;
    int sum=N,sum2=N;
    for (int i=1;i<2*n;i++){
        if (a[i]>=a[i-1]) cnt++;   //找寻非递减数列 
        else {
            index=i;
            cnt=1;
        }
        if (a[i]<=a[i-1]) cnt2++;  //找寻非递增数列 
        else {
            index2=i;
            cnt2=1;
        }
        if (cnt==n || cnt2==n) bol=true;
        if (cnt==n)
            if (index)sum=min(n-index,index+2);
            else sum=0;
        if (cnt2==n)
            if (index2)sum2=min(n-index2+1,index2+1);
            else sum2=1;
    }
    if (!bol) return -1;
    return min(sum,sum2);
}
int main(){
    int t;
    cin>>t;
    while (t--){
        int n;
        cin>>n;
        for (int i=0;i<n;i++){
            cin>>a[i];
            a[i+n]=a[i];  //打印两遍 
        }
        if (n==1){printf("%d\n",0);continue;}
        int sum=work(n);
        if (sum==-1) printf("%d\n",-1);
        else printf("%d\n",sum);
    }
    return 0;
}

 

标签:cnt,Reverse,int,Shift,sum,printf,递减,数列
From: https://www.cnblogs.com/purple123/p/17900216.html

相关文章

  • Shift_JIS、CP932、MS932、Windows-31J
    Shift_JIS的文字集合基本是按照JISX0208规定的。但实际上各个厂商各自进行扩展,包含了大量重复的、规格以外的文字。因此Windows在本来的Shift_JIS的文字集合之外,又增加了NEC扩展、IBM扩展所包含的文字。这种规格和实际情况的分歧长期存在,随着windows-31J的规格化,混乱情况......
  • F. Shift and Reverse
    戳这里,看原题多重思想的巧妙结合不多说了,看代码就懂了#include<bits/stdc++.h>usingnamespacestd;intup[200006]={0},down[200006]={0};inta[200006]={0};intmain(){intt;cin>>t;while(t--){intn;cin>>n;for(inti......
  • 无涯教程-Erlang - reverse函数
    反转元素列表。reverse-语法reverse(lst)Lst  - 需要反转的元素列表。reverse-返回值返回元素的反向列表。-module(helloLearnfk).-import(lists,[reverse/1]).-export([start/0]).start()->Lst1=[1,2,3],io:fwrite("~p~n",[reverse(Lst1)]).......
  • Misc_XCTF_WriteUp | reverseMe
    题目分析把图片左右反转:提取文字,得到Flag。Flagflag{4f7548f93c7bef1dc6a0542cf04e796e}参考图片转文字在线-图片文字提取-网页OCR文字识别-白描网页版......
  • newstarctf2023 reverse 题解汇总
    newstarctf2023reverse题解汇总week1easy_REdie查无壳64直接IDA启动跟到main函数找到两部分flag拼起来就行了。flag{we1c0me_to_rev3rse!!}ELFdie查64ELFIDA启动稍微读一下写个py逆一下它的加密就行了flag{D0_4ou_7now_wha7_ELF_1s?}importbase64a="VlxRV......
  • Viola-Jones 人眼检测算法+meanshift跟踪算法
    clc;clearall;closeall;clfreset;%%%%%%%%%%%%%%%%%%%%%%%%%%--------人眼检测部分开始---------------------%%%%%%%%%%%%%%%%%%%%%%videoObj=VideoReader('eye.mp4');%读视频文件nframes=get(videoObj,'NumberOfFrames');%获取视频文件帧个数img=read(video......
  • vscode 文件上传快捷键 shift+alt+s (ftp专用)插件用的 ftp-sync
    vscode文件上传快捷键shift+alt+s(ftp专用)插件用的ftp-sync{"key":"shift+alt+s","command":"extension.ftpsyncuploadselected"}......
  • nohup ./ReverseProxy_linux_amd64 &
    IDEA安装JRebel插件实现热部署(无激活码,需要一台服务器)JRebel是一款JAVA虚拟机插件,它使得JAVA程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。JRebel是一款JVM插件,它使得Java代码修改后不用重启系统,立即生效。1.IDEA搜索并安装Jrebel插件 安装......
  • CTFshow Reverse 36D杯 签到 wp
    使用IDA查看源码查看代码int__cdeclmain(intargc,constchar**argv,constchar**envp){__int64v3;//rdx__int64v4;//rcxintv6;//[rsp+4h][rbp-8Ch]unsignedintv7;//[rsp+8h][rbp-88h]intv8;//[rsp+Ch][rbp-84h]intv9[31];//[......
  • shell 循环控制shift、continue、break、exit
    shift命令#位置参数可以用shift命令左移。比如shift3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift1。#测试shift命令(x_shift3.sh)[root@linux-serverscript]#catx_shift3.sh #!/bin/bashshiftecho"......