TLE求助

B3843 [GESP202306 三级] 密码合规

xiaolvsi_ @ 2024-12-15 09:45:11

#include<iostream>
#include<string>
using namespace std;
string str[100005];
int main()
{
    char a;
    bool b=1;
    int i=0,c=0,da=0,xiao=0,shu=0,te=0,zong=0;
    while ((a=getchar())!='\n')
    {
        if (a==',')
        {
            if (da!=0)
            {
                zong++;
            }
            if (xiao!=0)
            {
                zong++;
            }
            if (shu!=0)
            {
                zong++;
            }
            if (b&&c<=12&&c>=6&&te>=1&&zong>=2)
            {
                cout<<str[i]<<endl;
            }
            c=0;
            da=0;
            xiao=0;
            shu=0;
            te=0;
            zong++;
            i++;
            b=1;
        }
        else if (b&&(a>='a'&&a<='z')||(a>='A'&&a<='Z')||(a>='0'&&a<='9')||a=='!'||a=='@'||a=='#'||a=='$')
        {
            c++;
            str[i]+=a;
            if (a>='a'&&a<='z')
            {
                xiao++; 
            }
            if (a>='A'&&a<='Z')
            {
                da++;
            }
            if (a>='0'&&a<='9')
            {
                shu++;
            }
            if (a=='!'||a=='@'||a=='#'||a=='$')
            {
                te++;
            }
        }
        else
        {
            c++;
            b=0;
        }
    }
    return 0;
}

by gaohuashengtx @ 2024-12-15 20:51:07

#include<bits/stdc++.h>
using namespace std;
string s,t; 
int main() {
    cin>>s;s=s+",";
    for(int i=0;i<s.size();i++){
        if(s[i]==','){
            if(t.size()<6||t.size()>12){t="";continue;}//判断位数 
            int a=0,b=0,c=0,d=0,f1=0;//a代表小写字母 b代表大写字母 c代表数字 d代表特殊字符 f1代表是否都不满足以上条件 
            for(int j=0;j<t.size();j++){
                if(t[j]>='a'&&t[j]<='z')a++;//判断小写字母 
                else if(t[j]>='A'&&t[j]<='Z')b++;//判断大写字母
                else if(t[j]>='0'&&t[j]<='9')c++;//判断数字 
                else if(t[j]=='!'||t[j]=='@'||t[j]=='#'||t[j]=='$')d++;//判断特殊字符
                else {f1=1;break;}
            }
            if(((a>0)+(b>0)+(c>0))>=2&&d>0&&!f1){cout<<t<<endl;}//判断满足条件的个数 
            t="";
        }
        else t+=s[i];
    }
      return 0;
}

这样写省时间@xiaolvsi_


|