• 牛客多校第八场


    https://ac.nowcoder.com/acm/contest/888#question

    B

    签到题,代码可真短。

    题意:给n个数,对于每个连续子序列求区间内不同数字的个数的和。

     做法:一开始枚举每个区间的右端点i,判断每个数字在区间左端点为1~i这个范围内对右端点i的贡献,然后累加答案,然后超时了。

    之后想到,每次变化范围只会变一个数字,只会改变一个数字的贡献,所以开了一个sum记录所有数字的贡献就好了。

    #include<bits/stdc++.h>
    using namespace std;
    
    const int maxn=1e5+10;
    #define ll long long
    int maxx[maxn];
    int main()
    {
        int n;
        scanf("%d",&n);
        ll ans=0;
        ll sum=0;
        int t;
        for(int i=1; i<=n; i++)
        {
            scanf("%d",&t);
            sum=sum-maxx[t]+i;
            maxx[t]=i;
            ans=ans+sum;
        }
        printf("%lld",ans);
    }
    View Code

    C

    题意:给个m(m为2的幂次方),构造m*m的矩阵,使每个矩阵的任意不同的两行满足:一 一对应列的元素相乘在相加,和为0;

    思路:对于一个为2*2的矩阵,构成4*4的矩阵,只需将2*2矩阵放在第一象限,第二和第三象限,第四象限反转值,这样可以保证,第一第二象限值对应相等,第三和第四互不相等,同时满足,任意俩行相同个数等于不相同的个数。

    #include<bits/stdc++.h>
    using namespace std;
    
    int a[5000][5000];
    int main()
    {
        int m;
        scanf("%d",&m);
        a[1][1]=1;
        for(int i=1;i<=1050;i=i*2)
        {
            for(int j=1;j<=i;j++)
                for(int k=1;k<=i;k++)
                {
                    a[j+i][k]=a[j][k];
                    a[j][k+i]=a[j][k];
                    a[j+i][k+i]=-a[j][k];
                }
        }
        for(int i=1; i<=m; i++)
        {
            for(int j=1; j<=m; j++)
                printf("%d ",a[i][j]);
            printf("
    ");
        }
    }
    View Code

    签到题

    #include<bits/stdc++.h>
    using namespace std;
    
    const int maxn=1e5+10;
    char s[maxn];
    int main()
    {
        scanf("%s",s+1);
        int len=strlen(s+1);
        int ans=0;
        stack<char> st;
        for(int i=1; i<=len; i++)
        {
            st.push(s[i]);
            if(st.size()>=3)
            {
                char c1=st.top();st.pop();
                char c2=st.top();st.pop();
                char c3=st.top();st.pop();
                if(c1==c2&&c2==c3)
                    ans++;
                else
                {
                    st.push(c3);st.push(c2);st.push(c1);
                }
            }
        }
        printf("%d",ans);
    
    
    
    }
    View Code
  • 相关阅读:
    JavaScript Date对象和函数 (一)
    Css3 文字渐变整理(一)
    Asp.net Core CacheHelper 通用缓存帮助类
    .net core中使用GB2312编码的问题
    苹果手机微信浏览器select标签选择完成之后页面不会自动回到原位
    .Net Core NOPI操作word(二) 表格操作
    .Net Core NOPI操作word(一)
    .NetCore中EFCore的使用整理(三)-关联表操作
    windos server2012安装.net core 2.2问题
    C# 最简单的使程序单进程运行的方法
  • 原文地址:https://www.cnblogs.com/dongdong25800/p/11333861.html
Copyright © 2020-2023  润新知