美文网首页
HDU6542 SSY and JLBD 2019CCPC湖南全

HDU6542 SSY and JLBD 2019CCPC湖南全

作者: Celia_QAQ | 来源:发表于2019-05-25 16:34 被阅读0次

    指路:http://acm.hdu.edu.cn/contests/contest_show.php?cid=858

    当时看到全英文的时候是真的放弃了,因为我的确对中文题依赖太深了,那段时间真的一点都不想学习,一点都不想碰到代码,所以现在要重新去做一做吧
    照旧贴上大佬们的题解链接:https://blog.csdn.net/weixin_43880084/article/details/90344526
    https://www.cnblogs.com/-yjun/p/10891597.html

    Hello GDCPC

    题目:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1005&cid=858
    参考:https://www.e-learn.cn/content/qita/2326754
    题意:给你一个字符串,让你在里面寻找可不连续的字符串“xtCpc”,问有多少个
    题目有问题,给了个gdCpc
    样例:输入:10 xtCxtCpcpc 输出:2
    思路:只要保证每个字符前面出现的次数大于本字符出现的次数就好(想想为什么)
    为了保证字符顺序

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=2e5+5;
    char s[maxn];
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            scanf("%s",s);
            int x1=0,x2=0,x3=0,x4=0,x5=0,ans=0;
            for(int i=0;i<n;i++)
            {
                if(s[i]=='x') x1++;
                if(s[i]=='t'&&x2<x1) x2++;
                if(s[i]=='C'&&x3<x2) x3++;
                if(s[i]=='p'&&x4<x3) x4++;
                if(s[i]=='c'&&x5<x4) x5++;
                if(x1&&x2&&x3&&x4&&x5)
                {
                    ans++;
                    x1--;
                    x2--;
                    x3--;
                    x4--;
                    x5--;
                }
            }  
            printf("%d\n",ans);
        }
        return 0;
    }
    

    也可用队列记录每个字符的位置,然后贪心,挑出每个队列中符合条件的最前面的字符.直到有一个队列为空.
    参考:https://www.cnblogs.com/-yjun/p/10891597.html

    #include <bits/stdc++.h>
    #define P pair<int,int>
    #define fir first
    #define sec second
    using namespace std;
    typedef long long ll;
    
    const int N=2e5+5;
    const int mod=998244353;
    char s[N];
    
    map<char,int> m;
    int main(){
        m['x']=1;m['t']=2;m['C']=3;m['p']=4;m['c']=5;
        int n;
        while(~scanf("%d%s",&n,s)){
            queue<int> q[10];
            for(int i=0;i<n;i++){
                q[m[s[i]]].push(i);
                //cout<<m[s[i]]<<endl;
            }
            int ans=0;
            while(!q[1].empty()){
                int pos=q[1].front();
                q[1].pop();
                int f=0;
                for(int i=2;i<=5;i++){
                    while(!q[i].empty()&&pos>q[i].front()) q[i].pop();
                    if(q[i].empty()){
                        f=1;
                        break;
                    }
                    else pos=q[i].front(),q[i].pop();
                }
                if(f) break;
                else ans++;
            }
            cout<<ans<<endl;
        }
        return 0;
    }
    

    或者用map,来自https://www.cnblogs.com/-yjun/p/10891597.html

    #include <bits/stdc++.h>
    #define P pair<int,int>
    #define fir first
    #define sec second
    using namespace std;
    typedef long long ll;
    
    const int N=2e5+5;
    const int mod=998244353;
    char s[N];
    //map<char,int> m;
    
    int main(){
        int n;
        while(~scanf("%d%s",&n,s)){
            map<string,ll> st;
            for(int i=0;i<n;i++){
                if(s[i]=='x') st["x"]++;
                else if(s[i]=='t'){
                    if(st["x"]>0) st["x"]--,st["xt"]++;
                }
                else if(s[i]=='C'){
                    if(st["xt"]>0) st["xt"]--,st["xtC"]++;
                }
                else if(s[i]=='p'){
                    if(st["xtC"]>0) st["xtC"]--,st["xtCp"]++;
                }
                else if(s[i]=='c'){
                    if(st["xtCp"]>0) st["xtCp"]--,st["xtCpc"]++;
                }
            }
            cout<<st["xtCpc"]<<endl;
        }
        return 0;
    }
    

    Can you raed it croretcly?(模拟)

    题目:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1012&cid=858
    参考:https://www.e-learn.cn/content/qita/2326751
    思路:就是判断两个字符串相同,注意如果不同的时候要分情况讨论

    #include<bits/stdc++.h>
    #define ll long long
    #define inf 0x3f3f3f3f
    #define rep(i,a,b) for(register int i=(a);i<=(b);i++)
    #define dep(i,a,b) for(register int i=(a);i>=(b);i--)
    using namespace std;
    const int maxn=2e5+5;
    //const double pi=acos(-1.0);
    //const double eps=1e-9;
    //const ll mo=1e9+7;
    int n,m,k;
    int a[maxn],c[maxn];
    int ans,tmp,cnt;
    int flag;
    char s[maxn],ss[maxn];
    bool ok[maxn];
    string s1,s2;
    int main()
    {
        int T,cas=1;
        while(scanf("%s%s",s,ss)!=EOF)
        {
            s1=s;s2=ss;
            int l1=s1.length();
            int l2=s2.length();
            if(s1==s2) puts("Equal");
            else
            {
                if(l1!=l2) puts("No");
                else if(s1[0]==s2[0]&&s1[l1-1]==s2[l2-1])
                {
                    sort(s1.begin(),s1.end());
                    sort(s2.begin(),s2.end());
                    if(s1==s2) puts("Yes");
                    else puts("No");
                }
                else puts("No");
            }
        }
        return 0;
    }
    

    SSY and JLBD

    题目:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1011&cid=858
    参考:https://www.cnblogs.com/-yjun/p/10891597.html

    思路:1.十三幺:东,南,西,北,红中,白板,发财,一条,九条,一万,九万,一筒,九筒,若这十三张3牌你都有,那就随便胡其中一个(只能胡这十三种任何一个,其他不行)
    2.九莲宝灯:在万、筒、条中的某一种以1112345678999的形式加上1到9其中任意一张成立,必须是门前清的状态。也称作“九连宝灯”。

    分析:思考下这两种胡牌状态
    十三幺:万 筒 条 至少需要 1,9 为六张,东,南,西,北,红中,白板,发财, 为七张 ,剩下为其中一张
    可记录一下这些牌的个数,如果都大于等于1,且总和为14即可。
    同样九莲宝灯: 万筒条三种,可记录每种出现的次数,而且记录下每种里面每个牌的个数。
    只要总次数为14并且有三个以上的1 三个以上的9 中间2345678大于等于1就可以。
    else 不知道
    原文:https://blog.csdn.net/qq_37748451/article/details/90368388

    #include <bits/stdc++.h>
    #define P pair<int,int>
    #define fir first
    #define sec second
    using namespace std;
    typedef long long ll;
    
    const int N=2e5+5;
    const int mod=998244353;
    map<string,int> m;
    string t[10]={
    "dong","nan","xi","bei","zhong","fa","bai"
    };
    int main(){
        string s;
        int f=0;
        int ma=0;
        string tmp="jj";
        string hh;
        for(int i=1;i<=14;i++){
            cin>>s;
            if(s[0]<='9'&&s[0]>='0'){
                if(tmp=="jj") tmp=s[1];
                if(s[1]!=tmp[0]) ma=1;
            }
            else ma=1;
            if(m[s]==1&&f==0){
                f=1;
                string hh=s;
                continue;
            } 
            m[s]++;
        }
        map<string,int>::iterator it=m.begin();
        if(m["1w"]==1&&m["9w"]==1&&m["1p"]==1&&m["9p"]==1&&m["1s"]==1&&m["9s"]==1){
            int f=0;
            for(int i=0;i<7;i++){
                if(m[t[i]]!=1) f=1;
            }
            if(f) puts("I dont know!");
            else puts("shisanyao!");
        }
        else{
            if(ma) puts("I dont know!");
            else{
                m[hh]++;
                if(m["1"+tmp]>=3&&m["9"+tmp]>=3&&m["2"+tmp]>=1&&m["8"+tmp]>=1){
                    puts("jiulianbaodeng!");
                }
                else{
                    puts("I dont know!");
                }
            }
        }
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:HDU6542 SSY and JLBD 2019CCPC湖南全

          本文链接:https://www.haomeiwen.com/subject/rfrzzqtx.html