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

F. Shift and Reverse

时间:2023-12-08 21:24:51浏览次数:28  
标签:Reverse 200006 int Shift cin down

戳这里,看原题

多重思想的巧妙结合

不多说了,看代码就懂了

#include<bits/stdc++.h>
using namespace std;
int up[200006]={0},down[200006]={0};
int a[200006]={0};
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)cin>>a[i];
        for(int i=n+1;i<=2*n;i++)a[i]=a[i-n];//拆”环“成链,真的太巧妙了,隐含着环的感觉

        up[1]=down[1]=1;
        for(int i=2;i<=2*n;i++)
        {
            up[i]=a[i]>=a[i-1]?up[i-1]+1:1;//代表该点在该点所在的最长非单调递减序列中排第几
            down[i]=a[i]<=a[i-1]?down[i-1]+1:1;//同理,不过是最长非单调递增序列
        }
        int ans=2e9;
        for(int i=n;i<=2*n-1;i++)//如果存在,那么序列的末尾一定大于等于n
        {
            int lr=(2*n-i)%n;//left right,意思是右边剩下的数量。特殊点在于当i==n时为零
            if(up[i]==n)ans=min(ans,min(lr,1+n-lr+1));//对于递增序列,要么把右边的数全部往前移,要么反转一下把包括自己在内的左边的数全部往前移(翻转过来之后就成了右边的数)
            if(down[i]==n)ans=min(ans,min(lr+1,1+n-lr));//同理,这里千万要仔细,最好写的时候嘴里念叨念叨
        }
        printf("%d\n",ans==2e9?-1:ans);
        //for(int i=1;i<=2*n;i++)printf("%d  ",a[i]);//debug
        //puts("");
        //for(int i=1;i<=2*n;i++)printf("%d   %d\n",up[i],down[i]);
    }
    return 0;
}

标签:Reverse,200006,int,Shift,cin,down
From: https://www.cnblogs.com/pure4knowledge/p/17889052.html

相关文章

  • 无涯教程-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"......
  • CTFshow Reverse 36D杯 BBBigEqSet wp
    用ida打开程序,一点点看汇编,发现似乎是机器生成的,先是输入0x80长的flag,然后有0x80段运算,运算的内容是每一个字符乘一个系数相加后与一个数比较。查看代码.text:0000000000001175pushrbp.text:0000000000001176movrbp,rsp.text:00......
  • 强网新拟态 Reverse Writeup
    fisher真正的验证逻辑在main函数的catch块里,不过走到需要满足输入的sha1的值等于2e95a5c5f9643df668d3965a6cdf19541bc0496b,后面发现没影响直接调进去就行。分析一下,加密流程如下:table='ghijklpqrstuvwxyzABCabcDEFdef0123GHI4567JKL+/MNOmnoPQRSXYZ8TUVW9'flag=i......