ACM--HDOJ 2043--密码--字符串

HDOJ题目地址:传送门

密码

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 46879    Accepted Submission(s): 18920

Problem Description

网上流传一句话:"常在网上飘啊,哪能不挨刀啊~"。其实要想能安安心心地上网其实也不难,学点安全知识就可以。

首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:

(1).密码长度大于等于8,且不要超过16。

(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。

这四个字符类别分别为:

1.大写字母:A,B,C...Z;

2.小写字母:a,b,c...z;

3.数字:0,1,2...9;

4.特殊符号:~,!,@,#,$,%,^;

给你一个密码,你的任务就是判断它是不是一个安全的密码。

Input

输入数据第一行包含一个数M,接下有M行,每行一个密码(长度最大可能为50),密码仅包括上面的四类字符。

Output

对于每个测试实例,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO。

Sample Input

3
a1b2c3d4
[email protected]
^~^@^@!%

Sample Output

NO
YES
NO
#include<stdio.h>
#include<string.h>
#include<map>
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
   int n,flag_len,flag_int,flag_A,flag_a,flag_special,flag;
   string s;
   cin>>n;
   getchar();
   while(n--){
     flag=0;
     flag_len=0;//长度
     flag_int=0;//数字
     flag_A=0;//大写字母
     flag_a=0;//小写字母
     flag_special=0;//特殊字符
     getline(cin,s);
     if(s.size()>=8&&s.size()<16){
        flag_len=1;
     }
     for(int i=0;i<s.size();i++){
        if(s[i]>='0'&&s[i]<='9'){
            flag_int=1;
        }
        if(s[i]>='a'&&s[i]<='z'){
            flag_a=1;
        }
        if(s[i]>='A'&&s[i]<='Z'){
            flag_A=1;
        }
        if(s[i]=='~'||s[i]=='!'||s[i]=='@'||s[i]=='#'||
           s[i]=='$'||s[i]=='%'||s[i]=='^'){
           flag_special=1;
        }
        if(flag_len&&((flag_int+flag_A+flag_a+flag_special)>=3)){
            flag=1;
            break;
        }
     }
     if(flag){
        printf("YES\n");
     }else{
        printf("NO\n");
     }
   }
}
时间: 2024-10-29 19:07:31

ACM--HDOJ 2043--密码--字符串的相关文章

hdoj 2043密码

 首先,我们就要设置一个安全的密码.那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件: (1).密码长度大于等于8,且不要超过16. (2).密码中的字符应该来自下面"字符类别"中四组中的至少三组. 这四个字符类别分别为: 1.大写字母:A,B,C...Z; 2.小写字母:a,b,c...z; 3.数字:0,1,2...9; 4.特殊符号:~,!,@,#,$,%,^; 给你一个密码,你的任务就是判断它是不是一个安全的密码. Input 输入数据第一行包

ACM中常用算法----字符串

ACM中常用算法--字符串 ACM中常用的字符串算法不多,主要有以下几种: Hash 字典树 KMP AC自动机 manacher 后缀数组 EX_KMP SAM(后缀自动机) 回文串自动机 下面来分别介绍一下: 0. Hash 字符串的hash是最简单也最常用的算法,通过某种hash函数将不同的字符串分别对应到不同的数字.进而配合其他数据结构或STL可以做到判重,统计,查询等操作. #### 字符串的hash函数: 一个很简单的hash函数代码如下: ull xp[maxn],hash[max

[acm]HDOJ 3082 Simplify The Circuit

题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3082 字符串处理+并联电阻公式 1 //11481261 2014-08-18 16:52:47 Accepted 3082 0MS 384K 733 B G++ 空信高手 2 #include<string> 3 #include<iostream> 4 #include<cstdio> 5 #include<cstdlib> 6 7 using names

[acm]HDOJ 1200 To and Fro

题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=1200 简单字符串处理,找规律 1 /* 2 11509672 2014-08-21 11:32:55 Accepted 3 1200 0MS 380K 442 B G++ 空信高手 4 */ 5 #include<iostream> 6 #include<string> 7 #include<cstdio> 8 using namespace std; 9 int mai

[acm]HDOJ 2064 汉诺塔III

题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=2064 汉诺塔变种,只能从中间专业,递归关系为:f(n)=3*f(n-1)+2. 1 //汉诺塔变种,只能从中间转移 2 //11485816 2014-08-19 08:44:47 Accepted 2064 0MS 368K 307 B G++ 空信高手 3 #include<iostream> 4 #include<cstdio> 5 using namespace std; 6

hdu 2043密码

密码 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 29823    Accepted Submission(s): 11976 Problem Description 网上流传一句话:"常在网上飘啊,哪能不挨刀啊-".其实要想能安安心心地上网其实也不难,学点安全知识就可以.首先,我们就要设置一个安全的密码.那什么样的密码才

[acm]HDOJ 2059 龟兔赛跑

题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=2059 起点和终点,共n+2个点,n+2个状态,简单DP即可. 1 //11512698 2014-08-21 17:11:55 Accepted 2059 2 //62MS 368K 969 B G++ 空信高手 3 //起点和终点,共n+2个点,n+2个状态,简单DP即可 4 #include<iostream> 5 #include<cstdio> 6 using namespa

[acm]HDOJ 2673 shǎ崽 OrOrOrOrz

题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=2673 拍两次序,交替输出 1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 using namespace std; 5 #define MAX_NUMBER 10000 6 bool myfunction1 (int i,int j) { return (i<j); } 7 bool m

python 字符串实例:检查并判断密码字符串的安全强度

检查并判断密码字符串的安全强度 import string def check(pwd): #密码必须至少包含六个字符 if not isinstance(pwd,str) or len(pwd)<6: return 'noot suitable for password' #密码强度等级与包含字符种类的对应关系 d = {1:'weak',2:'below middle',3:'above middle',4:'strong'} #分别用来标记pwd是否含有数字.小写字母.大写字母.指定的标点

HDU 2043 密码(判断字符串存在性)

密码 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 45796    Accepted Submission(s): 18423 Problem Description 网上流传一句话:"常在网上飘啊,哪能不挨刀啊-".其实要想能安安心心地上网其实也不难,学点安全知识就可以. 首先,我们就要设置一个安全的密码.那什么样的密码