zoukankan      html  css  js  c++  java
  • 汕头市队赛 SRM16

    T3

    C-2 SRM 16

    描述

          给一个数列,给出两种数字, 询问在多少个非空区间中这两种数字出现次数相同。

    输入格式

        第一行:一个数字n,q,n表示数列长度,q表示q组询问

        第二行n个数字表示数列A

         接下来q行每行2个数字表示询问

    输出格式

         输出q行分别对应每个问题的答案

    样例输入

    2 1

    1 2

    1 2

    样例输出

    1

    数据范围与约定

           n <= 5000,q <= 10000 其他数字在int范围内

    样例解释

           只有区间[1,2]符合

    ——————————————————————————

    因为 符合的状态就是 a.r-a.l=b.r-b.l

    转换一下就是 a.r-b.r=a.l-b.l 

    然后我们记录一下差然后瞎jb搞就好了

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define LL long long
    using namespace std;
    const int M=1e4+7,mod=9875321;
    int read(){
        int ans=0,f=1,c=getchar();
        while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();}
        return ans*f;
    }
    int n,q,k1,k2;
    int s[M];
    int f[2*M];
    int main()
    {
        n=read(); q=read();
        for(int i=1;i<=n;i++) s[i]=read();
        for(int i=1;i<=q;i++){
            for(int i=0;i<=2*n;i++) f[i]=0; f[n]=1;
            k1=read(); k2=read();
            int cnt1=0,cnt2=0;
            LL ans=0;
            for(int i=1;i<=n;i++){
                if(s[i]==k1) cnt1++;
                if(s[i]==k2) cnt2++;
                int now=cnt1-cnt2+n;
                ans+=f[now];
                f[now]++;
            }
            printf("%lld
    ",ans);
        }
        return 0;
    }
    View Code

    C-3 SRM 16

    描述

          给一个数列, 询问对于在数列中出现过的数字种类集合S。对于所有的x属于S,y属于S,询问在数列中有多少个区间,x,y这两种数字出现次数相同,对于所有的询问求和后输出。

    输入格式

        第一行:一个数字n

        第二行n个数字表示数列A

    输出格式

         输出1行表示问题的答案

    样例输入

    1 2

    样例输出

    7

    数据范围与约定

           n <= 8000, 其他数字在int范围内

    样例解释

          一共有三种不同的询问

         A 询问1,1 共有3个区间

         B 询问1, 2共有1个区间

         C 询问2,2共有3个区间

    —————————————————————————————

    这道题就n^2枚举区间 然后记录每个点的出现次数 以及每种出现次数的

    就好了

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<queue>
    #define LL long long
    using namespace std;
    int read(){
        int ans=0,f=1,c=getchar();
        while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();}
        return ans*f;
    }
    const int M=1e4+7;
    int n,s[M],sq,ss[M];
    LL h[M],f[M],ans,sum;
    int main()
    {
        n=read();
        for(int i=1;i<=n;i++) s[i]=read(),ss[i]=s[i];
        sort(ss+1,ss+1+n);
        sq=unique(ss+1,ss+1+n)-ss-1;
        for(int i=1;i<=n;i++) s[i]=lower_bound(ss+1,ss+1+n,s[i])-ss;
        for(int i=1;i<=n;i++){
            memset(h,0,sizeof(h));
            memset(f,0,sizeof(f));
            sum=sq*(sq+1)/2;
            h[0]=sq;
            for(int j=i;j<=n;j++){
                sum=sum-h[f[s[j]]]+h[f[s[j]]+1]+1;
                ans+=sum;
                h[f[s[j]]]--; h[f[s[j]]+1]++;
                f[s[j]]++;
            }
        }printf("%lld
    ",ans);
        return 0;
    }
    View Code
  • 相关阅读:
    洛谷 U141580 简化罗波切问题
    洛谷 U141578 维修电路
    洛谷 U140760 狭义公因子
    CF75C Modified GCD
    算法题-求解斐波那切数列的第N个数是几?
    算法题-求N的阶乘
    JAVA8新特性
    nginx启动脚本,手动编辑
    javah生成带有包名的头文件
    Matlab图像处理(03)-基本概念
  • 原文地址:https://www.cnblogs.com/lyzuikeai/p/7440276.html
Copyright © 2011-2022 走看看