vijosP1437简单的口令

描述
暑假,简单闲着无聊,边想出了一个很奇怪的东西。。。。。。。
简单有很奇怪的方法来隐藏他的口令。他会选择一个字符串S(由L个小写字母组成,5<=L<=100,000),然后他把S顺时针绕成一个圈,每次取一个做开头字母并顺时针依次取字母而组成一个字符串。这样将得到一些字符串,他把它们排序后取出第一个字符串。把这个字符串的第一个字母在原字符串中的位置-1做为口令。
如字符串alabala,按操作的到7个字符串,排序后得:
aalabal abalaal alaalab alabala balaala laalaba labalaa
第一个字符串为aalabal,这个a在原字符串位置为7,7-1=6,则6为口令。

题解:

WA90我也不想说什么了。。。

代码:

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<iostream>
 7 #include<vector>
 8 #include<map>
 9 #include<set>
10 #include<queue>
11 #include<string>
12 #define inf 1000000000
13 #define maxn 200000+5
14 #define maxm 500+100
15 #define eps 1e-10
16 #define ll long long
17 #define pa pair<int,int>
18 #define for0(i,n) for(int i=0;i<=(n);i++)
19 #define for1(i,n) for(int i=1;i<=(n);i++)
20 #define for2(i,x,y) for(int i=(x);i<=(y);i++)
21 #define for3(i,x,y) for(int i=(x);i>=(y);i--)
22 #define mod 1000000007
23 using namespace std;
24 inline int read()
25 {
26     int x=0,f=1;char ch=getchar();
27     while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
28     while(ch>=‘0‘&&ch<=‘9‘){x=10*x+ch-‘0‘;ch=getchar();}
29     return x*f;
30 }
31 int n,c[maxn],sa[maxn],rk[maxn],h[maxn],t[maxn],t2[maxn];
32 char s[maxn];
33 void build(int m)
34 {
35     int *x=t,*y=t2;
36     for0(i,m)c[i]=0;
37     for0(i,n)c[x[i]=s[i]]++;
38     for1(i,m)c[i]+=c[i-1];
39     for3(i,n,0)sa[--c[x[i]]]=i;
40     for(int k=1;k<=n+1;k<<=1)
41     {
42         int p=0;
43         for2(i,n-k+1,n)y[p++]=i;
44         for0(i,n)if(sa[i]>=k)y[p++]=sa[i]-k;
45         for0(i,m)c[i]=0;
46         for0(i,n)c[x[y[i]]]++;
47         for1(i,m)c[i]+=c[i-1];
48         for3(i,n,0)sa[--c[x[y[i]]]]=y[i];
49         swap(x,y);
50         p=1;x[sa[0]]=0;
51         for1(i,n)x[sa[i]]=y[sa[i-1]]==y[sa[i]]&&y[sa[i-1]+k]==y[sa[i]+k]?p-1:p++;
52         if(p>=n+1)break;
53         m=p-1;
54     }
55 }
56 void calch()
57 {
58     for1(i,n)rk[sa[i]]=i;
59     for(int i=0,k=0,j;i<n;h[rk[i++]]=k)
60      for(k?k--:0,j=sa[rk[i]-1];s[i+k]==s[j+k];k++);
61 }
62 int main()
63 {
64     freopen("input.txt","r",stdin);
65     freopen("output.txt","w",stdout);
66     n=read();int len=0;
67     while(len<n)
68     {
69         scanf("%s",s+len);
70         len=strlen(s);
71     }
72     for0(i,n-1)s[n+i]=s[i];
73     n<<=1;
74     s[n]=‘ ‘;
75     build(128);
76     calch();
77     for1(i,n>>1)if(sa[i]<n/2){printf("%d\n",sa[i]);return 0;}
78     return 0;
79 }

时间: 2024-10-08 08:16:05

vijosP1437简单的口令的相关文章

弱口令检测、端口扫描

前言:在inter环境中,过于简单的口令是服务器面临的最大风险.对于任何一个承担这安全责任的管理员,及时找出这些弱口令是非常必要的,这样便于采取进一步的安全措施, 使用John the Ripper 检测Linux.Unix系统用户的密码强度,使用NMAP扫描端口,可以找出网络中不可控的应用服务,及时关闭不安全的服务,减小安全风险. 1.弱口令探测(john  the ripper) 1)下载并安装:官方网站是http://openwall.com/john/,在该网站可以获取最新的稳定版源码包

Linux的弱口令检测

在internet环境中,过于简单的口令会使服务器面临重要的风险.作为管理人员的我们应及时找出那些密码强度较弱的用户账户,便于进行下一步的安全措施.我们可以安装John the Ripper 软件进行检测用户的密码强度.下面我们来介绍一下如何安装弱口令扫描工具,并作测试.一. 实验前的步骤挂载windows共享出来的文件夹,并对共享的文件夹下的John the Ripper进行安装.被挂载端的步骤如下: 右击被共享的文件,文件中有弱扫描安装包John the Ripper 选择"属性"

弱口令检测——John the Ripper

在网络环境中,过于简单的口令是服务器面临的最大风险,对于一个承担安全责任的服务器管理员来说,及时找到一些弱口令帐户是非常必要的,这样便于采取进一步安全措施(提醒帐户重设更安全的口令密码)John the Ripper 是一款开源的密码破解工具,能够在已知密文的情况下快速分析出明文的密码字串,同样也允许使用密码字典进行暴力破解.所以通过这个工具可以检测linux系统用户的密码强度首先在官方网站(http://www.openwall.com/john/)下载好源码包,以redhat6.5系统的虚拟

网络安全之身份认证---基于口令的认证

基于口令的认证方式是较常用的一种技术.在最初阶段,用户首先在系统中注册自己的用户名和登录口令.系统将用户名和口令存储在内部数据库中,注意这个口令一般是长期有效的,因此也称为静态口令.当进行登录时,用户系统产生一个类似于时间戳的东西,把这个时间戳使用口令和固定的密码算法进行加密,连同用户名一同发送给业务平台,业务平台根据用户名查找用户口令进行解密,如果平台能恢复或接收到那个被加密的时间戳,则对解密结果进行比对,从而判断认证是否通过:如果业务平台不能获知被加密的时间戳,则解密后根据一定规则(如时间戳

Linux -- Centos7 系统引导,登录控制和弱口令

一.grub菜单登录控制 在互联网环境中,大部分服务器是通过远程登录的方式来进行管理的,而本地引导和终端登录过程往往容易被忽视,从而留下安全隐患.特别是当服务器所在的机房环境缺乏严格.安全的管控制度时,如何防止其他用户的非授权介入就成为必须重视的问题.咱们按ESC直接进入grub菜单更改很不安全,那我们要设置一个用户和密码只有知道这些才能去更改 1.先备份防止我们做失败了 2.去配置文件中设置用户和密码 3.重新构建grub菜单 4.验证一下是否有效 二.弱口令检测 在 Internet 环境中

爱根,你消失一天,我如坠深渊!!!模块讲解,苑之恨!!!

time模块 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的时间字符串:(1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行"type(time.time())",返回的是float类型. (2)格式化的时间字符串(Format String): '1988-03-16'. (3)元组(struct_time) :struct_time元组共有9个元素共九个元素:

unix系统安装及应用

账号安全控制 用户账号是计算机使用者的身份或标识,每一个访问系统资源的人,必须凭借其用户账号才能进入计算机. 基本安全措施 系统账号清理 除了手动创建的各种账号之外,还包括随系统或程序安装过程而生成的其他大量账号.常见的非账号用户包括bin,daemon,adm,lp,,mail ,nobody,apache,mysql,dbus,ftp,gdm,haldaemon等.但是为了确保系统的安全,这些用户登录shell通常是/sbin/nologin,表示禁止终端登录,应确保不被人为改动. grep

python提供了一个进行hash加密的模块:hashlib

python提供了一个进行hash加密的模块:hashlib下面主要记录下其中的md5加密方式 import hashlib data1 = 'sada' #####字母和数字 m = hashlib.md5(data1.encode('utf-8')) print(m.hexdigest()) data='我是' #####中文 b = hashlib.md5(data.encode('gb2312')) print(b.hexdigest()) def md5(s): ####这是一个MD5

python基础-常用内建模块

一.collections:内建集合模块. 1.namedtuple:创建一个自定义的tuple对象 2.deque:为了高效实现插入和删除操作的双向列表,适合用于队列和栈 3.defaultdict:Key不存在时返回默认值 4.OrderedDict:保持Key的顺序 5.Counter:一个简单的计数器 二.base64 : 一种用64个字符来表示任意二进制数据的方法 三.struct : str和其他二进制数据类型的转换 四.hashlib : 提供常见的摘要算法,如MD5,SHA1 五