zoukankan      html  css  js  c++  java
  • 2019牛客暑期多校赛(第八场)

    G题:https://ac.nowcoder.com/acm/contest/888/G

    签到题目。

    题意:给一串字符串如果有三个连续相同的字母就消掉,然后右边字符串补齐,求最简的字符串需要操作几次。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    int dir[8][2]={{1,0},{0,1},{1,1},{1,-1},{-1,1},{-1,-1},{0,-1},{-1,0}};
    #define pi acos(-1)
    #define ls rt<<1
    #define rs rt<<1|1
    #define me0(s) memset(s,0,sizeof(s))
    #define me1(s) memset(s,1,sizeof(s))
    #define mef(s) memset(s,-1,sizeof(s))
    #define meinf(s) memset(s,inf,sizeof(s))
    #define inf 1e18
    const int N=1e6+6;
    inline int read() {
        char c=getchar(); int x=0, f=1;
        while(c<'0'|c>'9') {if(c=='-') f=-1;c=getchar();}
        while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
        return x*f;
    }
    ll exgcd(ll a,ll b){
        if(b==0) return a;
        exgcd(b,a%b);
    }
    ll q_pow(ll a,ll b,ll mod){
        ll anss=1;
        while(b){
            if(b&1) anss=anss*a%mod;
            a=a*a%mod;
            b>>=1;
        }
        return anss;
    }
    ll q_mul(ll a,ll b,ll mod){
        ll anss=0;
        while(b){
            if(b&1) anss=(anss+a)%mod;
            a=(a+a)%mod;
            b>>=1;
        }
        return anss;
    }
    stack<char> ss;
    int main(int argc, char * argv[]) 
    {
        ios::sync_with_stdio(false);
        string s;
        int ans=0;
        cin>>s;
        ss.push(s[0]),ss.push(s[1]);
        for(int i=2;i<s.size();i++){
            if(!ss.empty()&&s[i]==ss.top()){
                ss.pop();
                if(!ss.empty()&&s[i]==ss.top()){
                    ans++;
                    ss.pop();
                }
                else{
                    ss.push(s[i]);
                    ss.push(s[i]);
                }
            }
            else ss.push(s[i]);
        }
        cout<<ans<<endl;
        return 0;
    }

     

    B题:https://ac.nowcoder.com/acm/contest/888/B

    题意:给定一个长度为n的数组,问所有区间中出现数字种类的和是多少。

    题解:期望线性

    把每种数字对答案的贡献分开计算,枚举每个数字,求原序列有多少个子区间包含至少一个该数字,累加答案。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    int dir[8][2]={{1,0},{0,1},{1,1},{1,-1},{-1,1},{-1,-1},{0,-1},{-1,0}};
    #define pi acos(-1)
    #define ls rt<<1
    #define rs rt<<1|1
    #define me0(s) memset(s,0,sizeof(s))
    #define me1(s) memset(s,1,sizeof(s))
    #define mef(s) memset(s,-1,sizeof(s))
    #define meinf(s) memset(s,inf,sizeof(s))
    #define inf 1e18
    const int N=1e6+6;
    inline int read() {
        char c=getchar(); int x=0, f=1;
        while(c<'0'|c>'9') {if(c=='-') f=-1;c=getchar();}
        while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
        return x*f;
    }
    ll exgcd(ll a,ll b){
        if(b==0) return a;
        exgcd(b,a%b);
    }
    ll q_pow(ll a,ll b,ll mod){
        ll anss=1;
        while(b){
            if(b&1) anss=anss*a%mod;
            a=a*a%mod;
            b>>=1;
        }
        return anss;
    }
    ll q_mul(ll a,ll b,ll mod){
        ll anss=0;
        while(b){
            if(b&1) anss=(anss+a)%mod;
            a=(a+a)%mod;
            b>>=1;
        }
        return anss;
    }
    ll a[N],v[N];
    int main(int argc, char * argv[]) 
    {
        ios::sync_with_stdio(false);
        int n;
        cin>>n;
        for(ll i=1;i<=n;i++){
            cin>>a[i];
        }
        me0(v);
        ll ans=0;
        for(ll i=1;i<=n;i++){
            if(v[a[i]]==0){
                ans=ans+n+(i-1)*(n-i);
            }
            else{
                ans=ans+(i-v[a[i]])*(n-i)+(i-v[a[i]]-1)+1;
            }
            v[a[i]]=i;
        }
        cout<<ans<<endl;
        return 0;
    }

     对于核心代码的解释:

    c题:https://ac.nowcoder.com/acm/contest/888/C

    题意:构造矩阵,可以在上一个矩阵的基础上继续构造,构造出的1,-1矩阵为和为0。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    int dir[8][2]={{1,0},{0,1},{1,1},{1,-1},{-1,1},{-1,-1},{0,-1},{-1,0}};
    #define pi acos(-1)
    #define ls rt<<1
    #define rs rt<<1|1
    #define me0(s) memset(s,0,sizeof(s))
    #define me1(s) memset(s,1,sizeof(s))
    #define mef(s) memset(s,-1,sizeof(s))
    #define meinf(s) memset(s,inf,sizeof(s))
    #define inf 1e18
    const int N=1e6+6;
    inline int read() {
        char c=getchar(); int x=0, f=1;
        while(c<'0'|c>'9') {if(c=='-') f=-1;c=getchar();}
        while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
        return x*f;
    }
    ll exgcd(ll a,ll b){
        if(b==0) return a;
        exgcd(b,a%b);
    }
    ll q_pow(ll a,ll b){
        ll anss=1;
        while(b){
            if(b&1) anss=anss*a;
            a=a*a;
            b>>=1;
        }
        return anss;
    }
    ll q_mul(ll a,ll b,ll mod){
        ll anss=0;
        while(b){
            if(b&1) anss=(anss+a)%mod;
            a=(a+a)%mod;
            b>>=1;
        }
        return anss;
    }
    int ans[10000][10000];
    int main(int argc, char * argv[]) 
    {
        ios::sync_with_stdio(false);
        int k;
        cin>>k;
        int n=1;
        while(n<=k){
            for(int i=1;i<=n;i++){
                for(int j=1;j<=n;j++){
                    if(i==1&&j==1){
                        ans[i][j]=1;
                    }
                    else if(i>=1&&i<=n/2&&j>n/2&&j<=n){
                        ans[i][j]=ans[i][j%(n/2)==0?n/2:j%(n/2)];
                    }
                    else if(i>n/2&&j>n/2&&i<=n&&j<=n){
                        ans[i][j]=-ans[i][j%(n/2)==0?n/2:j%(n/2)];
                    }
                    else if(i>n/2&&i<=n&&j>=1&&j<=n/2){
                        ans[i][j]=ans[i%(n/2)==0?n/2:i%(n/2)][j];
                    }
                }
            }
            n*=2;
        }
        for(int i=1;i<=k;i++){
            for(int j=1;j<=k;j++){
                j==1?cout<<ans[i][j]:cout<<' '<<ans[i][j];
            }
            cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    XML入门
    BOM编程
    hdfs高可用
    Hadoop搭建问题及解决方案 --持续更新
    hadoop3完全分布式搭建
    hadoop环境搭建笔记
    hadoop3.x介绍
    基于JavaAPI对远程hdfs的操作
    13. Roman to Integer C++
    9. Palindrome Number(回文数)C++
  • 原文地址:https://www.cnblogs.com/wushengyang/p/11332240.html
Copyright © 2011-2022 走看看