• 8/12 最小表示法+牛客月赛


    P1368 【模板】最小表示法

    用途:求出最小同构串
    思路:
    1.破环成链,长度扩大为2倍
    2.利用三个指针控制,分类跳转,及时淘汰不满足题意 选项。

    #include
    #define endl '\n'
    #define re register
    using namespace std;
    const int N=7e5+10;
    const int inf=0x3f3f3f3f;
    int n;
    int s[N];
    int get_min(int s[]) //找出最小同构串
    {
        for(int i=1;i<=n;i++) s[n+i]=s[i];
        int i=1,j=2,k=0;
        while(i<=n&&j<=n)
        {
            for(k=0;k<n&&s[i+k]==s[j+k];k++);
            s[i+k]>s[j+k]?i=i+k+1:j=j+k+1;
            if(i==j) j++;
        }
        return min(i,j);
    }
    void solve()
    {
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>s[i];
        int k=get_min(s);
    
        for(int i=k;i<=n;i++)
            cout<<s[i]<<" ";
        for(int i=1;i<k;i++)
            cout<<s[i]<<" ";
        cout<<endl;
    }
    signed main()
    {
        solve();
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    Sum 小白月赛A

    思路:看到要删除数字,第一个想到stl容器。2个情况要考虑到:
    1.如果n==1,直接输出0
    2.只有将最大的两个数相加加入到容器中,值才会最大。若出现相加结果为0,及时退出。

    #include
    #define endl '\n'
    #define re register
    #define int long long
    using namespace std;
    const int N=5e5+10;
    const int inf=0x3f3f3f3f;
    const int mod=1e7+7;
    int n;
    priority_queue<int>q;
    void solve()
    {
        while(!q.empty()) q.pop();
        cin>>n;
        if(n==1)
        {
            cout<<0<<endl;return;
        }
        for(int i=1;i<=n;i++)
        {
            int x;cin>>x;
            q.push(x);
        }
        int ans=0;
        while(q.size()>1)
        {
            int x=q.top();q.pop();
            int y=q.top();q.pop();
            int tmp=x+y;
            if(tmp<0)
                break;
            ans=(ans+tmp)%mod;
            q.push(tmp);
        }
        cout<<ans<<endl;
    }
    signed main()
    {
        int t;cin>>t;
        while(t--)
        {
            solve();
        }
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    Gaming 小白月赛B

    题意:刚开始看这个题意,真的不知道在说啥,
    尤其是“如果多次获得编号为 xx 的 debuff,视为身上带有,但仅带有一个”这句话。
    只要不带有m个点所有的debuff,就能获得分数
    思路:
    1.即为能获得所有分数,但要减去一个debuff所在点的分数不能获取。
    2.里用差分求出每个点所有的分数,比较出一个最大值。

    #include
    #define endl '\n'
    #define re register
    #define int long long
    using namespace std;
    const int N=7e6+10;
    const int inf=0x3f3f3f3f;
    const int mod=1e7+7;
    int n,m,a[N],b[N];
    
    void solve()
    {
        cin>>n>>m;
        int sum=0,ans=0;
        for(int i=1;i<=n;i++)
        {
            int x,y,z;cin>>x>>y>>z;
            a[x]+=z;
            a[y+1]-=z;
            sum+=z;
        }
        for(int i=1;i<=m;i++)
            b[i]=b[i-1]+a[i];
        for(int i=1;i<=m;i++)
            ans=max(ans,sum-b[i]);
        cout<<ans<<endl;
    }
    signed main()
    {
        solve();
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    School 小白月赛C

    思路:
    1.开两个结构数组,进行区间合并 2.结构体内定义排序算法,方便使用lowerbound函数

    #include
    #define endl '\n'
    #define re register
    #define int long long
    #define ios (ios::sync_with_stdio(false),cin.tie(0),cout.tie(0))
    using namespace std;
    const int N=1e3+10;
    const int inf=0x3f3f3f3f;
    const int mod=1e7+7;
    int n,m,h,q;
    struct node
    {
        int l,r;
        bool operator <(const node &e1) const
        {
            return r<e1.r;
        }
    }e[N],g[N];
    bool cmp(node e1,node e2)
    {
        if(e1.l==e2.l)
            return e1.r<e2.r;
        return e1.l<e2.l;
    }
    void solve()
    {
        cin>>n>>h>>m>>q;
        for(int i=1;i<=n;i++)
        {
            int a,b,c,d;
            cin>>a>>b>>c>>d;
            e[i].l=a*m+b;
            e[i].r=c*m+d;
        }
        sort(e+1,e+n+1,cmp);
        g[1]=e[1];
        int cnt=1;
        for(int i=2;i<=n;i++)
        {
            if(g[cnt].r<e[i].l)
                g[++cnt]=e[i];
            else
                g[cnt].r=max(g[cnt].r,e[i].r);
        }
        while(q--)
        {
            int x,y;
            cin>>x>>y;
            node tmp={x*m+y,x*m+y};
            int p=lower_bound(g+1,g+cnt+1,tmp)-g;
            if(p>cnt)
                cout<<"Yes"<<endl;
            else
            {
                if(tmp.l>=g[p].l)
                    cout<<"No"<<endl;
                else
                    cout<<"Yes"<<endl;
            }
        }
    }
    signed main()
    {
        ios;
        solve();
        return 0;
    }
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
  • 相关阅读:
    10.正则表达式匹配
    推荐一款最近风很大的配音工具~
    iceberg建表与参数
    【EI会议分享】2022年第三届智能制造与自动化前沿国际会议(CFIMA 2022)
    【JAVAEE框架】Mybatis常用操作(CRUD)
    C语言的文件操作(炒详解)
    Vue 关键概念介绍
    22.10.30补卡 22CCPC桂林站M题
    Lombok的常用注解
    05_Nacos-config配置中心介绍
  • 原文地址:https://blog.csdn.net/weixin_51934288/article/details/126296356