zoukankan      html  css  js  c++  java
  • CF519 ABCD D. A and B and Interesting Substrings(map,好题)

    A:http://codeforces.com/problemset/problem/519/A

    水题没什么好说的。

    #include <iostream>
    #include <string.h>
    #include <stdio.h>
    #include <math.h>
    #include <algorithm>
    #include <queue>
    #define inf 0x3f3f3f3f
    using namespace std;
    char ma[10][10];
    int su,su2;
    int main()
    {
        while(scanf("%s",ma[0])!=EOF)
        {
            su=0;
            su2=0;
            for(int i=1;i<8;i++)
                scanf("%s",ma[i]);
            for(int i=0;i<8;i++)
            {
                for(int j=0;j<8;j++)
                {
                    if(ma[i][j]=='Q')
                    {
                        su+=9;
                    }
                    else if(ma[i][j]=='q')
                    {
                        su2+=9;
                    }
                    else if(ma[i][j]=='R')
                    {
                        su+=5;
                    }
                    else if(ma[i][j]=='r')
                    {
                        su2+=5;
                    }
                    else if(ma[i][j]=='B')
                    {
                        su+=3;
                    }
                    else if(ma[i][j]=='b')
                    {
                        su2+=3;
                    }
                    else if(ma[i][j]=='N')
                    {
                        su+=3;
                    }
                    else if(ma[i][j]=='n')
                    {
                        su2+=3;
                    }
                    else if(ma[i][j]=='P')
                    {
                        su+=1;
                    }
                    else if(ma[i][j]=='p')
                    {
                        su2+=1;
                    }
                    else if(ma[i][j]=='K')
                    {
                        su+=0;
                    }
                    else if(ma[i][j]=='k')
                    {
                        su2+=0;
                    }
                }
            }
            if(su>su2)
                printf("White
    ");
            else if(su==su2)
            {
                printf("Draw
    ");
            }
            else printf("Black
    ");
        }
        return 0;
    }

    B:http://codeforces.com/problemset/problem/519/B

    水题,简单排序即可。

    #include <iostream>
    #include <algorithm>
    #include <math.h>
    #include <map>
    #include <queue>
    #include <stack>
    #define inf 0x3f3f3f3f
    #include <stdio.h>
    #include <string.h>
    typedef __int64 ll;
    #define mod 10000007
    using namespace std;
    int n,a[100010],b[100010],c[100010],k;
    ll sum;
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            for(int i=0;i<n;i++)
            {
                scanf("%d",&a[i]);
            }
            for(int i=0;i<n-1;i++)
            {
                scanf("%d",&b[i]);
            }
            b[n-1]=-1;
            for(int i=0;i<n-2;i++)
            {
                scanf("%d",&c[i]);
            }
            c[n-1]=-2;
            c[n-2]=-3;
            sort(a,a+n);
            sort(b,b+n-1);
            sort(c,c+n-2);
            for(int i=0;i<n;i++)
            {
                if(b[i]!=a[i])
                {
                    printf("%d
    ",a[i]);
                    break;
                }
            }
            for(int i=0;i<n-1;i++)
            {
                if(c[i]!=b[i])
                {
                    printf("%d
    ",b[i]);
                    break;
                }
            }
        }
        return 0;
    }

    C:http://codeforces.com/problemset/problem/519/C

    给你n个老手,m的新手,有两种组队方式,一种是1个老手带两个新手,另外一种是2个老手带一个新手,求最多的组队对数。

    我是暴力求的,记得还有一种方法,不会算了。

    #include <iostream>
    #include <algorithm>
    #include <math.h>
    #include <map>
    #include <queue>
    #include <stack>
    #define inf 0x3f3f3f3f
    #include <stdio.h>
    #include <string.h>
    typedef __int64 ll;
    #define mod 10000007
    using namespace std;
    int n,m;
    ll sum;
    int main()
    {
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            sum=0;
            while(n>0&&m>0)
            {
                if(n>=m&&n>=2)
                {
                    sum++;
                    n-=2;
                    m-=1;
                }
                else if(m>=2)
                {
                    sum++;
                    n-=1;
                    m-=2;
                }
                else break;
            }
            printf("%I64d
    ",sum);
        }
        return 0;
    }

    D. A and B and Interesting Substrings

    题意:在给的一个串,每个字母有固定的权值求满足如下条件的子串的数目

        1 该子串的首字母和尾字母相同

        2 该串除了首尾字母外,其他字母的权值和为0

    思路:维护一个前缀和,用了26个hash分别记录了26种字母每个的前缀和,如果遇到了一个'a',就检查之前有几个和他的前缀和一样的'a',在和上加上去,并维护前缀和。

    map真的是好牛逼,可惜比赛的时候没想到,希望以后会用吧!

    #include <iostream>
    #include <algorithm>
    #include <math.h>
    #include <map>
    #include <queue>
    #include <stack>
    #define inf 0x3f3f3f3f
    #include <stdio.h>
    #include <string.h>
    typedef __int64 ll;
    #define mod 10000007
    using namespace std;
    int h[30];
    char s[100010];
    ll sum,cnt;
    int main()
    {
        while(scanf("%d",&h[0])!=EOF)
        {
           cnt=0;
           sum=0;
           for(int i=1;i<26;i++)
           {
               scanf("%d",&h[i]);
           }
           scanf("%s",s);
           int l=strlen(s);
           map<ll,ll>q[30];                    //map<ll,int>q[30];
           for(int i=0;i<l;i++)
           {
               cnt+=q[s[i]-'a'][sum];
               sum+=h[s[i]-'a'];
               q[s[i]-'a'][sum]++;
           }
           printf("%I64d
    ",cnt);
        }
        return 0;
    }
  • 相关阅读:
    垃圾收集器
    垃圾收集算法
    动态绑定
    数据库连接池原理
    分布式事务:两段式提交(最终一致性)
    C# 推箱子游戏&对战游戏
    C# 结构体和类的区别
    C# 类&结构体&枚举
    C# 哈希表&列队&栈
    C# 数组&集合&泛型集合
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/4311113.html
Copyright © 2011-2022 走看看